web-dev-qa-db-ja.com

Telnetセッション用のスクリプトを作成しますか?

Telnetサーバーに接続し、通常のTelnetを実行してログオフできるスクリプトを作成する簡単な方法を知っている人はいますか?私は、telnetに慣れていないユーザーと、実行する必要があるコマンドを扱っています。私が望むのは、彼らがスクリプトをダブルクリックし、そのスクリプトにコマンドを自動的に実行させることだけです。

「ユーザーはどのプラットフォームにいますか?」 WindowsとLinuxの両方にあります。 Perl、Java、またはPythonなどの言語での実装は受け入れられます。PerlにはNet :: Telnetモジュールがあります。誰かがそれを使用したことがありますか?

私の理想的な解決策は、2つのスクリプトファイルを作成することです。 Windows用のBATファイル、およびLinux用のシェルスクリプト。これにより、二重保守が問題になりますが、Perl/Java/Python/etc ...をすべてのマシンにインストールする必要がないことを意味します。残念ながら、バッチファイルまたはシェルスクリプトを使用してtelnetセッションを自動化する方法を見たことはありません。

ありがとう。

41
TrentCoder

Expect はこのために構築され、入出力やタイムアウトなどを処理できます。TCLファンでない場合は、Perl/Python/Java用のExpectモジュールがあることに注意してください。

編集:上記のページは、 ウィキペディアの期待 エントリが有用なリソースであることを示唆しています:-)

13
Brian Agnew

UNIXでtelnetセッションをスクリプト化するためにさまざまな方法を使用しましたが、おそらく最も簡単な方法は、出力がtelnetにパイプされる一連のechoおよびsleepコマンドです。出力を別のコマンドにパイプすることも可能です。

愚かな例

(エコーパスワード;エコー "show ip route";スリープ1;エコー "quit")| telnet myrouter 

これは(基本的に)Ciscoルーターのルーティングテーブルを取得します。

37
Vatine

別の方法は、vatineショーと同じ形式でnetcat(またはnc、どのposixに依存する)を使用することです。または、独自の行に各コマンドを含むテキストファイルを作成できます。

いくつかのposixのtelnetがリダイレクトを正しく処理しないことがわかりました(これがnetcatを推奨する理由です)

12
KevinDTimm

このvbsスクリプトはCiscoスイッチをリロードし、telnetがWindowsにインストールされていることを確認します。

Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
oShell.Run "telnet"
WScript.Sleep 1000
oShell.Sendkeys "open 172.25.15.9~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "en~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "reload~"
WScript.Sleep 1000
oShell.Sendkeys "~"
Wscript.Quit
7
Arjan Keij

いい考えではないかもしれませんが、私はJavaを使用し、簡単なTCP/IPソケットプログラミングを使用してtelnetサーバーに接続し、通信を交換しました。 SSHなど、ハンドシェイクなどの方法がわからない場合は難しいかもしれませんが、単純なtelnetはおやつとして機能します。

私が試した別の方法は、Java System.exec()などで外部プロセスを使用し、telnetに組み込まれたウィンドウにあなたのための仕事をさせて、あなたはローカルにデータを送受信するだけでしたシステムプロセス。

3
rizwan
import telnetlib

user = "admin"
password = "\r"

def connect(A):
    tnA = telnetlib.Telnet(A)
    tnA.read_until('username: ', 3)
    tnA.write(user + '\n')
    tnA.read_until('password: ', 3)
    tnA.write(password + '\n')
    return tnA
def quit_telnet(tn)
    tn.write("bye\n")
    tn.write("quit\n")
3
Harshan Gowda

SendCommandツール を確認します。

次のように使用できます。

Perl sendcommand.pl -i login.txt -t Cisco -c "show ip route"
3

Pythonを使用したActive Stateの例が気に入っています。完全な link です。リンクから簡単なログの一部を追加しましたが、できることの概要を得ることができます。

import telnetlib

prdLogBox='142.178.1.3'
uid = 'uid'
pwd = 'yourpassword'

tn = telnetlib.Telnet(prdLogBox)
tn.read_until("login: ")
tn.write(uid + "\n")
tn.read_until("Password:")
tn.write(pwd + "\n")
tn.write("exit\n")
tn.close()
0
rshield

Bash Shellは、このすぐに使えるものをサポートしています。

exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
cat <&${stream}

フィルタリングして一部の行のみを表示するには、次を実行します:grep Example <&${stream}

0
kenorb

いくつかの質問:

  1. Telnet接続するデバイスに何かを置くことはできますか?
  2. スクリプトによって実行されるコマンドは同じですか、それともマシン/ユーザーによって異なりますか?
  3. アイコンをクリックするユーザーにユーザーIDやパスワードを提供する必要がありますか?

とは言っても、少し前にいくつかのJavaを書いて、あなたに役立つかもしれないIP対応の電源タップ(BayTech RPC3s)と話をしました。興味があるなら、私は掘り起こし、どこかに投稿できるかどうかを確認します。

0
BonkaBonka