Linux工具发送原始数据到TCP服务器

49

我知道这不是一个直接关于“开发”的问题,但我需要这些信息来测试一个开发项目,因此我认为其他人可能也遇到了类似的问题。

我将测试一个运行TCP服务器的软件,并根据发送的命令回复一些答案。我将测试这个软件,如果它不能正常工作我就不想编写代码。所以我想发送这些命令并测试服务器软件。

如何在Linux系统上实现这一点?

3个回答

69

使用bash和dd命令:

dd if=/dev/zero bs=9000 count=1000 > /dev/tcp/$target_host/$port

甚至可以使用cat命令:

cat < /dev/urandom > /dev/tcp/$target_host/$port

14
/dev/tcp/*/*是bash以特殊方式处理的一个特殊文件名,它实际上并不存在。请注意,我已经尽力保持原意并使翻译更加易懂。 - Flimm
(echo '2' > /dev/tcp/192.168.1.161/8888)&&(sleep 1; echo '2' > /dev/tcp/192.168.1.163/8888)为什么使用多个请求需要5分钟以上,但只使用一个请求时不到1秒就完成了? - user285594
虽然nc可能是最好的工具,但这应该是被接受的答案。 - Arj
2
只是一点小提示:使用这种方法,服务器的响应不会被显示出来。如果你想在屏幕上看到响应,netcat 更适合。 - Boris Däppen

52

NetcatTelnet,我过去都用来测试简单的基于文本的协议,但Netcat更加灵活。


@YannRamin 怎样使用 socat 发送 TCP 消息?我之前可以使用 socat 发送 UDP 消息,但是 socat 没有 tcp-datagram。这是用于 UDP 的命令:echo "some-test-sample" | socat - UDP-DATAGRAM:localhost:43278,broadcast - Katie

0

听起来 Expect 可能是你想要的。它有多种脚本语言的实现,你可以编写脚本以及断言请求/服务器响应和适当的超时、错误处理等。


4
请举例说明,很难找到一个能够正确理解多个TCP连接期望的人。当我进行单个连接时,它可以正常工作,但是当它涉及到多个连接时,它需要比正常持续时间更长。请展示一些示例,如何使用expect来处理这个问题? (echo '2' > /dev/tcp/192.168.1.161/8888) && (sleep 1; echo '2' > /dev/tcp/192.168.1.163/8888) - user285594
7
当最高投票和被接受的答案建议使用Telnet来“测试简单文本协议”时,我很惊讶这个答案会被踩。 - Brian Agnew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接