当前位置:   article > 正文

ARP协议解析-wireshark抓包分析_arp协议抓包分析

arp协议抓包分析

最近很多人发现了,我写了好几篇协议解析文章,但是大部分人都不怎么熟悉以太网点对点协议之pppoe协议讲解PPTP协议详解及报文解析的协议,从事网络安全开发的,可能常见!今天主要研究ARP协议。

什么是ARP协议

ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。

ARP协议在网络层下面作为OSI网络和OSI链路层之间接口的一部分运行。在通过以太网使用IPv4时使用。

ARP有哪些类型

ARP协议延伸出来的"代理ARP"、“免费ARP”、“RARP”、“IARP”,类型,而这些不同种类的ARP,主要应用在:

代理ARP

代理ARP是一种技术,通过该技术,给定网络上的代理设备可以响应ARP请求以获取不在该网络上的IP地址。代理知道流量目的地的位置,并提供自己的MAC地址作为目的地。

免费ARP

免费ARP几乎就像一个管理程序,是网络上的主机简单地宣布或更新其IP到MAC地址的一种方式。ARP请求不会提示免费ARP将IP地址转换为MAC地址。

RARP

不知道自己IP地址的主机可以使用反向地址解析协议(RARP)进行发现。

IARP

ARP使用IP地址查找MAC地址,而IARP使用MAC地址查找IP地址。

为什么需要ARP

ARP是必需的,因为连接到网络的主机或计算机的软件地址(IP地址)需要转换为硬件地址(MAC地址)。

如果没有ARP协议,则主机将无法找出另一台主机的硬件地址。

ARP工作流程

ARP整个完整交互过程仅需要两个包,一问一答即可搞定! 一个是 ARP 请求过程,一个是 ARP 应答过程。

为了让大家更好的理解ARP协议以及广播和单播的概念,我们来看一下用Wireshark抓取到的真实网络中的ARP过程,通过数据包的方式来呈现。

ARP 请求过程:
在这里插入图片描述

当主机PC1想要给主机PC2发送数据时,主机PC1会首先在自己的本地ARP缓存表中检查与主机PC2相匹配的MAC地址。如果主机PC1在自己的缓存表中没找到主机PC2的相关条目,那么它就要想办法获取主机PC2的MAC地址。这就需要将ARP的请求帧广播到本地网络上的所有主机中。

ARP请求包:

在分析 ARP 协议包之前,先介绍一下它的报文格式,以帮助用户更清楚的理解每个包。
在这里插入图片描述
以太网头部信息来确定这个数据包是不是一个真的广播数据包。发现这个数据包目的地址是ff:ff:ff:ff:ff:ff,这是一个广播地址,是因为主机 PC2 不知道 PC1 主机的 MAC 地址,说明当前数据包会被广播到当前网段中的所有设备上。而这个数据包中以太网的源地址就是本机的MAC地址。

Hardware type :占2字节,硬件类型,标识链路层协议。
Protocol type: 占2字节,协议类型,标识网络层协。
Hardware size :占1字节,硬件地址大小,标识MAC地址长度,这里是6个字节(48bit)。
Protocol size: 占1字节,协议地址大小,标识IP地址长度,这里是4个字节(32bit)。
Opcode: 占2字节,操作代码,标识ARP数据包类型,1表示请求,2表示回应。
Sender MAC address :占6字节,发送者MAC。
Sender IP address :占4字节,发送者IP。
Target MAC address :占6字节,目标MAC,此处全0表示在请求。
Target IP address: 占4字节,目标IP。

ARP 应答过程:

在这里插入图片描述
主机PC2将包含有自己MAC地址的ARP响应消息直接回复给主机PC1(单播)。主机PC1收到从主机PC2发来的ARP响应消息后,会将主机PC2的IP地址和MAC地址添加到自己的ARP缓存表中。接下来,主机PC1就可以向主机PC2发送消息了。

ARP响应包:

在这里插入图片描述
arp应答报文和arp请求报文类似。不同的是,此时以太网头部帧头部分的目的MAC地址为发送ARP协议地址解析请求的MAC地址,而源MAC地址为被解析的主机MAC地址。同时操作类型为2表示是应答数据报文。

Hardware type :占2字节,硬件类型,标识链路层协议。
Protocol type: 占2字节,协议类型,标识网络层协。
Hardware size :占1字节,硬件地址大小,标识MAC地址长度,这里是6个字节(48bit)。
Protocol size: 占1字节,协议地址大小,标识IP地址长度,这里是4个字节(32bit)。
Opcode: 占2字节,操作代码,标识ARP数据包类型,1表示请求,2表示回应。
Sender MAC address :占6字节,发送者MAC。
Sender IP address :占4字节,发送者IP。
Target MAC address :占6字节,目标MAC,此处全0表示在请求。
Target IP address: 占4字节,目标IP。

按wireshark格式解析ARP协议:


int main(int argc, char* argv[])
{
    char errbuf[1024];
    pcap_t *desc = 0;

    char *filename = argv[1];
    if (argc != 2)
    {
        printf("usage: ./dissect_pppoe [pcap file]\n");
        return -1;
    }

    printf("ProcessFile: process file: %s\n", filename);
    if ((desc = pcap_open_offline(filename, errbuf)) == NULL)
    {   
        printf("pcap_open_offline: %s error!\n", filename);
        return -1; 
    }   

    pcap_loop(desc, pkt_number, (pcap_handler)ace_pcap_hand, NULL);
    pcap_close(desc);
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

输出结果:

在这里插入图片描述

ARP到底是链路层还是网络层?

这里给一下我的观点,协议到底所属哪一层,ARP协议能获取到MAC信息,服务于链路层,是不是属于链路层?如果往这方面想的话,ARP是链路层。

以太网协议类型0x0800是IP协议,0x0806是ARP协议,都是在一个层面上,IP是网络层,那么ARP认为是网络层。

在《TCP/IP详解卷一》里面就提到了这个问题,感兴趣的小伙伴可以去看看。

总结

在发送数据的时候,只知道目标IP地址,不知道MAC地址,而又不能跨越第二、三层实现通讯,这就需要使用地址解析协议(ARP)。

ARP协议是在RFC826中定义的。RFC是定义各种协议实现标准的官方文档,建议大家在学习网络知识的时候,应当多多参考这些资料,因为它最权威,也最全面。

参考: https://www.rfc-editor.org/info/rfc826

欢迎关注微信公众号【程序猿编码】,需要ARP源代码和报文的添加本人微信号(17865354792)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/267648
推荐阅读
相关标签
  

闽ICP备14008679号