1

fputsソケット/telnet コンソールでcommand( ) を実行freadし、以下のコードで output/result( ) を取得していますが、問題なく動作しています。

//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 ルーターは、fputs によるコマンドを実行しなくても、telnet コンソール/ソケットに継続的なデバッグ メッセージ/出力を提供します。

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 に答える