独自のプロトコル用のクライアントを開発する必要があり、カスタム メッセージを送信して応答を確認することで既存のサーバーの動作を理解できれば非常に便利です。プロトコルがバイナリであることを除けば、「Telnet」はその目的に最適です。
そのため、現在、必要なメッセージを(16進エディタを使用して)ファイルに書き込みmymsg
、次のようにnetcatを使用して送信しようとしています。
cat msg | netcat 127.0.0.1 1234
問題は、netcat が EOF に到達した後に停止してしまうため、サーバーの応答がまったく表示されないことです。何か提案はありますか?
(もちろん、を使用して独自のサーバーのモックアップを実行することもできますnc -l -p 1234
)
答え1
私は少し困惑しています。なぜなら、netcat にはまさにこのケースを処理するための明示的な機能があると思っていたからです。標準入力とソケットの両方から EOF を取得するまで待機するものだと思っていました。おそらくこれは単なるタイムアウトの問題です。netcat のドキュメントをチェックして、stdin で EOF を取得した後、一定時間ソケットから読み取りを続けるオプションがあるかどうかを確認してください。
あるいは、その場しのぎの答えを使うこともできます:
(cat msg; sleep 42) | netcat 127.0.0.1 1234
答え2
この仕事をするために、私はこの Python スクリプトを思いつきました。
#!/usr/bin/env python
import socket
import sys
if (len(sys.argv) != 3):
print "usage: " + sys.argv[0] + " host port <message >answer"
print ""
print "if you want to create a fake server side: nc -l -p port"
else:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], int(sys.argv[2])))
msg = sys.stdin.read()
s.send(msg)
answer = s.recv(1024)
print answer