Python丢弃WireShark看到的UDP数据包

Python丢弃WireShark看到的UDP数据包,python,udp,embedded,bare-metal,Python,Udp,Embedded,Bare Metal,我正试图将一个UDP数据包从一个裸金属嵌入式设备发送到一个运行python的脚本。 我在WireShark中看到了数据包,并确认一切都是正确的。 但是,Python脚本没有看到数据包 我通过从另一个python脚本发送UDP数据包来测试python代码。接收python脚本确实会在此时接收它 我在防火墙里看到了这个包。它说数据包是被允许的,并被发送到python。我在防火墙中创建了一个规则,允许来自此设备的流量。我还尝试禁用防火墙 下面是我侦听UDP数据包的python脚本 import soc

我正试图将一个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-pdp

IPv4的UDP统计信息

收到的数据报=5982014

无端口=79096

接收错误=829

发送的数据报=1641811

Netstat在收到数据包后

netstat-s-n-pdp

IPv4的UDP统计信息

收到的数据报=5982130

无端口=79100

接收错误=829

发送的数据报=1641932


“WireShark看到的数据包证实了操作系统知道端口是打开的,有东西在监听。”-不,没有。无论端口是否打开,或者本地防火墙是否阻止数据包,捕获数据包都有效。它只显示网卡接收到的数据包,而不是实际转发到应用程序的数据包。但是,如果脚本能够从其他系统接收数据,那么UDP数据包更有可能是格式错误的,并且被内核丢弃。但它仍将在wireshark中可见。你是对的。我想我通过关闭python脚本并发送它来测试这一点。此时我没有在wireshark中看到数据包。但我只是再次测试了一下,结果似乎不是这样。@SteffenUllrich。WireShark中的数据包似乎没有格式错误。@SteffenUllrich我在防火墙中看到了流量。这不意味着内核没有丢弃它吗?“我看到了防火墙中的流量”-我不知道你这是什么意思。但是-如果您的脚本能够从另一台机器接收到预期的数据包,但却无法从嵌入式设备接收到数据包,那么问题很可能不是由您的程序(接收方)引起的,而是由发送方(嵌入式系统)引起的。这意味着您只提供有关设置中可能不存在问题的部分的信息,而不提供关于另一个很可能存在问题的部分的信息。“WireShark see的数据包确认操作系统知道端口已打开,并且有人正在监听它。”-不,它没有。无论端口是否打开,或者本地防火墙是否阻止数据包,捕获数据包都有效。它只显示网卡接收到的数据包,而不是实际转发到应用程序的数据包。但是,如果脚本能够从其他系统接收数据,那么UDP数据包更有可能是格式错误的,并且被内核丢弃。但它仍将在wireshark中可见。你是对的。我想我通过关闭python脚本并发送它来测试这一点。此时我没有在wireshark中看到数据包。但我只是再次测试了一下,结果似乎不是这样。@SteffenUllrich。WireShark中的数据包似乎没有格式错误。@SteffenUllrich我在防火墙中看到了流量。这不意味着内核没有丢弃它吗?“我看到了防火墙中的流量”-我不知道你这是什么意思。但是-如果您的脚本能够从另一台机器接收到预期的数据包,但却无法从嵌入式设备接收到数据包,那么问题很可能不是由您的程序(接收方)引起的,而是由发送方(嵌入式系统)引起的。这意味着您只提供有关设置中可能不是问题的部分的信息,而不提供有关其他可能是问题的部分的信息。