首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

深入懂得iputils网络工具-第5篇 arping:地址解析程序

2012-09-08 
深入理解iputils网络工具-第5篇 arping:地址解析程序5.1引言ARP协议是“Address Resolution Protocol”(地址

深入理解iputils网络工具-第5篇 arping:地址解析程序
5.1       引言

    ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在同一以太网中,通过地址解析协议,源主机可以通过目的主机的IP地址获得目的主机的MAC地址。arping程序就是完成上述过程的程序。

    ARP协议可以参看RFC 826。

5.2       arping程序的使用

    敲入命令:


深入懂得iputils网络工具-第5篇 arping:地址解析程序

5.4       ARP报文的分组格式

    ARP报文的分组格式如下图所示:

深入懂得iputils网络工具-第5篇 arping:地址解析程序

5.5       arping程序的全局变量的分析

    int quit_on_reply=0;

        标识是否在接受到一个回复之后,就马上退出程序。

        可以在-f选项和-D选项中设定为非0值(同时有-f、-D选项或者有多个同种选项)。     

    char *device="eth0";

        源主机的网络设备号。

        可以通过-I参数设置。

        默认为eth0。

    (setsockopt(probe_fd, SOL_SOCKET,SO_BINDTODEVICE, device, strlen(device)+1)。

        不过好像只有超级用户这个才能执行。

    int ifindex;

        Interface number。

    char *source;

        存储-s设置的源地址。

        地址的形式可以是IPv4的标准数字和点组成的形式,如210.45.74.25;也可以是主机名字的形式,如www.ustc.edu.cn。

    struct in_addr src;

        存储源IP地址,即对ARP的回复报文所要发往的主机的IP地址,有可能是广播地址。

        可以通过-s选项设置。如果这个选项没有设置,则源地址设置方法为:

        1. DAD模式下(-D选项),设置为0.0.0.0。

        2. 在主动ARP模式(-U或者-A选项),设置为目的地址。

        3. 其他情况下,通过路由表得到。

    struct in_addr dst;

        存储目的IP地址,即ARP报文所要发往的主机的IP地址。

    char *target;

        存储用户设置的目的地址,地址的形式必须是IPv4的标准数字和点组成的形式。

    int dad;

        标识是不是DAD模式。

        如果是DAD模式,则原源主机地址一直没有设置,那么就意味着源地址为0.0.0.0。这样当目的主机接到之后,就会向0.0.0.0发送回复,就相当于广播给以太网中所有的主机。因为进行D重复地址检测模式的原因很可能是由于源主机的IP地址没有设置,从而想设置自身的IP地址。在IP地址没有设置的时候,主机只能接受到地址为0.0.0.0的广播信号。

        可以通过-D参数设置。

    int unsolicited;

        标识是不是发送免费ARP。

        在-A选项和-U选项中设置unsolicited为1。

    int advert;

        标识在免费ARP模式下发送的是ARP回复报文,而不是ARP请求报文。

        在-A选项中设置advert为1。

    int quiet;

        标识是否静默输出。

        可以通过-q选项设置。

    int count=-1;

        发送ARP的个数。

        可以通过-c选项设置,如果不设置,默认值为-1,即没有个数限制(回绕成0基本不可能)。

    int timeout;

        程序运行的时间限制。

        通过-w选项设置。

    int unicasting;

        标识是不是应该发送单播报文。

        在程序接受到一个ARP的回复之后,已经能够知道回复者的IP地址了,这时候就可以不广播,而设置传播地址。因此,在接受到ARP回复之后,如果broadcast_only没有被设置,unicasting就应该设置为1,以让下次进行单播。

    int s;

        ARP报文的套接字。

    int broadcast_only;

        标识是不是一直发送广播报文,而不在接受到一个回复以后就改成单播报文。

        通过-b选项可以设置broadcast_only为1。 

    struct sockaddr_ll me;

        存储本地主机的信息,包括本地主机的以太网地址、硬件地址的类型、硬件地址长度和协议地址长度等信息

    struct sockaddr_ll he;

        存储本地主机的信息。

    struct timeval start;

        程序发送第一个报文的系统时间。

        记录这个时间,可以用来判断程序是否超出时间限制。如果当前的系统时间减去start超过用户设置的时间限制有500毫秒,则程序退出。

    struct timeval last;

        程序发送上一个报文的系统时间。

        记录这个时间,可以用来判断是否应当发出下一个ARP请求。如果当前系统时间减去last超过500毫秒,则发出下一个ARP请求。

    int sent;

        程序发送的ARP报文数量。

        每次在发送ARP报文之后递加。

    int brd_sent;

        程序广播的ARP报文数量。

        每次在发送ARP报文之后,如果ARP报文是广播报文,则递加。

    int received;

        程序接受的ARP报文数量。

        每次在接受到正确的ARP报文之后,递加。

    int brd_recv;

        程序接受的ARP广播报文数量。

        每次在接受到正确的ARP报文之后,如果报文不是单播报文则递加。

    int req_recv;

        程序接受到ARP请求报文数量。

        每次在接受到正确的ARP报文之后,如果报文是ARP请求报文则递加。


本文章欢迎转载,请保留原始博客链接http://blog.csdn.net/fsdev/article

热点排行