首页 > 解决方案 > Python 丢弃 WireShark 看到的 UDP 数据包

问题描述

我正在尝试将 UDP 数据包从裸机嵌入式设备发送到运行 python 的脚本。我在 WireShark 中看到了这个数据包,并确认一切都是正确的。但是,Python 脚本看不到数据包。

我已经通过从另一个 python 脚本发送 UDP 数据包来测试 python 代码。接收 python 脚本确实在此时接收它。

我在防火墙中看到了数据包。它说数据包被允许并发送到python。我在防火墙中创建了一条规则以允许来自该设备的流量。我也试过禁用防火墙。

下面是我侦听 UDP 数据包的 python 脚本

import socket

UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind(('', UDP_PORT))

while True:
  data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
  print "received message:", data
  print "received from:", addr

为什么 Python 会丢弃数据包?

Netstat 显示它收到的 UDP 数据包没有任何错误:

接收数据包前的netstat

netstat -s -n -p UDP

IPv4 的 UDP 统计信息

收到的数据报 = 5982014

无端口 = 79096

接收错误 = 829

发送的数据报 = 1641811

收到数据包后的netstat

netstat -s -n -p UDP

IPv4 的 UDP 统计信息

收到的数据报 = 5982130

无端口 = 79100

接收错误 = 829

发送的数据报 = 1641932

标签: pythonudpembeddedbare-metal

解决方案


推荐阅读