我正在编写一个简单的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字段被剥离?在
vSwitch和vNIC不使用标记。标记的目的是在导线上标记物理帧。虚拟帧不需要这些,vSwitch知道它们属于哪个端口组。在
即使在使用所有VLAN(允许混杂模式,VID 4095)的ESXi上设置镜像端口组,也不会标记任何帧。在
解决这个问题的一种方法是使用多个vnic。或者,您可以尝试将物理网卡映射到虚拟机(PCI passthrough或DirectPath)。在
相关问题 更多 >
编程相关推荐