关于用Python编写的以下代码,我有一个问题:
def parse_ethernet(timestamp, packet)
ethernet = dpkt.ethernet.Ethernet(packet)
if isinstance(ethernet.data,dpkt.ip.IP):
parse_ip(ethernet.data)代码的思想是使用python中的dpkt库解析以太网数据包。我的问题是关于以下几行:
if isinstance(ethernet.data,dpkt.ip.IP):为什么我们需要证明ethernet.data是否是IP数据包的一个实例?以太网数据不总是包含IP数据包吗?
发布于 2020-07-04 16:19:56
为什么我们需要证明ethernet.data是否是IP数据包的一个实例?以太网数据不总是包含IP数据包吗?
不,它没有。例如,对于一个ARP请求,以太网帧包含一个ARP包,而不是一个IP包。
在ATA -over以太网中,顾名思义,以太网帧包含封装的ATA数据包,而不是IP.
其次是AES51、AVB、SoundGrid、EtherSound、CobraNet、LLDP、FCoE、PTP (第2层)、MACsec、EtherCAT、HyperSCSI、PROFINET、PPPoE、MPLS、IPX、AppleTalk、DECnet等。维基百科列出了50多个不存在EtherType分配的IP协议。
发布于 2020-07-04 17:57:46
是的,以太网帧总是在osi模型的layer2上有Mac -address。数据包在layer3上具有ip地址
https://stackoverflow.com/questions/62731308
复制相似问题