自動でtelnet接続して、相手先に文字を送って
相手から返ってきた文字を読みとりたいのですが、
そのようなことは可能なのでしょうか?
可能か,といわれれば可能です。
実際にどのようにするのか,といわれたら,
ソケットオプションの話が絡むので結構面倒なことになると思います。
また,相手の居る話ですからRFCを熟読する必要があります。
telnetに拘らなければ,WinSockコントロールを使って
TCPで普通に送受信すればできると思います。
結構面倒なことになるのですか…。
PCにIPアドレスをもった端末をLANケーブルで接続して、
telnet接続し、PCよりコマンドを送信してやり、
その結果を端末から受信する。
テラタームなどでのマニュアル操作では簡単に出来るので
VBでも簡単に出来てしまうと思っていたのですが。
『ソケットオプション』も初耳なのです。
アプリケーションを利用すれば簡単なのは当たり前です。
簡単になるようにしているのですから。
それをプログラムでやるとなれば,
アプリケーションが行っていたことを自前で書かないといけません。
telnetの場合,キー入力を即座に送るため,TCP_NODELAYソケットオプションをONにして送信します。
それをsimulateせずに送信した場合に,すべてのtelnetサーバーが受け付けてくれるとは限りません。
#まぁ,普通は受け付けるでしょうけど。
基本的にはRFCを読んで,WinSockコントロールでできるかを考えて,
できるならWinSockコントロールで,できないならAPIを使うことになります。
応答ファイルを作って,Windows 2000以降付属のコマンドラインtelnetをリダイレクト使って叩く,
という方法もありますけどね……。
#WinSockなんて知ったことか,ということができます。
やっぱり分からないので教えてください。
『TCP_NODELAYソケットオプションをON』にするとあるのですが
どの部分のことですか?
テラタームで行うと下記”LANアナライザOKデータ”となりOKなのですが
Winsockでローカルポート、リモートポートを『23』
としてソフトを実行すると、
①〜④までは同じ表示なのですが、それ以降の表示が下記
”LANアナライザNGデータ”となるのです。
設定されていないような感じなのです。
”LANアナライザOKデータ(抜粋)”
①t1090 -> telnet Flags=....S. Seq=0003199165 <mss 1460,nop,nop,>
②telnet -> t1090 Flags=.A..S. Seq=1221640705 Ack=0003199166 <mss 1460>
③t1090 -> telnet Flags=.A.... Ack=1221640706
④telnet -> t1090 Flags=.AP... Seq=1221640706 Ack=0003199166 TELNET IAC WILL SUPPRESS GO AHEAD
⑤t1090 -> telnet Flags=.AP... Seq=0003199166 Ack=1221640721 TELNET IAC WILL TERMINAL TYPE
⑥telnet -> t1090 Flags=.AP... Seq=1221640721 Ack=0003199181 TELNET IAC SB TERMINAL TYPE <03>
⑦t1090 -> telnet Flags=.AP... Seq=0003199181 Ack=1221640731 TELNET IAC WONT ECHO <18><FF><F0>
⑧telnet -> t1090 Flags=.AP... Seq=1221640731 Ack=0003199193 TELNET IAC DONT ECHO
⑨t1090 -> telnet Flags=.AP... Seq=0003199193 Ack=1221640734 TELNET IAC SB TERMINAL TYPE 100<FF><F0>
⑩telnet -> t1090 Flags=.A.... Ack=0003199204
⑪t1090 -> telnet Flags=.AP... Seq=0003199204 Ack=1221640734 TELNET <0D><00>
⑫telnet -> t1090 Flags=.AP... Seq=1221640734 Ack=0003199206 TELNET <0D><0A>
⑬t1090 -> telnet Flags=.A.... Ack=1221640736
”LANアナライザNGデータ(抜粋)”
①t1096 -> telnet Flags=....S. Seq=0005842163 <mss 1460,nop,nop,>
②telnet -> t1096 Flags=.A..S. Seq=1503176705 Ack=0005842164 <mss 1460>
③t1096 -> telnet Flags=.A.... Ack=1503176706
④telnet -> t1096 Flags=.AP... Seq=1503176706 Ack=0005842164 TELNET IAC WILL SUPPRESS GO AHEAD
⑤t1096 -> telnet Flags=.A.... Ack=1503176721
⑥t1096 -> telnet Flags=.A...F Seq=0005842164 Ack=1503176721
⑦telnet -> t1096 Flags=.A.... Ack=0005842165
⑧telnet -> t1096 Flags=.A...F Seq=1503176721 Ack=0005842165
⑨t1096 -> telnet Flags=.A.... Ack=1503176722
何か設定がたりないのでしょうか?
ツイート | ![]() |