免费ARP

原文地址:http://www.vants.org/?post=118


免费ARP的格式

       免费ARP报文与普通ARP请求报文的区别在于普通的ARP请求报文,其ARP封装内的“目的IP地址”是其他机器的IP地址,而免费ARP的请求报文,其ARP封装内的“目的IP地址”是其自己的IP地址。免费ARP的封装格式如下图所示: 


免费ARP报文的封装格式图示

免费ARP的作用

(1)一个主机可以通过免费ARP来确定另一个主机是否设置了相同的I P地址。当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP 的主机。

(2)如果发送免费A R P的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。

免费ARP的应用场景

(1)双机热备,更新硬件地址

(2)检测地址冲突

C语言实现

  1.        //填充以太网头部  
  2.         memcpy(frame.eh.ether_dhost, 0xff, 6);    //目的MAC地址  
  3.         memcpy(frame.eh.ether_shost, src_mac, 6);    //源MAC地址  
  4.         frame.eh.ether_type = htons(ETH_P_ARP);      //协议   
  5.   
  6.         //填充ARP报文头部  
  7.         frame.arp.ea_hdr.ar_hrd = htons(ARPHRD_ETHER);    //硬件类型   
  8.         frame.arp.ea_hdr.ar_pro = htons(ETHERTYPE_IP);    //协议类型 ETHERTYPE_IP | ETH_P_IP  
  9.         frame.arp.ea_hdr.ar_hln = 6;                //硬件地址长度  
  10.         frame.arp.ea_hdr.ar_pln = 4;                //协议地址长度  
  11.         frame.arp.ea_hdr.ar_op = htons(ARPOP_REQUEST);    //ARP请求操作  
  12.         memcpy(frame.arp.arp_sha, src_mac, 6);    //源MAC地址  
  13.         memcpy(frame.arp.arp_spa, ip, 4);     //源IP地址  
  14.         memcpy(frame.arp.arp_tha, 0xff, 6);    //目的MAC地址  
  15.         memcpy(frame.arp.arp_tpa, ip, 4);     //目的IP地址,与源IP地址保持一致
  16.   




  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值