3

telnet で STP デバイスをイーグルし、そこでコマンドを実行するスクリプトが必要です。

コマンド プロンプトから eagle STP デバイスに telnet しようとすると、

私は以下の出力を得ています:

[root@localhost tmp]# telnet hostname port
Trying hostname...
Connected to hostname hostname).
Escape character is '^]'.

ここでは、perl スクリプトで一致するプロンプトが表示されません。プロンプトを表示するには、control+a を押す必要があります。control+a を押すと、以下の出力が得られます。

[root@localhost tmp]# telnet hostname port
Trying...
Connected to hostname.
Escape character is '^]'.


>

次に、このプロンプトで login:uid を入力する必要があります

> login:uid=dumps

次に、パスワードの入力を求められます

Enter password : password

コマンドを実行するには、もう一度 control+a を押す必要があります。

> rtrv-dstn.

私はここで打たれました.telnetコマンドの後にcontrol+aコマンドを渡すことができません.

私は以下の方法でスクリプトを書きました。しかし、それは機能していません。誰でも私を助けることができます!!!!

#!/usr/bin/perl
use Net::Telnet;
my $host='hostname';
my $port='port';
my $telnet = new Net::Telnet(Host => $host, Port => $port, Timeout => 20)
or die "connect failed: $!";
$telnet->open($host);
print"Hi iii";
$telnet->waitfor('+$/i');');
print"Hello";
$telnet->print("^]");
$telnet->waitfor('/>$/i');
$telnet->print("login:uid=username");
$telnet->waitfor('/Enter Password :\s+$/i');
$telnet->print("password");
$telnet->waitfor('/>$/i');
@res1=$telnet->print("rtrv-dstn");
print"@res1";
Exit;
4

3 に答える 3

1

Net::Telnetから:

print - オブジェクトに書き込む

このメソッドは@list 、続いて出力レコード区切り文字をオープン オブジェクトに書き込み、すべてのデータが正常に書き込まれた場合は 1 を返します。タイムアウトまたはその他の障害が発生すると、エラー モード アクションが実行されます。errmode() を参照してください。

$telnet->ors("\x01");以下を介して、または以下を使用して、output_record_separtor を設定できます。

$telnet->cmd("\x01");

Ctrl-A必要なときに送信します。テスト用の Eagle STP はありませんが、これが役立つことを願っています。

ところで、各メソッド呼び出しの出力を常にチェックして、それが機能することを確認する必要があります。

于 2013-08-21T15:43:28.727 に答える
1

試すデバイスはありませんが、メタシンボルを使用し"\cA"て CTRL-A を送信してみてください:

$telnet->print("\cA");

また^]、ローカル telnet クライアントがシーケンスをサーバーに直接送信せずにエスケープするために使用されるため、ここでは使用しないと思います。

于 2013-08-21T15:49:27.927 に答える
0

$telnet->print("\cA") は、末尾の改行も送信するため、おそらく機能しません。$telnet->put("\cA"); のように、末尾に改行を付けずに文字を送信するには、put() を使用します。

于 2013-08-22T16:47:18.417 に答える