1

fputs在 socket/telnet 控制台上执行命令()并fread通过下面的代码获取输出/结果(),它工作得很好。

//open socket let's say ip = 192.168.10.5 and port = 21
$this->socketResource = fsockopen($this->nodeIp,$this->portNumber);
//execute some commands, for example "ipconfig"
fputs($this->socketResource,$command);
//get output string
$output = fread($this->socketResource,30000);

现在我的要求是在不通过 fputs 执行任何命令的情况下获取所有控制台/套接字输出。例如,Cisco 路由器在 telnet 控制台/套接字上提供连续的调试消息/打印,而无需通过 fputs 执行任何命令。

如何fread在不执行任何命令()的情况下连续捕获()任何 telnet 会话输出fputs

如果我像每 x 秒那样以离散方式捕获,我肯定会错过一些控制台输出。

4

1 回答 1

2

为此,我会切换到stream_*家庭。当试图通过性能和扩展来完成上述任务时,会有很大的改进。

$stream = stream_socket_client("tcp://10.1.1.1:23", $errno, $errstr, 30);
if (!$stream ) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($stream , "sh run" . PHP_EOL);

    // Set Blocking Mode - Wait For A Response On The Stream
    stream_set_blocking( $stream , true );
    while( true ){

        // This is your response
        echo stream_get_contents( $stream );
    }

}

你需要在上面添加一些东西来打破while(true)循环,否则脚本将永远运行,但这是我用来做类似事情的一种方法。

于 2012-07-26T15:27:54.753 回答