如何防止VLAN标签从套接字接收的数据包中剥离?

2024-09-30 16:22:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个简单的python脚本来解析通过socket接收的原始数据包的头。脚本在一个虚拟机上运行,另一个虚拟机正在生成数据包并将它们发送进来。(两个虚拟机都运行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字段被剥离?在


Tags: 目的脚本内容标准字节头文件linuxsocket
1条回答
网友
1楼 · 发布于 2024-09-30 16:22:40

vSwitch和vNIC不使用标记。标记的目的是在导线上标记物理帧。虚拟帧不需要这些,vSwitch知道它们属于哪个端口组。在

即使在使用所有VLAN(允许混杂模式,VID 4095)的ESXi上设置镜像端口组,也不会标记任何帧。在

解决这个问题的一种方法是使用多个vnic。或者,您可以尝试将物理网卡映射到虚拟机(PCI passthrough或DirectPath)。在

相关问题 更多 >