- 主题:python接收不到udp的广播包, 什么原因?
有个自制设备, 通过直连以太网向电脑的一块专用网卡上传数据. 上传的以太网目标地址和IP目标地址都是广播地址, 分别是FF-FF-FF-FF-FF-FF和255.255.255.255
用python做了个简单的udp server在端口1234接收这些数据
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind(('', 1234))
while True:
data, addr = sock.recvfrom(65536)
....
发现个奇怪的问题, 打开后没有数据包上来, 但是, 只要打开wireshark, 选择对应网卡, 开始接收数据包, python那头就会有数据源源不断的上来, 感觉是wireshark在启动时打通了网卡的什么设置, 才让python那头能够接收到广播, 请问是什么原因, python有什么办法能够自己就接到这些广播?
THX
--
FROM 121.37.50.*
默认的 python socket 没有开接收广播消息。你得用 setsockopt() 设置一下,代码如下:
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
【 在 Machael (Keep Looking For) 的大作中提到: 】
: 有个自制设备, 通过直连以太网向电脑的一块专用网卡上传数据. 上传的以太网目标地址和IP目标地址都是广播地址, 分别是FF-FF-FF-FF-FF-FF和255.255.255.255
: 用python做了个简单的udp server在端口1234接收这些数据
: sock = socket.socket(socket.AF_INET, # Internet
: ...................
--
FROM 125.78.66.*
谢谢大牛, 感觉方向正确, 但试了一下还是不行, 是不是还有别的设置没开启?
【 在 hgoldfish 的大作中提到: 】
: 默认的 python socket 没有开接收广播消息。你得用 setsockopt() 设置一下,代码如下:
: s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
:
--
FROM 121.37.50.*
会不会是以太网mac层也有个类似的开接收广播的需要设置?
【 在 hgoldfish 的大作中提到: 】
: 默认的 python socket 没有开接收广播消息。你得用 setsockopt() 设置一下,代码如下:
: s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
:
--
FROM 121.37.50.*
网卡设成promisc模式?ip l set eth0 promisc on
【 在 Machael 的大作中提到: 】
: 有个自制设备, 通过直连以太网向电脑的一块专用网卡上传数据. 上传的以太网目标地址和IP目标地址都是广播地址, 分别是FF-FF-FF-FF-FF-FF和255.255.255.255
: 用python做了个简单的udp server在端口1234接收这些数据
: sock = socket.socket(socket.AF_INET, # Internet
: ...................
--
FROM 125.34.223.*
是不是防火墙没开?如果不是就不懂了。按说广播地址是正常接收的,不需要用到混杂模式。
【 在 Machael (Keep Looking For) 的大作中提到: 】
: 会不会是以太网mac层也有个类似的开接收广播的需要设置?
--
FROM 125.78.66.*
网卡只接收符合自己ip的广播地址的udp包, 比如你的网址是192.168.0.1/24
那么广播地址是192.168.0.255
如果接收其他包,要用RAW,且网卡开杂凑模式
搜到另一种方案
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
【 在 Machael (Keep Looking For) 的大作中提到: 】
: 有个自制设备, 通过直连以太网向电脑的一块专用网卡上传数据. 上传的以太网目标地
: 址和IP目标地址都是广播地址, 分别是FF-FF-FF-FF-FF-FF和255.255.255.255
: 用python做了个简单的udp server在端口1234接收这些数据
: sock = socket.socket(socket.AF_INET, # Internet
: ...................
--
修改:iwannabe FROM 120.229.14.*
FROM 120.229.14.*
网卡默认禁止收广播了吧,试试组播地址
【 在 Machael 的大作中提到: 】
: 有个自制设备, 通过直连以太网向电脑的一块专用网卡上传数据. 上传的以太网目标地址和IP目标地址都是广播地址, 分别是FF-FF-FF-FF-FF-FF和255.255.255.255
: 用python做了个简单的udp server在端口1234接收这些数据
: sock = socket.socket(socket.AF_INET, # Internet
: ....................
- 来自「最水木 for iPhone 7 Plus」
--
FROM 114.249.199.*
什么系统下的?看看是不是权限
--
FROM 125.119.83.*