[转]ARP协议分析

arping、arp命令 ip地址冲突检测 根据ip查mac地址 arping 命令主要用来获取ip对应的mac地址,更新本地arp缓存表。平时主要用来探测ip地址是否冲突即同一个网络里,同一个ip不同mac地址的情况。ip地址冲突将导致网络故障。 阅读详情

ARP协议分析
(An Analysis Of ARP Protocol)

    ARP(Address Resolution Protocol)地址解析协议用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位) [RFC 826]。ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当然,点对点的连接是不需要ARP协议的。

ARP协议的数据结构:
typedef struct arphdr
{
 unsigned short arp_hrd;   /* 硬件类型 */
 unsigned short arp_pro;   /* 协议类型 */
 unsigned char arp_hln;   /* 硬件地址长度 */
 unsigned char arp_pln;  /* 协议地址长度 */
 unsigned short arp_op;   /* ARP操作类型 */

 unsigned char arp_sha[6];  /* 发送者的硬件地址 */
 unsigned long arp_spa;  /* 发送者的协议地址 */
 unsigned char arp_tha[6];  /* 目标的硬件地址 */
 unsigned long arp_tpa;  /* 目标的协议地址 */
}ARPHDR, *PARPHDR;

    为了解释ARP协议的作用,就必须理解数据在网络上的传输过程。这里举一个简单的PING例子。
    假设我们的计算机IP地址是192.168.1.1,要执行这个命令:ping 192.168.1.2 。该命令会通过ICMP协议发送ICMP数据包。该过程需要经过下面的步骤:
1、应用程序构造数据包,该示例是产生ICMP包,被提交给内核(网络驱动程序);
2、内核检查是否能够转化该IP地址为MAC地址,也就是在本地的ARP缓存中查看IP-MAC对应表;
3、如果存在该IP-MAC对应关系,那么跳到步骤9;如果不存在该IP-MAC对应关系,那么接续下面的步骤;
4、内核进行ARP广播,目的地的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令类型为REQUEST(1),其中包含有自己的MAC地址;
5、当192.168.1.2主机接收到该ARP请求后,就发送一个ARP的REPLY(2)命令,其中包含自己的MAC地址;
6、本地获得192.168.1.2主机的IP-MAC地址对应关系,并保存到ARP缓存中;
7、内核将把IP转化为MAC地址,然后封装在以太网头结构中,再把数据发送出去;

    使用arp -a 命令就可以查看本地的ARP缓存内容,所以,执行一个本地的PING命令后,ARP缓存就会存在一个目的IP的记录了。当然,如果你的数据包是发送到不同网段的目的地,那么就一定存在一条网关的IP-MAC地址对应的记录。

    知道了ARP协议的作用,就能够很清楚地知道,数据包的向外传输很依靠ARP协议,当然,也就是依赖ARP缓存。要知道,ARP协议的所有操作都是内核自动完成的,同其他的应用程序没有任何关系。同时需要注意的是,ARP协议只使用于本网络。

    ARP协议的利用和相关原理介绍。

一、交换网络的嗅探

    ARP协议并不只在发送了ARP请求才接收ARP应答。当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。因此,在上面的假设网络中,B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)。当A接收到B伪造的ARP应答,就会更新本地的ARP缓存,将本地的IP-MAC对应表更换为接收到的数据格式,由于这一切都是A的系统内核自动完成的,A可不知道被伪造了。

   ARP欺骗的主要用途就是进行在交换网络中的嗅探。有关交换网络的嗅探不是本文的讨论内容。

二、IP地址冲突

    我们知道,如果网络中存在相同IP地址的主机的时候,就会报告出IP地址冲突的警告。这是怎么产生的呢?

    比如某主机B规定IP地址为192.168.0.1,如果它处于开机状态,那么其他机器A更
改IP地址为192.168.0.1就会造成IP地址冲突。其原理就是:主机A在连接网络(或更改IP地址)的时候就会向网络发送ARP包广播自己的IP地址,也就是free arp。如果网络中存在相同IP地址的主机B,那么B就会通过ARP来reply该地址,当A接收到这个reply后,A就会跳出IP地址冲突的警告,当然B也会有警告。

   因此用ARP欺骗可以来伪造这个ARP reply,从而使目标一直遭受IP地址冲突警告的困扰。

三、阻止目标的数据包通过网关

    比如在一个局域网内通过网关上网,那么连接外部的计算机上的ARP缓存中就存在网关IP-MAC对应记录。如果,该记录被更改,那么该计算机向外发送的数据包总是发送到了错误的网关硬件地址上,这样,该计算机就不能够上网了。

    这里也主要是通过ARP欺骗进行的。有两种办法达到这样的目的。

    1、向目标发送伪造的ARP应答数据包,其中发送方的IP地址为网关的地址,而MAC地址则为一个伪造的地址。当目标接收到该ARP包,那么就更新自身的ARP缓存。如果该欺骗一直持续下去,那么目标的网关缓存一直是一个被伪造的错误记录。当然,如果有些了解的人查看ARP -a,就知道问题所在了。

    2、这种方法非常狠,欺骗网关。向网关发送伪造的ARP应答数据包,其中发送方的IP地址为目标的IP地址,而MAC地址则为一个伪造的地址。这样,网关上的目标ARP记录就是一个错误的,网关发送给目标的数据报都是使用了错误的MAC地址。这种情况下,目标能够发送数据到网关,却不能接收到网关的任何数据。同时,目标自己查看ARP -a却看不出任何问题来。

四、通过ARP检测混杂模式节点

    在混杂模式中,网卡进行包过滤不同于普通模式。本来在普通模式下,只有本地地址的数据包或者广播(多播等)才会被网卡提交给系统核心,否则的话,这些数据包就直接被网卡抛弃。现在,混合模式让所有经过的数据包都传递给系统核心,然后被sniffer等程序利用。
通过特殊设计的ARP请求可以用来在一定程度上检测处于混杂模式的节点,比如对网络中的每个节点都发送MAC地址为FF-FF-FF-FF-FF-FE的ARP请求。对于网卡来说这不是一个广播地址(FF-FF-FF-FF-FF-FF),所以处于普通模式的节点就会直接抛弃该数据包,但是多数操作系统核心都认为这是一个广播地址,如果有一般的sniffer程序存在,并设置网卡为混杂模式,那么系统核心就会作出应答,这样就可以判断这些节点是否存在嗅探器了。


    可以查看,很多基于ARP的攻击都是通过ARP欺骗实现的。至于ARP欺骗的防范,还是尽可能使用静态的ARP。对于WIN,使用 arp -s 来进行静态ARP的设置。当然,如果能够完全使用静态的IP+MAC对应,就更好了,因为静态的ARP缓存只是相对的。

    当然,可以有一些方法来实现ARP欺骗的检测。设置一个ARP的嗅探器,其中维护着一个本地网络的IP-MAC地址的静态对应表,查看所有经过的ARP数据,并检查其中的IP-MAC对应关系,如果捕获的IP-MAC对应关系和维护的静态对应关系对应不上,那么就表明是一个欺骗的ARP数据包了。

    一个ARP数据包发送程序源代码和编译好的EXE程序可以参考ARPSender程序。注意:需要先安装WinPcap。

华为技术之ARP-地址解析协议 数据包的封装结构: 四层:源端口号 目标端口号 三层:源IP地址 目标IP地址 二层:源MAC地址 目标MAC地址 ARP原理: 当路由器从接口接收到比特流后,首先解封装查看目标MAC地址,若该地址是自己的地址或者是自己所在组的组播地址或者广播地址,都说明该数据是发给自己的,可以继续向上解封装,查看目标IP地址。若目标MAC地址不是自己,路由器直接丢弃。 1、广播请求,目标地址MAC地址为FFFF-FFFF-FFFF 2、单播回应 ARP的触发条件: 1、访问的目标地址,跟自己的接口在. 阅读详情

