• ベストアンサー

[WSH|JS|VB] telnetコマンドの標準出力を受け取りたい

こんにちは。 Windows Scripting Host(WSH)でtelnetコマンドのオートパイロット(自動操縦)をしたいと思っています。 そこで、ログインプロンプトなどを待つ際、waitで時間で待つのではなく、「login:」という文字を待ってログインするようにしたいのですが、できるでしょうか?教えてください。 WSHをご存知ない場合は、VBの範囲でお答えいただければと思います。適用できる可能性がありますので。 なお、言語は、JScript,VBScriptどちらでも構いません。 よろしくお願い致します。

noname#27709
noname#27709

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

telnet コマンドは、実装が二つありますよね。95 にあった、Window アプリケーションのと NT のコマンドプロンプトで動くやつ。 Window アプリケーションだと、キーを送り込むのは簡単だが、表示を取るのは、まず、不可能ですよね。 コンソールアプリケーションであれば、どうやってコンソールバッファのハンドルを取得するか が、難しそう。 rsh もどきが作りたいのであれば、socket を扱うプログラムを作る方が、何百倍も簡単です。 # この回答が、期待に添わないであろう、という意味で自信無しにしておきます

noname#27709
質問者

お礼

ご回答ありがとうございます。 2つ種類あるのですか?すみません。コンソールの方です。 プロセスを指定したら、そこに入ってくるメッセージは簡単に取得できるのかなと思ったのですが、簡単に取れるわけではないのですね。 ハンドルを取得する必要があると。 ありがとうございます。 ここはsocketプログラミングを勉強して組んだ方がよさそうですね。 その方が一般的に使えますし。 どうもありがとうございます! 目的が、「オートパイロットしたい」というより「作りたい」なので、回答は期待に添っています。socketを扱うより、telnetコマンドを操作した方が手っ取り早いかなと思ったのです。 どうもありがとうございます。

その他の回答 (4)

  • mann555
  • ベストアンサー率46% (29/62)
回答No.5

BASP21のソケットオブジェクトを利用すればWSHでも出来ますよ。 下記URLのfaq:「ソケットオブジェクトでtelnetしたい」を参照してください

参考URL:
http://www.hi-ho.ne.jp/babaq/basp21.html
noname#27709
質問者

お礼

できるだけ、外部プログラムは使いたくないのですが、これは結構役に立ちそうですね。 ありがとうございます!

  • Methyln
  • ベストアンサー率29% (242/823)
回答No.4

telnetのオートパイロットならTeratermの方が簡単に組めると思いますが。 なぜWSHで? 秀Termもマクロは強力ですが、有料ですしね。

noname#27709
質問者

お礼

ご回答ありがとうございます。 No.3でご回答させていただいた通りです。 よろしくお願い致します。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.3

既存のTelnetクライアントソフトを使うのは? Tera Termとか 秀Termとか

noname#27709
質問者

お礼

ご回答ありがとうございます。 Windows標準ソフト以外に依存せずに、 下記にもあります通り、 汎用的なrshコマンド(UNIX等に接続して、UNIXのコマンドをWindowsのコマンドプロンプト等から実行)のようなものが作りたいのです。 原稿できているものは、こんな感じです。 ※現段階ではホスト名・コマンドなどは決め打ちです。 何か情報があればよろしくお願い致します。 今のところ,socketでないとできなそうですが、 WSHなら、OSの機能が呼べて何とかなるかもしれないので・・・。 よろしくお願いします。 -- var WShell = WScript.CreateObject("WScript.Shell"); WShell.Run("telnet hostname", false, false); WScript.Sleep(1000); //5秒待って WShell.Sendkeys("user{ENTER}"); //キーを送る WScript.Sleep(1000); //5秒待って WShell.Sendkeys("pass{ENTER}"); //キーを送る WScript.Sleep(1000); //5秒待って WShell.Sendkeys("make{ENTER}"); //キーを送る WScript.Sleep(1000); //5秒待って WShell.Sendkeys("exit{ENTER}"); //キーを送る

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

