2

我正在将 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);

    }  
4

2 回答 2

2

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

具体到 Tor,快速的网络搜索似乎表明您不必这样做。Tor 将Unix 域套接字定位在/var/run/tor/control(并且也侦听 TCP 端口 9051,具体取决于配置)以允许其他程序控制它。尝试通过该套接字(使用 PHP 的套接字函数Tor 控制协议)连接到 Tor 可能会奏效。

于 2013-04-14T22:01:10.777 回答
0

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

那是代码:

注意:此代码仅在 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);

}
于 2013-04-15T12:03:22.827 回答