相关推荐

二层主机发现-arping-ARP地址欺骗攻击-检测地址冲突

arping 原理ARP协议解析IP地址到mac地址的对应关系 arping发送ARP探测数据包 发送二层数据广播包,对应广播包正确IP地址的主机回应其mac地址 ARP缓存 查看缓存arp对应关系存储时间(默认60s),查看文件夹 cat /proc/sys/net/ipv4/neigh/default/gc_stale_time 关闭ARP缓存功能可预防IP和mac地址不对应带来的网络不通问题 ip link set arp off dev eth0 使用 单个IP arping -i eth

SCR_123的博客 937

ARP协议分析

ARP协议分析(An Analysis Of ARP Protocol)     ARP(Address Resolution Protocol)地址解析协议用于将计算机的网络地址(IP地址32位)化为物理地址(MAC地址48位) [RFC 826]。ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据

Junan的天堂 4027

使用wireshark分析ARP协议

Character is the ability to carry out a good resolution long after the excitement of moment has passed.--------毅力是兴奋的片刻久久过后,继续执行优秀决策的能力。 文章目录1, ARP协议2, ARP报文格式2.1 ARP部分2.2 以太网帧头2.3 ARP映射表3, 使用wireshark分析ARP3.1 搭建模拟环境3.2 登录路由器查看电脑和手机的IP3.2 管理者身份运行cmd3.3 pi

桦桦的博客 2万+

IP冲突检测(ARP

Address Resolution Protocol,地址解析协议,是根据IP地址获取物理地址的一个TCP/IP 协议

qq_42140247的博客 3638

ARP协议分析[]

ARP(AddressResolutionProtocol)地址解析协议用于将计算机的网络地址(IP地址32位)化为物理地址(MAC地址48位)[RFC826]。ARP协议是属于链路层的协议,在以太网中的数据帧从一个主机到达网内的另一台主机是根据48位的以太网地址(硬件地址)来确定接口的,而不是根据32位的IP地址。内核(如驱动)必须知道目的端的硬件地址才能发送数据。当然,点对点的连接是不需要A

enlonely的专栏 319

lwIP ARP协议分析1 ()

 1. ARP: 从功能上来说,arp可以简单的分成两个部分: a. 当我要向目的ip发送一个数据包的时候,需要通过arp实现ip到物理地址(一般为mac地址)的映射------------》ethernet_output函数 b. 处理输入包,更新arp缓存,如果是ip包后递交给ip层,如果是arp包,对于不同的arp操作做相应的相应------------》etharp_input

mmz_xiaokong的专栏 1413

[]ARP地址解析协议详解及其漏洞分析[21世纪安全网络--21SaFe.CoM]

/*  * 以太网解释协议(ARP). 文件名:/sys/netinet/if_ether.c  * 注释:xie_minix  *一,函数入口:  * ARP有两个入口:1  * 由ether_input发出一软中断(见我的ethernet网络代码详解一文),arpintr中断例程被调用,检查完数据后  * 该中断例程调用in_arpinput函数.  * 入口2:  * 由ether_outp

HappyTown的专栏 1474

TCP/IP协议栈源代码分析

接着调用的函数是ip_finish_output,进而调用__ip_finish_output。由于此处已经是第三次握手了,半连接队列里会存在第一次握手时留下的半连接信息,所以tcp_v4_hnd_req会在半连接队列里找到半连接request_sock对象后进入tcp_check_req,判断接收队列是不是满了,没满则创建子sock(tcp_sock),然后把request_sock从半连接队列删除,将request_sock添加到全连接队列链表的尾部,并与新创建的sock关联。

weixin_51551051的博客 1090

网络程序设计课程报告-TCP/IP协议栈源代码分析

一、inet_init是如何被调用的?从start_kernel到inet_init调用路径是怎样的? inet_init函数 可以在net/ipv4/af_inet.c中找到inet_init函数,这里选择了linux-v6.6.8版本的源码进行分析,可以看到inet_init函数的定义如下所示: static int __init inet_init(void) { struct inet_protosw *q; struct list_head *r; int rc; sock_skb_cb

fsn20010710的博客 1225

ARP协议详解

ARP协议详解

qq_983030560的博客 2万+

ARP 应用——检测IP地址冲突

在给主机分配IP地址或更改了IP地址后,要检测新的IP地址是否与其他设备所冲突。利用ARP可以检测,避免冲突。      以自己的IP地址作为目的IP地址,进行ARP Request广播。如果该网段下有重复的IP地址,则会接收到ARP reply报文,并且可以知道那个网卡与此IP重复了,从而可以避免IP的复用。

海绵汽水的博客 8734

奇葩问题:arp缓存、ip地址冲突(实际是ip地址被占用导致arp缓存出现问题)(ip缓存、清除mac缓存、手动清除mac地址缓存)(arp -a、ipconfig /flushdns、arp -d)

猜测是局域网存在ip冲突了,用Advanced IP Scanner探测192.168.1.116的时候,获取到了我们盒子的mac,更新到了电脑的arp缓存里,但是过了一会,冲突的设备又把它的mac地址更新到我们的arp缓存里了,所以导致访问不了我们的服务。我本来想直接在路由器把这台设备的mac给禁用了,但是我们领导把路由器密码给忘了,我只能在办公室用排除法看是哪台设备,但是找了好久,还是没找出来,同事都在联网,也不好断网排查,ԾㅂԾ,理论上来说,只要把这台设备ip改成其他的,就不会与我们盒子ip冲突了。

Dontla的博客 3463

两种IP冲突检测方法

arping 假设需要检测A主机(192.168.1.66)的ip地址是否冲突,在同一网段的B主机(192.168.1.55)上执行以下命令: $arping 192.168.1.66 ARPING 192.168.1.66 from 192.168.1.55 eth0 Unicast reply from 192.168.1.66 '[10:ab:ec:75:97:C1]' 2.186m...

leonnew的博客 4万+

ARP 冲突现场怎么排?一个 display arp 就够了

统一用 DHCP 分配,并禁止手动设 IP,是根治的办法。看到同一个 IP 在发两个不同 MAC 的 reply,就能抓到“李逵”和“李鬼”的包。其实,排查并不难,一个 display arp 就能看出来,关键是——你得知道怎么看。开启之后,交换机会自动检测一个 IP 对应多个 MAC 的异常行为,并做告警。同一个 IP 地址,在 ARP 表里对应了两个不同的 MAC,或者反复变化。,这说明这个 IP 同时出现在了不同 MAC 上,而且在不同端口上学到了。ARP 冲突最难的是:谁是合法 IP,谁是乱配的?

985

网络篇】如何查看ip 是否冲突

目前通常情况下会使用DHCP技术实现自动分配ip,一般不会出现冲突,但有时手动分配,就要注意是否冲突。 查看ip是否冲突: 说明:arping默认使用的网卡是etho,但有时ip不在这个网卡,这里指定了网卡eth3。 原理: arping命令以广播地址发送arp包,局域网内所有的主机都会收到这个arp包。本机收到后不显示任何Reply。在Linux主机端执行 arping 15.5.8.11 相当于向局域网内所有主机发送了消息: who has 15.5.8.112的arp request,tell 1

weixin_45842494的博客 9875

检验ip是否冲突的方法

载:检验ip是否冲突的方法_孤城幻夜-CSDN博客_怎么看ip是否冲突 方法一:最简单的方式即是使用命令ping -a 检验冲突的ip地址,这时会返回冲突ip电脑的主机名,与自己的主机名比较, 方法二:先ping ip地址,看是否ping通,再使用 ipconfig查看ip地址是否与自己的ip相同 ...

modi000的博客 3万+
上一篇: 嗅探的基本原理
下一篇: [转]用ARP探测网络中的混杂模式节点
nonsenser
博客等级 码龄21年 1粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值