深入理解iputils网络工具-第5篇 arping:地址解析程序
来源:互联网 发布:农村淘宝免费下载安装 编辑:程序博客网 时间:2024/05/18 02:19
5.1 引言
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在同一以太网中,通过地址解析协议,源主机可以通过目的主机的IP地址获得目的主机的MAC地址。arping程序就是完成上述过程的程序。
ARP协议可以参看RFC 826。
5.2 arping程序的使用
敲入命令:
lixi@lixi-desktop:~/temp/iputils/iputils-s20071127$ arping 210.45.74.29 -c 1 -DARPING 210.45.74.29 from 0.0.0.0 eth0Unicast reply from 210.45.74.29 [00:40:D0:59:CD:D3] 0.684msSent 1 probes (1 broadcast(s))Received 1 response(s)
在本地主机的局域网内有一台IP地址为210.45.74.29的主机,所以会接到一个回复。
lixi@lixi-desktop:~$ arping 210.45.74.28 -c 1 -DARPING 210.45.74.28 from 0.0.0.0 eth0Sent 1 probes (1 broadcast(s))Received 0 response(s)
向一个不存在的IP发送报文不会接受到回复。
root@lixi-desktop:~# arping 210.45.74.25 –Uroot@lixi-desktop:~# tcpdump arp -n | grep 210.45.74.25
得到输出结果如下:
11:03:13.848653 arp who-has 210.45.74.25 (ff:ff:ff:ff:ff:ff) tell 210.45.74.25
这里就是一个免费ARP的例子。
-A
与-U选项类似,但是发送的是ARP 回复报文,而不是ARP请求报文。
-b
只发送MAC级别的广播。一般的arping开始时发送广播,在接受到回复后开始发送单播。
-c <count>
在发送count个ARP请求后就退出。在和deadline选项一起使用时,arping程序一直等到收到count个ARP回复报文或者时间消耗完毕时才退出。
-D
重复地址检测模式(DAD,Duplicate address detection mode)。参见RFC2131,4.4.1。如果DAD成功,则返回0,即不会接受到没有任何回复。
-f
在接受到第一个确定目标主机存在的回复之后,就结束程序,否则一直发送ARP请求。
-I <interface>
设置网络设备的名字,这个名字就是发送ARP请求报文的设备名字。
-h
打印帮助信息,然后退出。
-q
静默输出,不打印探测结果。
-s <source>
在ARP报文中使用的IP源地址。如果这个选项没有设置,则源地址设置方法为:
1. DAD模式下(-D选项),设置为0.0.0.0。
2. 在主动ARP模式(-U或者-A选项),设置为目的地址。
3. 其他情况下,通过路由表得到。
-U
为了更新以太网邻居的ARP快速缓存而主动进行的ARP。也就是免费ARP(gratuitous ARP)。
-V
打印出版本信息,然后退出。
-w deadline
设定时间期限为<deadline>秒,不管已经发送和接到了多少包,只要达到时间期限就结束ping的过程。在这种情况下,这样arping程序只有在接受到cout个回复或者deadline的时间消耗完后才退出;而不是像只有-c选项的情况,在发送count个ARP请求的就退出。
5.3 arping程序的流程图
arping程序的流程图如下所示:
5.4 ARP报文的分组格式
ARP报文的分组格式如下图所示:
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
- 深入理解iputils网络工具-第5篇 arping:地址解析程序
- 深入理解iputils网络工具-第5篇 arping:地址解析程序
- 深入理解iputils网络工具-第6篇 rarpd:逆地址解析程序
- 深入理解iputils网络工具-第1篇 简介
- 深入理解iputils网络工具-第2篇 ping:通路检测程序
- 深入理解iputils网络工具-第3篇 clockdiff:时间比对程序
- 深入理解iputils网络工具-第4篇 tracepath:路由追踪程序
- 深入理解iputils网络工具-第8篇 rdisk:路由表更新程序
- 深入理解iputils网络工具-第7篇 tftpd:简单文本传输
- 深入解析Linux 常用命令--arping
- arping命令解析
- IPUtils
- arping
- 深入理解黑客攻击-改变程序的返回地址
- 深入理解内存地址
- 深入理解Lustre文件系统-第5篇 LDLM:锁管理者
- Linux arping命令测试IP地址冲突
- Linux arping命令测试IP地址冲突
- void及void指针含义的深刻解析
- 线性筛法求解 H数列问题
- NSCharacterSet 去除NSString中的空格
- 各种分布及应用场合(建模对象)
- 为什么上传服务器就报错??
- 深入理解iputils网络工具-第5篇 arping:地址解析程序
- C#鼠标按住标题移动时移动窗体
- 图片-flash弹出特效
- 线性筛法的应用
- SCP命名使用
- USB驱动开发(3)--配置USB I/O目标
- 二维数组的传递方式
- 10 jQuery Custom Scrollbar Plugins 滚动条特效
- SimpleXMLElement类对象的实例化