套接字程序无法从python中的ECU接收以太网数据包

时间:2015-04-29 12:00:50

标签: python linux multicast multicastsocket recvfrom

我正在尝试构建一个套接字以从ecu中检索以太网数据包。当我在Windows上运行我的代码时没有问题,代码运行正常。但是当我在Linux上运行我的代码时,它会陷入s.recv(65565)。 我已经在/ etc / network / interfaces中设置了静态ip,如下所示: iface eth0 inet static 地址160.48.199.91 网络掩码255.255.255.0 网关160.48.199.254

我在raspberry pi上尝试了一个简单的套接字代码。但它仍然停留在s.recv(65565)。代码如下:

import socket
import sys

HOST = "160.48.199.91"
port = 30490

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s.bind((HOST, 30490))

while True:

data = s.recvfrom(65565)

print(data)

有谁可以帮我解决这个问题。

另外,我一直在尝试接收“IP数据包”。来自ECU。在Windows中,我创建一个协议类型为socket.IPPROTO_IP的套接字,但这在raspberry pi中无效。在Raspberry pi(linux)中怎么可能?

编辑:我尝试使用多播实现相同的程序。但问题是,当我为icmp协议创建一个套接字时,我可以在使用命令" ping -I echo 239.192.255.251"之后看到来自ECU的数据。在另一个终端。 (其中239.192.255.251是多播地址) 但是当我将套接字协议类型更改为udp,tcp或raw时,它再次陷入s.recv()。我在以下链接中尝试了解决方案,但它没有帮助。 stackoverflow.com/questions/15278053/... unix.stackexchange.com/questions/122255 / ... 有人可以帮我解决这个问题吗?

0 个答案:

没有答案