在Python中读取原始以太网数据包的VLAN字段
我使用以太网数据包在两个节点之间进行低级通信(2层,没有UDP/IP或TCP/IP)。这些包里面有VLAN字段,我的接口配置为混杂模式,它能够完全读取它们,因为我可以在我的Ubuntu系统的Wireshark中看到VLAN标记 使用python,我能够读取除VLAN字段之外的整个数据包。该字段消失,在源MAC字段之后,Ethertype就位在Python中读取原始以太网数据包的VLAN字段,python,sockets,packet-sniffers,vlan,raw-ethernet,Python,Sockets,Packet Sniffers,Vlan,Raw Ethernet,我使用以太网数据包在两个节点之间进行低级通信(2层,没有UDP/IP或TCP/IP)。这些包里面有VLAN字段,我的接口配置为混杂模式,它能够完全读取它们,因为我可以在我的Ubuntu系统的Wireshark中看到VLAN标记 使用python,我能够读取除VLAN字段之外的整个数据包。该字段消失,在源MAC字段之后,Ethertype就位 import socket sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.
import socket
sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003))
msg = sock.recvmsg(4096)
是否可以使用socket python模块执行此操作?我的配置中是否缺少某些内容,或者是NIC问题
提前感谢,需要对NIC驱动程序进行配置,使802.1Q标签保持在原位。并非所有NIC都能做到这一点,我不相信有一个标准的方法可以做到这一点。晚会迟到,请参阅以了解详细信息 我建议使用(
conf.L2socket
或sniff
)实现此代码。否则,请使用下面的代码段:
导入ctypes、socket
#从bit/socket.h开始
SOL_数据包=263
#来自asm/socket.h
因此,附加过滤器=26
ETH_P_8021Q=0x8100
数据包扩展数据=8
TP_STATUS_VLAN_VALID=1那么,为什么Wireshark可以读取数据包而我的python脚本无法读取?我不明白…一个原始的插座可能不够用。很可能,您需要直接从驱动程序捕获数据包。