繁体   English   中英

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

[英]Python layer 2 Ethernet frames --> Receiving data

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

实际情况:

  • 带有Ubuntu 18的VirtualBox-> 4.18.0-17-generic
  • 直接连接到虚拟机的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()将阻止脚本。 我必须手动停止它并重新启动它。 然后它一次工作了……

有人可以向我解释问题吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM