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_Packet Sniffers_Vlan_Raw Ethernet - Fatal编程技术网

在Python中读取原始以太网数据包的VLAN字段

在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.

我使用以太网数据包在两个节点之间进行低级通信(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.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脚本无法读取?我不明白…一个原始的插座可能不够用。很可能,您需要直接从驱动程序捕获数据包。