Python第2层以太网帧 - >接收数据

问题描述 投票:1回答:1

我正在创建一些第2层帧,用于使用Python 3进行自动化总线仿真。实际上,数据将毫无问题地发送。通信伙伴将数据返回给我的python脚本。我以root身份启动脚本,接收完成。重新启动脚本后,我无法再次接收数据。我必须再次开始......现在我正在寻找原因。

实际情况:

  • VirtualBox与Ubuntu 18 - > 4.18.0-17-通用
  • USB 2网络接口直接连接到虚拟机(适配器为:enx0050b611bbf0)。

蟒蛇:

s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(3))
s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('enx0050b611bbf0', 3))
s.send(packet)
response = s.recv(1024)
print('Recv: %s' % bytes_to_hex_str(response))
print('Recv length: %i' % len(response))
s.close()

数据包:它是一个字节数组:

0xff 0xff 0xff 0xff 0xff 0xff 0xde 0xad 0xbe 0xef 0x12 0x34 0x88 0xcd 0x20 0x00 0xa9 0xd7 0xdb 0x8f 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

问题:它只能工作一次。第二次启动脚本后,s.recv()阻止了脚本。我必须手动停止并重新启动它。然后它正在工作一次......

有人能够解释我的问题吗?

python python-3.x sockets ethernet raw-ethernet
1个回答
0
投票

我把所有东西放在多线程环境中。一个用于发送,一个用于接收。现在它正在运作。原因是循环发送以太网帧存在问题。谢谢您的帮助...

© www.soinside.com 2019 - 2024. All rights reserved.