介绍
Arp(地址解析协议),用于转换ipv4地址和底层网络硬件地址,并提供从网络层地址到相关硬件地址的动态映射。
版式
arp包的具体格式前14个字节是以太网帧,它的前两个字段DST和SRC分别是目的以太网地址和源以太网地址。要发送arp数据包,目的以太网地址DST必须设置为ff:ff:ff:ff:ff:ff:ff。长度或类型字段必须是0x0806。
Arp数据包的第一个字段必须是硬件类型Hard Type 1、硬件大小Hard Size、协议类型Prot Type ipv4地址值0x0800和协议长度Prot Size size 4。arp请求操作Op为1,arp响应操作Op为2,r arp请求操作Op为3,r arp响应操作Op为4。接下来的四个字段是:发送方的硬地址表示发送方的以太网地址,如以太网帧的Src值,发送方的协议地址是发送方的ipv4地址、目标硬地址目标以太网地址和目标协议地址目标ipv4地址。因为发送arp是为了获取目标以太网地址,所以在发送arp请求时,tragehardaddress的值被设置为0。为了满足以太网的最小帧长,后面增加了Pad字段,填充18个字节。FCS是校验值,可以不存在。
密码
完整的arp数据包定义结构如下,包括一个以太网帧、一个arp帧和18字节的填充。
urp完整包结构的定义我们在初始化数据的时候,定义发送方的ip和以太网地址是src_ip和my_mac,目标ip是dst_ip,以太网广播地址是broad_mac,arpp是要发送的arp报文。
初始化数据因为需要处理链路层的数据发送和接收,所以需要创建一个SOCK_RAW原始套接字。协议是PF_PACKET,ETH_P_arp值表示链路层只需要把arp包传给我,其他包不需要。
创建原始套接字然后,我们需要绑定我们的地址,因为我们只需要接收这个地址的数据。SOCK_RAW原始套接字使用标准的物理层地址结构sockaddr_ll。
绑定本地地址在发送之前,我们必须组装arp数据包。记得在发送前将主机字节顺序转换成网络字节顺序。按照文章开头的arp格式填写内容就可以了。
组装arp包最后,只需将arp广播包发送到broad_etheraddr地址,等待arp响应即可。
发送以及接收arp包当接收到一个arp包时,需要判断它是否是一个arp响应包。如果是,则输出相应的内容;如果不是,它将被过滤而不被处理。
摘要
Arp是tcp/ip协议的一个基本协议。目前arp攻击有很多,主要的方式是通过arp欺骗,发送虚假数据给对方来达到目的。如需了解更多网络编程知识,欢迎关注我。谢谢你。