如何检查Tor是否在PHP中运行?

时间:2013-04-14 17:28:13

标签: php socks tor

我正在使用Tor和PHP,目前一切正常。但是,当我尝试从php启动Tor时,它有时会抛出一个错误,因为Tor目前正在运行,所以我一直想知道是否有任何方法来检查Tor的状态(运行与否)

我只能使用SOCKS5协议或Linux CLI;这些是我唯一的选择。

注意:此功能连接到Tor(它可以工作)。

function init()
    {
        //Connect to Tor

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

    }  

2 个答案:

答案 0 :(得分:2)

通常,Unix / Linux守护程序通常使用锁定文件(通常位于/var/run)实现“已在运行”检查。您可以使用file_exists()来检查锁定文件的存在。当然,这不能用于检测进程是否已崩溃(因此进程是否实际在任何给定时刻运行); checking the process table可能是必要的。

对于Tor来说,快速的网络搜索似乎表明你不必这样做。 Tor在/var/run/tor/control处找到Unix domain socket(并且还根据配置侦听TCP端口9051)以允许其他程序控制它。尝试通过该套接字连接到Tor(使用PHP的socket functionsTor Control Protocol)可能会有效。

答案 1 :(得分:0)

我找到了解决这个问题的方法,它基本上是在运行所有正在运行的进程并在其中搜索“tor”(基于Bass Jobsen's comment)。

这就是代码:

注意:此代码仅在Ubuntu中进行了测试,但它应该适用于大多数Linux操作系统。

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);

}