socket (もしくは、WinSock) と言われて、分かりますか? 分からないようであれば、かなり難しいですね。 もし、分かっても、telnet ポートを使って制御するのは、結構難しいです。画面の制御コードの 処理とかが入るので(login: を待つくらいなら、そんなに難しくない)。 VB が分かる程度であれば、Windows の種類を選ぶかもしれませんが、rsh というコマンドを 実行するようなイメージにする方が良いのでは?

noname#27709
質問者

お礼

ご回答ありがとうございます。 一応、socketはわかりますが、やりたいことは、指定ウィンドウ(ここではtelnetコマンドのウィンドウ)への文字の入出力なので、socketを意識する必要は内容に思うのですがいかがでしょうか?でも、受け取るにはsocketレベルor telnetプロトコルレベルの制御が必要なのでしょうか? イメージとしては、まさにrshコマンドもどきを作りたいのです。 (実際は、telnetコマンドのオートパイロットですが。) よろしくお願い致します。

関連するQ&A

  • 管理者ログインでコマンドプロンプト(VISTA)にてtelnet行うも

    管理者ログインでコマンドプロンプト(VISTA)にてtelnet行うも、loginの入力はできるがpasswordはkey入力コピペ右クリすべてダメでした。 コンパネからWindowsの機能でTelnetクライアント済みです

  • telnetコマンドを入れても、パスワードを聞いてこない

    判る方おりましたら教えて下さい。 最近Compaqの端末を会社で数台購入し、会社のネットワーク上に設定しました。OSはWinXPです。 telnetを使用しWebサーバにログインしようと思います。 コマンドプロンプトでtelnetと入力するとlogin画面が出ますが、ログイン名を入力し、EnterしてもPasswordを聞いてきません。 他の新規端末もおなじです。 既存の端末のWinXPでは正常に動作します。 設定、又は環境等に問題があるのでしょうか?切り分け等で原因がわかるのであれば、その作業方法を教えてください。 以上よろしくお願いいたします。 

  • Rubyを使ってtelnetで実行したコマンドの標準出力を取得したいのですが…

    Rubyを使って、以下のような手順のプログラムを作成しています。 1.Telnetでサーバ(Fedora7)にログイン 2.ifconfigを実行 3.標準出力される結果をファイルに記録 次のように試してみたのですが、結果をファイルに記録することが、できないでいます。 require 'net/telnet' log = File.open("ifconfig.log",'a+') # リモートホスト foobar に接続 telnet = Net::Telnet.new("Host" => "192.168.1.1") {|c| print c} telnet.login("username", "password") {|c| print c} telnet.cmd("ifconfig"){|c| log.print(c)} log.close 標準出力される結果をファイルに記録する方法を知っているかたがおられましたら、教えていただけませんでしょうか。 宜しくお願いいたします。

  • Windows バージョン(種類)の取得方法は?

    WSH、またはVBScriptでの、Windowsの種類を取得したいのですが、御存知の方、教えてください。 よろしくお願いします。 WSH: Windows scripting Host

  • サーバー自動ログインソフトを作りたい

    バッチもしくはVBスクリプトでサーバーに自動ログインする ソフトを作ろうとしているのですが、うまくいきません。 具体的な環境は以下のとおりです。 サーバー    IP:10.10.2.1   ログイン名:login   パスワード:pass 現在、コマンドプロンプトから手動で  C:\>telnet 10.10.2.1 でログインし、ログイン名とパスワードを聞いてくるので、手動で ログイン名:login パスワード:pass と入力しているのですが、この作業を自動化したいです。 バッチファイルでtelnetコマンドを実行し、その後VBスクリプトを起動し、ログイン名とパスワードを送ろうと思ったのですが、 telnetコマンドはサーバーと接続しただけでは次のコマンドに命令権を渡さないようで、VBスクリプトが起動しないです。 バッチとVBスクリプト以外でもいいので、上記の一連の作業を自動化する方法がわかるという方、ご教授願います。

  • teratermマクロを使ったログイン

    teratermの初心者です。 今、teratermのマクロで”telnetを使ってwindowsマシンにログインする” という基本的な所を作ろうとしているのですが、 teratermインストールディレクトリ内の「login.ttl」を参考に記述し、 コマンドプロンプトから起動をかけると"connect 'ホスト名'"の行で 必ず止まってしまいます。 下記の記述で何処を修正すべきか、ご指摘頂けますと幸いです。 ===================================== testlink if result=0 connect'host' connect 'ホスト名' UsernamePrompt = 'login:' Username = 'ユーザー名\ドメイン' PasswordPrompt = 'Password:' Password = 'パスワード' wait UsernamePrompt sendln Username wait PasswordPrompt sendln Password ===================================== どうぞ宜しくお願い致します。

  • telnet接続

    ある装置にtelnet接続し、コマンド(ccc dd ee)を送信して帰ってきた値を outou.dat というファイルに保存するプログラムを作っています。 接続すると login: と表示されるので「aaaa」と入力すると Welcome to aaaa > と表示され、「bbbb」と入力するとプロンプトが「#」に変わります。 >bbbb # そこでコマンド「ccc dd ee」を入力したときに帰ってくる応答をファイルに保存します。 #ccc dd ee ------応答データ-------- これを行うのに下記プログラムを実行しましたが、エラーは出ませんがファイルに何も 保存されませんでした。 何がいけないのかわかる方教えてください。 use strict; use Net::Telnet; my $host = '192.168.1.1'; my $login = 'aaaa'; my $enable = 'bbbb'; my $prompt1 = '/>/'; my $prompt2 = '/\S/'; my $telnet = new Net::Telnet( Timeout => 10, ); $telnet->open($host); $telnet->waitfor('/login:/i'); $telnet->print($login); $telnet->waitfor($prompt1); $telnet->print($enable); $telnet->waitfor($prompt2); my @result; $telnet->print("ccc dd ee"); ($result) = $telnet->waitfor($prompt2); open(OUT, "> outou.dat"); print(OUT "@result\n"); close(OUT); $telnet->close;

  • telnetをすると"Remote Management Console"が表示されログイン出来ない

    コマンドプロンプトからtelnet接続を実施するとたまにログイン画面に"Remote Management Console"というメッセージが画面上部に表示されます。上記メッセージと共に"login:"メッセージも表示されるのですが、通常はログインができているユーザID/パスワードを入れてもエラーメッセージ"### Login Faild"が表示されログインできません。 通常はログイン画面として"SunOS5.8"というメッセージと共に"login:"が表示されるのですが、なぜこのような"Remote Management Console"が表示され、ログインできなくなる現象が起こるのでしょうか。 ちなみに端末をreboot後にtelnet接続をすると通常のログイン画面が表示されたりします。ただ、時間が立つとまた上記の"Remoto~"になってしまいます。 pingは通ります。 何か参考となる情報等ありましたらご教授いただけますでしょうか。 よろしくお願いします。

  • expectの使い方について

    expectの使い方についてご教示頂きたいことがあります。 内容は以下の通りです。 1)スイッチ機器にtelnetし、自動的に設定を行うようにしたい。 この機器の通常のプロンプトは"goo#"とする "goo"はあらかじめ変数"host"として代入される。 telnet後、この装置のプロンプトが本当に goo#だったら"save"コマンドを実行する。 expect "${host}#" send "save\n" ここまではわかるのですが、ではgoo# 以外のプロンプトだったら即座に処理を中断 (別の処理)したいのです。 2)ログイン中に別ファイルを呼び出し、その中から1行ずつ抜き出して改行コードつきでコマンドを実行したい場合どうすればいいのか http://www.linux.or.jp/JM/html/expect/man1/expect.1.html このページは読んだのですが、いまいちよく理解できません。 よろしくお願いいたします。

  • sshやtelnetでログイン後、シェル(bash, csh)プロンプトからコマンド実行する方法は?

    下記掲示板(CGI)の設置で至急、「sshもしくはtelnet」の情報が必要になりました。(メールによる掲示板への投稿機能で必要) http://www.megumi-island.net/cgi.html#bbs sshやtelnetでログイン後、シェル(bash, csh)プロンプトからコマンド実行する一番簡単な方法を教えてください。なお、当方OSはWindowsXP環境です。 シェルから下記コマンドを実行したいのです。 $ ./mi_mlpost.pl (と入力し、Enterキーを押す) これでとりあえず第一難関クリアです。 付属のmi_mlpost.txtによれば、まだcronの設定があるようですが・・・

専門家に質問してみよう