python raw socket_python 利用Raw Socket进行以太网帧嗅探

本文介绍了如何使用Python的PF_PACKET套接字在Linux系统中进行以太网帧嗅探。通过创建RAW Socket,解析以太网帧头部和IP头部,展示了从接收到的数据包中提取信息的过程。
摘要由CSDN通过智能技术生成

1. Raw Socket基础

提供了一种方法来绕过整个网络堆栈遍历和直接将以太网帧输送到一个应用程序。

有很多种方法来创建raw sockets,例如AF_PACKET,PF_PACKET。这里使用PF_PACKET,它是linux系统上才有的选项,如果是windows或者是mac的系统的话,可以使用AF_PACKET。

1.1 PF_SOCKET

在链路层接收和发送包得应用接口。

所有接收到的包都包含完整的头部和数据部分。

所有发送的包都会由内核无更改的传递到媒介中。

2. 创建Raw Socket

2.1 理解Packet Header

下图为以太网帧头部和IP头部格式示意图:

以太网帧的头部有14字节,前6字节为目的mac地址,后6字节为源mac地址,之后2字节为内部协议的类型,比如IP协议的类型为0x0800。关于各种协议的类型可在/usr/include/linux/if_ether.h文件中查看(linux系统)。往里一层是IP等网络层协议,IP层内部包含TCP、UDP等传输层协议,再往里就是应用层协议,如HTTP、ssh等。

图中最下侧是IP的头部格式,最重要的部分是前20字节。

2.2 提取二进制数据到变量中

使用struct模块中的unpack()函数。

返回的时tuple格式。(tuple的更详细内容可参考:廖雪峰讲的python中tuple部分)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值