Php 如何连续捕获telnet会话/客户端输出(fread)?
我正在socket/telnet控制台上执行命令(Php 如何连续捕获telnet会话/客户端输出(fread)?,php,sockets,Php,Sockets,我正在socket/telnet控制台上执行命令(fputs),并通过下面的代码获得输出/结果(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(
fputs
),并通过下面的代码获得输出/结果(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);
现在,我的要求是在不通过FPUT执行任何命令的情况下获得所有控制台/套接字输出。例如,Cisco路由器在telnet控制台/套接字上提供连续的调试消息/打印,而无需FPUT执行任何命令
如何在不执行任何命令(fputs
)的情况下连续捕获(fread
)任何telnet会话输出一段时间
如果我以每x秒一次的离散方式捕捉,我肯定会错过一些控制台输出。为此,我会切换到家庭。当试图通过性能和扩展来实现上述目标时,会有巨大的改进
$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 );
}
}
$stream=stream\u socket\u客户端(“tcp://10.1.1.1:23“,$errno,$errstr,30);
如果(!$stream){
回显“$errstr($errno)
\n”;
}否则{
fwrite($stream,“sh run”.PHP_EOL);
//设置阻塞模式-等待流上的响应
流\设置\阻塞($stream,true);
while(true){
//这是你的回答
回声流\u获取\u内容($stream);
}
}
您需要在上面添加一些内容来中断
while(true)
循环,否则脚本将永远运行,但我使用这种方法来执行类似的操作 非常感谢你。阻塞意味着tcp流将永久保持打开状态。我写了吗?在设置块模式后,一次调用echo stream\u get\u contents($stream)花费了太多时间,对于小的缓冲区内容需要一分钟以上的时间。您知道如何最小化这一点,以便多次调用不会花费太多时间。。