我正在编写一个简单的 python 脚本来解析通过套接字接收的原始数据包的标头。该脚本在一个 VM 上运行,另一个 VM 正在生成数据包并将它们发送进来。(两个 VM 都运行 linux)。这是设置的一部分,其中在发送数据包之前为数据包制作自定义标头,脚本的整个目的是通过套接字接收完全无瑕疵的数据包,并验证其内容。
第一个标头是标准以太网标头,DMAC 和 SMAC 各有 6 个字节,VLAN 相关字段(TPID、PCP 和 ID)有 4 个字节,Ethertype 有两个字节。
我遇到的问题是 VLAN 字段(四个字节)在我收到数据包之前被从数据包中剥离(所有其余数据包都存在)。我对两个 VM 之间的网络路径上的虚拟硬件的各种元素不是很熟悉,尽管我怀疑剥离正在那里进行。
这是我用来打开套接字的方法:
def openSocketToInterface(nicInterface):
ETH_P_ALL = 3 # To receive all Ethernet protocols
socketToInterface = socket.socket(socket.AF_PACKET, socket.SOCK_RAW,
socket.htons(ETH_P_ALL))
socketToInterface.bind((nicInterface, 0))
subprocess.check_call('ifconfig %s promisc' % (nicInterface),
shell=True)
return socketToInterface
有没有办法可以防止 VLAN 字段被剥离?