!['socat' 不显示传入的 UDP 数据包,但 Wireshark 可以显示](https://linux22.com/image/767660/'socat'%20%E4%B8%8D%E6%98%BE%E7%A4%BA%E4%BC%A0%E5%85%A5%E7%9A%84%20UDP%20%E6%95%B0%E6%8D%AE%E5%8C%85%EF%BC%8C%E4%BD%86%20Wireshark%20%E5%8F%AF%E4%BB%A5%E6%98%BE%E7%A4%BA.png)
该链接是Wireshark 转储包含 UDP 数据包的传入 60 字节以太网帧。数据包有效负载是单个单词“hello”(抱歉,我没有足够的代表直接粘贴图像)。
问题:我无法获取socat
、nc
读取和显示该数据包(这并不完全正确;请参阅下面的#1)。
我按如下方式运行阅读器:
$ socat UDP:192.168.50.129:5000 -
我尝试过各种不同的 UDP 相关地址格式以及这个格式。编写器运行如下:
$ socat READLINE UDP:192.168.50.132:5000
问题:我如何显示这个传入的数据包,最好以单个单词的形式显示hello
?
不幸的是,存在一些复杂情况:
#1
如果我运行阅读器,那么# socat INTERFACE:ens4f0 -
我做获取传入帧的显示(出于某种原因,它显示了两次)。有一些二进制输出,然后是单词hello
。但是,我无法做到这一点,因为最终会有其他进程使用此接口,所以我需要了解发生了什么
#2
传入帧实际上具有一个目标 IP 地址192.168.50.132
;防火墙设置为将其转换为192.168.50.129
,这是读取器正在监听的地址:
# iptables -t nat -A PREROUTING -i ens4f0 -j DNAT --to 192.168.50.129
Wireshark 输出显示转换前的传入数据包,因此将目标 IP 地址显示为192.168.50.132
。我真的不知道这是否有效 - 我能否socat
生成实际看到的十六进制转储ens4f0
?
#3
这是比较难的一个,但我希望它没有关系。这实际上是一个环回测试:单个帧从 发出ens4f0
,由外部硬件环回,并原封不动地返回到ens4f0
。NIC 的 IP 地址为192.168.50.129
。我有一个ip neigh add
命令,它将对 的访问从192.168.50.132
路由ens4f0
到外部硬件;数据包原封不动地返回,这就是为什么我需要命令iptables
将目标 IP 地址转换回ens4f0
地址。