通过netcat发送十六进制字符串到远程主机

16

我有一些二进制指令(用十六进制表示)需要发送到一个远程设备(它是一个嵌入式数据采集设备),并观察回复。

使用netcat很容易连接到该设备

nc -v 192.168.200.34 19000

并且它高兴地坐在那里,就像一只蛤蜊。

我需要在终端中键入并发送的十六进制字符串是这样的:

02:45:31:38:03:34:43:0d:0a

其中02是STX,03是ETX等等。

但是当我将其输入到我的netcat窗口(带有或不带有空格,带有或不带有冒号)时,netcat会将其转换为ASCII码。

所有的文献都很高兴地告诉我如何从远程设备捕获十六进制转储,但不告诉我如何将二进制/十六进制数据传输到远程设备。

这是一件容易做到的事情,还是我错过了什么?

2个回答

31

通过以下命令可以实现:echo -n -e "\x02\x45\x31\x38\x03\x34\x43\x0d\x0a" | nc [-u] <-ip-addr-> <-port-no->

  • -n参数用于避免输出换行符。
  • -e参数可以解析反斜杠转义字符,使我们能够发送16进制代码。
  • 'x'在每个字符之前指定该字节采用十六进制表示。
  • -u参数可用于选择UDP流量(可选)。

2
欢迎来到Stack Overflow!虽然这段代码片段可能解决了问题,但包含解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,而这些人可能不知道您提出代码建议的原因。另外,请尽量不要在代码中添加过多的解释性注释,因为这会降低代码和解释的可读性! - Ram Koti
1
感谢您的输入,@RamKoti。我尽可能地添加了详细的解释。 - rahul1205
你也可以使用 printf,这可能会使循环中的事情更容易处理。https://dev59.com/DnLYa4cB1Zd3GeqPc-eO#16914660 - dragon788

3
你可以试试这个!
echo '024531380334430d0a' | xxd -r -p | nc 192.168.200.34 19000

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