2

私は PHP で Tor を使用しています。今のところ、すべて正常に動作しています。しかし、PHPからTorを起動しようとすると、Torが現在実行されているためにエラーがスローされることがあるので、Torのステータス(実行中かどうか)を確認する方法があるかどうか疑問に思っていました

SOCKS5 プロトコルまたは Linux CLI しか使用できません。これらは私の唯一のオプションです。

:この関数はTorに接続します(動作します)。

function init()
    {
        //Connect to Tor

        $socket = fsockopen($this->proxyIp, $this->proxyPort);      
        fwrite($socket, 'AUTHENTICATE' . PHP_EOL);

    }  
4

2 に答える 2

2

一般に、Unix/Linux デーモンは一般に、ロック ファイル (多くの場合 にあります) を使用して「既に実行中」のチェックを実装します/var/runfile_exists()ロックファイルの存在を確認するために使用できます。もちろん、これを使用して、プロセスがクラッシュしたかどうかを検出することはできません (したがって、プロセスが特定の時点で実際に実行されているかどうか)。プロセス テーブルの確認が必要な場合があります。

特にTorに関しては、簡単なWeb検索では、それを行う必要がないことが示唆されているようです. Tor はUnix ドメイン ソケットを見つけ/var/run/tor/control(構成によっては、TCP ポート 9051 もリッスンします)、他のプログラムがそれを制御できるようにします。そのソケットを介して (PHP のソケット関数Tor Control Protocolを使用して) Tor に接続しようとすると、うまくいく可能性があります。

于 2013-04-14T22:01:10.777 に答える
0

この問題の解決策を見つけました。基本的には、実行中のすべてのプロセスを取得し、それらの中から「tor」を検索しています( Bass Jobsenのコメントに基づく)。

それがコードです:

注: このコードは Ubuntu でのみテストされていますが、ほとんどの Linux OS で動作するはずです。

function isRunning()
{
    //Get all running processes and search for "tor" within them
    //The "[" and "]" are used to execlude ps and grep from the returned result.
    $CLIResult = exec('ps aux | grep -w [t]or');

    //If no processes was found(= Tor is not running..)
    return empty($CLIResult);

}
于 2013-04-15T12:03:22.827 に答える