Python 如何防止从套接字接收的数据包中剥离VLAN标记?
我正在编写一个简单的python脚本来解析通过套接字接收的原始数据包的头。该脚本在一个VM上运行,另一个VM正在生成数据包并将其发送进来。(两个虚拟机都运行linux)。这是设置的一部分,在该设置中,在发送数据包之前,为数据包创建自定义头,脚本的全部目的是通过套接字接收完全没有瑕疵的数据包,并验证其内容 第一个报头是标准以太网报头,DMAC和SMAC各有6个字节,VLAN相关字段(TPID、PCP和ID)有4个字节,Ethertype有2个字节 我遇到的问题是,在我接收数据包之前,VLAN字段(四个字节)已从数据包中剥离(数据包的所有其余部分都存在)。我不太熟悉两个虚拟机之间网络路径上虚拟硬件的各种元素,尽管我怀疑剥离正在那里进行 以下是我用来打开套接字的方法:Python 如何防止从套接字接收的数据包中剥离VLAN标记?,python,sockets,networking,vlan,Python,Sockets,Networking,Vlan,我正在编写一个简单的python脚本来解析通过套接字接收的原始数据包的头。该脚本在一个VM上运行,另一个VM正在生成数据包并将其发送进来。(两个虚拟机都运行linux)。这是设置的一部分,在该设置中,在发送数据包之前,为数据包创建自定义头,脚本的全部目的是通过套接字接收完全没有瑕疵的数据包,并验证其内容 第一个报头是标准以太网报头,DMAC和SMAC各有6个字节,VLAN相关字段(TPID、PCP和ID)有4个字节,Ethertype有2个字节 我遇到的问题是,在我接收数据包之前,VLAN字段(
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字段被剥离?vSwitches和vNIC不使用标记。标记的目的是在导线上标记物理帧。虚拟帧不需要这些,vSwitch知道它们属于哪个端口组 即使在ESXi上使用所有VLAN设置镜像端口组(允许混杂模式,VID 4095),也不会标记任何帧
解决这个问题的一种方法是使用多个VNIC。或者,您可以尝试将物理NIC映射到VM(PCI直通或DirectPath)。vSwitches和vNIC不使用标记。标记的目的是在导线上标记物理帧。虚拟帧不需要这些,vSwitch知道它们属于哪个端口组 即使在ESXi上使用所有VLAN设置镜像端口组(允许混杂模式,VID 4095),也不会标记任何帧
解决这个问题的一种方法是使用多个VNIC。或者,您可以尝试将物理NIC映射到VM(PCI直通或DirectPath)。数据包是第2层帧的有效负载。它不包括任何以太网(第2层)信息。如果您试图完整地捕获帧,则必须使用中继连接在接口之间桥接。数据包是第2层帧的有效负载。它不包括任何以太网(第2层)信息。如果试图完整地捕获帧,则必须使用主干连接在接口之间架桥。