Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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-通过解包以太网帧获得0xc0a8(类型为0x800),不需要数据_Python_Networking_Ethernet_Packet_Packet Capture - Fatal编程技术网

Python-通过解包以太网帧获得0xc0a8(类型为0x800),不需要数据

Python-通过解包以太网帧获得0xc0a8(类型为0x800),不需要数据,python,networking,ethernet,packet,packet-capture,Python,Networking,Ethernet,Packet,Packet Capture,我有一个Python函数,用于解压以太网帧: 我希望IPV4得到0x800,IPV6得到0x86dd。 但在打开框架后,我得到了0xc0a8。 有人能解释为什么我会得到这些意想不到的数据吗?以及如何修复它以获得正确的数据?听起来您可能正在将IP报头作为以太网报头读取0x0800是以太网报头的最后两个字节--数据[12:13]。IP头前置地址的长度为12字节,接下来的两个字节(IP_头[12:13])是IP源地址的前两个字节0xc0a8是(192168)——在我看来,这就像内部IP地址的前两个字

我有一个Python函数,用于解压以太网帧:

我希望IPV4得到0x800,IPV6得到0x86dd。 但在打开框架后,我得到了0xc0a8。
有人能解释为什么我会得到这些意想不到的数据吗?以及如何修复它以获得正确的数据?

听起来您可能正在将IP报头作为以太网报头读取
0x0800
是以太网报头的最后两个字节--
数据[12:13]
。IP头前置地址的长度为12字节,接下来的两个字节(IP_头[12:13])是IP源地址的前两个字节<十进制的code>0xc0a8是(192168)——在我看来,这就像内部IP地址的前两个字节,192.168.x.x

(IIRC),IP报头直接嵌入在图表的黄色数据段中的以太网报头之后,因此,例如,如果您尝试读取第一个以太网报头之后的第二个以太网报头,则可能会发生这种情况


(顺便说一句——您不需要将
protoType
转换为字符串以将其与十六进制值进行比较——只要在protoType==0x0800/
elif protoType==0x86dd
时执行
)。

1。请把包裹寄到我们的办公室。2.您是否考虑过为此使用库,例如
scapy
def ethernet_frame(data):
        ipheader = struct.unpack('!6s6sH', data[0:14])
        dest_mac = binascii.hexlify(ipheader[0])
        src_mac = binascii.hexlify(ipheader[1])
        proto = ""

        protoType = ipheader[2]
        nextProto = hex(protoType)
        
        print(nextProto)
        if(nextProto == '0x800'):
            proto = 'IPV4'
        elif(nextProto == '0x86dd'):
            proto = 'IPV6'
        print(nextProto)
        
        return dest_mac, src_mac, proto, data[14:]