python发送以太网报文_python之分解以太帧

本文介绍了如何使用Python的socket和struct模块捕获和解析以太网中IPV4和TCP协议的数据包。通过创建socket并设置为PF_PACKET和SOCK_RAW,获取到以太帧后,利用struct.unpack()函数解析目的MAC、源MAC、类型和头部信息,特别是针对IP和TCP头部的详细字段进行了解析。
摘要由CSDN通过智能技术生成

通过了解socket(int domain, int type, int protocol)接口,我们知道利用socket的AF_PACKET

或者PF_PACKET域,和类型SOCK_RAW再加上协议就可以监听获得指定协议的以太帧。

1.获得各个协议的头部

以太协议类型有很多,仅贴上一部分,如下图:

图一

本文仅介绍0x0800(IPV4)的监听与拆分。现在我们就可以利用:

s=socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800))

获得ipv4协议的以太帧。然后就是接收,并根据协议格式拆分了。先看以太帧格式部分,如下:

图二

我们接收的数据没有Preamble部分,此部分被以太网硬件过滤掉了。这里说一下,上图Type/Length

部分是Ethernet-II才有的type,在原始的IEEE 802.3帧此部分是负载的数据长度,怎样区分的呢,数值小于

1500表示帧负载数据长度,而>=1536(十六进制0x0600)表示Ethernet-II的type(见图一ethertype的值)。

另外提一下vlan类型大小是0x8100,此类型的协议现在使用比较广泛,格式如下:

图三

vlan tag中有12bit用来表示vlan id的。此处和本文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值