2

Telnet 機能を使用してカメラにアクセスしたいと考えています。問題は、パスワード保護があることです。telnet 10.30.blah.blahこれは、プロンプトが表示されたらパスワードを入力するだけなので、ターミナル経由で行う場合は問題ありません。しかしphpでは、パスワードを入力する機会が見当たりません。

$con = fsockopen("10.30.blah.blah", 25);
$msg = "camera move left";
fwrite($con, $msg);

誰にもアイデアはありますか?

更新:@Cfreakが言ったように、fputsを使用してパスワードを出力しようとしましたが、それでも役に立ちませんでした。スクリプトがターミナルで試行していることを正確に実行すると、機能します。コードは次のとおりです。

$con = fsockopen("10.30.blah.blah", 23, $errno, $errstr, 30);
$pass = "admin";
sleep(5);
fputs($con, $pass);
sleep(5);
$msg = "camera move left";
fputs($con, $msg);

更新:変数\rの最後に a が必要であることがわかりました。$msg助けてくれてありがとう!

4

3 に答える 3

1

出力するだけです。私が見たいくつかの例では、fputs. プロンプトが表示されることを確認するために、1 秒間スリープする必要がある場合があります。fsockopenマニュアルページのコメントに実際に例があります: http://php.net/manual/en/function.fsockopen.php

本当に、これを行うモジュールを探すことをお勧めします。簡単なグーグルショーはそこにいくつかあることを示しています。私はそれらのどれも使用していないので、特定のものをお勧めしたくありません.

于 2011-06-08T14:25:55.720 に答える
1

独自のプロトコル スタックを実装しようとするよりも、proc_open を使用して telnet を実行することをお勧めします (telnet には、ソケットからの読み取りと書き込みだけではありません)。実際、telnet は本質的に安全ではないため、可能な限り回避する必要があります。(SSL を使用しない基本的な http 認証も同様に悪い)。

ただし、SMTP や HTTP とは異なり、これはそれほど複雑なプロトコルではなく、ソケットを使用して単純なクライアントを実装するのはかなり簡単です。あなたが提供したコードは、ユーザー名/パスワードのプロンプトを読み取ったり、ソケットに応答を書き込んだりしていないため、telnet 経由でログインする方法について非常に奇妙なアイデアを持っているか、コード スニペットが無関係です。

Cfreak は、「プロンプトが表示されることを確認するために、1 秒間スリープする必要があるかもしれません」と述べました。これは正しくありません。telnetを使用して応答を送信する前に、ユーザー名プロンプト、パスワード プロンプト、および最初の CLI プロンプトを待つ必要があります。実際、telnet でのこの種の奇妙な振る舞いを回避するために書かれたプログラミング言語 ( expect ) があります。

ところで、telnet はポート 23 で実行されます - ポート 25 は SMTP に使用されます

于 2011-06-08T14:51:21.117 に答える
0

ここに telnet 経由で loginc を実装するクラスがあります: http://www.dali.net.nz/Telnet.class.php.txt

関数 login($username, $password) を参照してください。

于 2011-06-08T14:28:50.893 に答える