捕获传入 UDP 数据包失败

捕获传入 UDP 数据包失败

我的环境:

Mac OS X 10.8.5 (IP: 192.168.10.5)
CentOS 6.5 (IP: 192.168.10.8)

我正在尝试在 OS X 上捕获 UDP 传入数据包。

我在 OS X 的终端上试过

# tcpdump -In udp portrange 6000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type IEEE802_11_RADIO (802.11 plus radiotap header), capture size 65535 bytes

然后,在 CentOS 6.5 上

$ echo "test" | nc -w 1 -u 192.168.10.5 6000
nc: Write error: Connection refused

连接被拒绝。

但是,当我运行由 Unity (5.1.3f) 制作的程序(UDP 回显服务器)在 OS X 上接收 UDP 数据包时,连接并没有被拒绝。

$ echo "test" | nc -w 1 -u 192.168.10.5 6000
test

我应该检查 OS X 的哪部分配置?

答案1

您的无线驱动程序可能不会在 802.11 监控模式下解密数据包,因此 tcpdump 可能无法判断它们是 UDP 数据包。

重新进行测试但不传递-Itcpdump。这将允许 tcpdump 将接口视为以太网,而不是将其置于 802.11 监控模式。

请注意,即使 tcpdump 会捕获数据包,但如果它收到没有打开侦听器套接字的端口的 UDP 数据报,它也不会阻止 IP 堆栈发回 ICMP“目标不可达:端口不可达”消息。因此,如果nc您没有运行 Unity 之类的程序来接收这些数据包,发送机器仍会显示“连接被拒绝”。

答案2

我没有写“我的环境”的一部分,这对于这个问题可能很重要。

我正在使用 VMware。

我的环境:

Mac OS X 10.8.5
CentOS 6.5 on VMWare Fusion 6.0.4 on Mac OS X 10.8.5

No firewall setting on MacOS X 10.8.5

Mac OS X(Host OS) network
- en0 : 192.168.10.4
- vmnet1 : 172.16.99.1
- vmnet8 : 172.16.173.1

CentOS(Guest OS) network (connected with "Bridge" setting)
- eth0 : 192.168.10.8
- lo : 127.0.0.1

1)通过 Mac OS X 上的 en0 从 CentOS 到 Mac OS X。

  • Mac OS X 上的 tcpdump 不显示传入的 UDP 数据包(CentOS 6.5 上显示“连接被拒绝”)
  • Unity 应用程序(UDP 接收器)显示传入的 UDP 数据包(CentOS 6.5 上没有错误消息)

在 CentOS 上

# echo "test" | nc -w 1 -u 192.168.10.4 6000
nc: Write error: Connection refused

在 Mac OS X 上

# tcpdump -n udp portrange 6000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes

2)通过Mac OS X上的vmnet8从CentOS到Mac OS X。

  • Mac OS X 上的 tcpdump 显示传入的 UDP 数据包,如下所示。

在 CentOS 上

$ echo "test" | nc -w 1 -u 172.16.173.1 6000

在 Mac OS X 上

# tcpdump -n udp portrange 6000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
07:28:39.958576 IP 192.168.10.8.59866 > 172.16.173.1.6000: UDP, length 5

因此,至少如果我使用 vmnet8,我可以将 UDP 数据包从 CentOS 发送到 Mac OS X。使用 vmnet1 也没有问题。

相关内容