我必须为专有协议开发一个客户端,通过向现有服务器发送自定义消息并查看答案,能够了解现有服务器的行为将非常有用。“Telnet”非常适合此目的,只是协议是二进制的。
因此目前,我已经将我想要的消息(使用十六进制编辑器)写入一个文件中mymsg
,并尝试通过以下方式使用 netcat 发送它:
cat msg | netcat 127.0.0.1 1234
我的问题是 netcat 在到达 EOF 后就停止了,所以我永远看不到服务器的答案。有什么建议吗?
(当然,也可以使用来运行专有服务器的模型nc -l -p 1234
)
答案1
我有点困惑,因为我认为 netcat 有一个明确的功能来处理这种情况。我认为它会等到从标准输入和套接字都收到 EOF 后才开始。也许这只是一个超时问题;查看您的 netcat 文档,看看是否有一个选项可以在从标准输入上收到 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