Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何防止从套接字接收的数据包中剥离VLAN标记?_Python_Sockets_Networking_Vlan - Fatal编程技术网

Python 如何防止从套接字接收的数据包中剥离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字段(

我正在编写一个简单的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层)信息。如果试图完整地捕获帧,则必须使用主干连接在接口之间架桥。