网络协议分析-ARP协议分析
ARP分组的格式如下图:
字段1是ARP请求的目的以太网地址,全1时代表广播地址。
字段2是发送ARP请求的以太网地址。
字段3以太网帧类型表示的是后面的数据类型,ARP请求和ARP应答这个值为0x0806。
字段4表示硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1。
字段5表示要映射的协议地址的类型,要对IPv4地址进行映射,此值为0x0800。
字段6和7表示硬件地址长度和协议地址长度,MAC地址占6字节,IP地址占4字节。
字段8是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;3,
表示进行RARP请求;值为4,表示进行RARP应答。
字段9是发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同。
字段10是发送ARP请求或应答的IP地址。
字段11和12是目的端的硬件地址和协议地址。
下面两张图分别是ARP请求和相应的ARP应答的分组格式截图。
ARP请求分组中,字段11目的MAC地址未知,用全0进行填充。
ARP应答分组中,将ARP请求中的源和目的地址进行交换,此外,变化的还有字段8 Opcode。其余字段内容不会发生变化。
导入 scapy 库
找到arp
from scapy.all import *
ls()
实例化arp数据包格式
arp=ARP()
arp.show()
ytw=Ether()
packet=ytw/arp
构建一个Ethernet和ARP复合数据类型
import os #导入os模块
os.system("ifconfig") #查看本地ip