如何在 TCP 中发送二进制消息并存储响应

如何在 TCP 中发送二进制消息并存储响应

我必须为专有协议开发一个客户端,通过向现有服务器发送自定义消息并查看答案,能够了解现有服务器的行为将非常有用。“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

相关内容