2009-04-02 7 views
39

誰かがtelnetサーバーに接続できるスクリプトを作成する簡単な方法を知っていますか?通常のtelnetのものを実行してからログオフしますか?私は、telnetとそれを実行するために必要なコマンドに精通していないユーザーに対処しています。私が望むのは、スクリプトをダブルクリックして、そのスクリプトが自動的にコマンドを実行するようにすることだけです。Telnetセッション用のスクリプトを作成していますか?

おそらく、ユーザーはどのプラットフォームですか?彼らはWindowsとLinuxの両方になります。 Perl、Java、Pythonなどの言語での実装も可能です。 PerlにはNet :: Telnetモジュールがあることがわかります。誰もそれを使用していますか?

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

ありがとうございました。

+0

python telnetlibモジュールを使用してください。 例はこちらです。http://stackoverflow.com/questions/1491494/telnet-automation-scripting – Vanuan

答えて

12

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

EDIT:上記のページはthe Wikipedia Expectエントリは、私はUNIXでのスクリプトのTelnetセッションのための様々な方法を使用しましたが、最も簡単な1おそらくエコーや睡眠一連のコマンドである

+1

TCLを習得したくない場合、Expect実装はPerlのExpect.pmモジュールなどの他の言語でも利用できます。 –

+1

Expectディストリビューションには、autoexpectというスクリプトが含まれています。このスクリプトは、セッションを参照してexpectスクリプトを生成します。生成されたスクリプトは、簡単に微調整できます。 – sigjuice

+3

TCL/TKは、それを使って書かれたツールをたくさん使っています。単に、組み込みシステムで依存関係が完全に満たされていないからです。すべてのことを忘れて、netcat = CPU負荷はほとんどありません。 –

31

:-)便利な資源であることを示唆していますそれらの出力はtelnetにパイプされます。出力を別のコマンドにパイプすることも可能です。

愚か例

 
(echo password; echo "show ip route"; sleep 1; echo "quit") | telnet myrouter 

これは(basicallly)は、Ciscoルータのルーティングテーブルを検索します。

+0

括弧の目的はここにありますか? –

+5

@WakanTankaエコーと強制スリープを強制的にサブシェルで実行し、stdoutを共有し、実際にスリープ状態にすると、quitコマンドがエコーされる前に出力が一時停止され、接続が終了する前に完全ルーティングテーブルが出力されます。 – Vatine

+0

ありがとう@Vatine良い例、私のために働いた。 – MikeRoger

12

もう一つの方法は、vatineと同じフォーマットでnetcat(またはnc、posixに依存する)を使用する方法と、独自の行に各コマンドを含むテキストファイルを作成する方法です。

私が直接あなたの質問に関連していないが、いくつかのPOSIX」Telnet接続は、(私はnetcatを示唆理由である)を正しく

+0

優秀な答え、telnetは動作していませんでしたが、代わりにnc経由でそれを配管しました。 – I82Much

+5

あなたがダウンボートしたときに、理由を教えてください。(具体的には数年後) – KevinDTimm

+0

あなたの答えは、単にVatineの答えのコメントだったかもしれません。または彼の編集。 「vatineショーと同じフォーマット」と言いましたが、まったく新しい答えを投稿する必要はありませんでした。だから、最高の答えを出すことは、お互いを参照することで多くの答えを出すことよりも優れている、と私は信じています。ところで、私はdownvoteしなかった。 – artfuldev

-1

をリダイレクト処理しないことを発見した、私はあなたが特定の実行できるようあなたは、代わりにsshを使用することをお勧めしますそれを介したコマンド(デフォルトではより安全です)。質問の

0

カップル:

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

しかし、私はいくつかのIP対応パワーストリップ(BayTech RPC3s)と話をしています。興味があれば、私がそれを掘り出してどこかに投稿できるかどうかを見ていきます。

3

SendCommand toolを確認してください。

次のようにあなたはそれを使用することができます。

perl sendcommand.pl -i login.txt -t cisco -c "show ip route" 
3

それは良いアイデアを鳴らないかもしれないが、私は、Javaを使用し、telnetサーバと交換通信に接続するために、単純なTCP/IPソケットプログラミングを使用。プロトコルが実装されていることが分かっていれば、それは完全に機能します。 SSHなどの場合、ハンドシェイクなどの方法がわからない限り難しいかもしれませんが、単純なtelnetは扱いのように動作します。

もう1つの方法は、java System.exec()などの外部プロセスを使用していたし、telnetでビルドされたウィンドウにジョブを実行させ、ローカルシステムプロセスにデータを送受信するだけです。

7

この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 
-1

BAT Dosファイルにtelnetセッションを書き込み、実行します。

+2

BATchファイル内からFTPセッションを制御/スクリプト化することはできません.FTPセッションを開始することはできます。 FTPセッションをスクリプトするには、スクリプトコマンド '-s:filename.txt'を使用して、スクリプトを含むテキストファイルを識別する必要があります。 –

+0

FTP?質問はTELNETセッションに関するものだと思う – Sara

0

私は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() 
2
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") 
1

バッシュシェルは、例えば、このアウトオブボックスをサポートしています

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}

関連する問題