Linux二层网络arp相关命令

  • Network
  • 798 clicked

1. arp

  ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

显示和修改“地址解析协议 (ARP)”缓存中的项目。ARP 缓存中包含一个或多个表,它们用于存储 IP地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则 arp命令将显示帮助信息。

1.1. 指令格式

arp[-a [InetAddr] [-N IfaceAddr]] [-g [InetAddr] [-N IfaceAddr]] [-d InetAddr [IfaceAddr]] [-s InetAddr EtherAddr [IfaceAddr]]

arp [-vn]  [<HW>] [-i <if>] [-a] [<hostname>]      <-Display ARP cache
arp [-v]          [-i <if>] -d  <host> [pub]       <-Delete ARP entry
arp [-vnD] [<HW>] [-i <if>] -f  [<filename>]     <-Add entry from file
arp [-v]   [<HW>] [-i <if>] -s  <host> <hwaddr> [temp]            <-Add entry
arp [-v]   [<HW>] [-i <if>] -Ds <host> <if> [netmask <nm>] pub          <-''-

1.2. 参数解释

-A          指定地址族 addr family
-a[ InetAddr] [ -N IfaceAddr]       显示所有接口的当前 ARP 缓存表。要显示特定 IP 地址的 ARP 缓存项,请使用带有 InetAddr 参数的 arp -a,此处的InetAddr 代表 IP 地址。如果未指定 InetAddr,则使用第一个适用的接口。要显示特定接口的 ARP 缓存表,请将 -NIfaceAddr 参数与 -a 参数一起使用,此处的 IfaceAddr 代表指派给该接口的 IP 地址。-N 参数区分大小写。
-n          以数字地址形式显示,用于查看高速缓存中的所有项目。多个网卡使用arp -n加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。
-d InetAddr [IfaceAddr]  删除指定的 IP 地址项,此处的 InetAddr 代表 IP 地址。对于指定的接口,要删除表中的某项,请使用 IfaceAddr参数,此处的 IfaceAddr 代表指派给该接口的 IP 地址。要删除所有项,请使用星号 (*) 通配符代替 InetAddr。
-i          指定具体设备
-D          使用ifa硬件地址界面
-H          type设置和查询arp缓存时检查 type 类型的地址
-s InetAddr EtherAddr [IfaceAddr]     向 ARP 缓存添加可将 IP 地址 InetAddr 解析成物理地址 EtherAddr 的静态项。要向指定接口的表添加静态 ARP 缓存项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表指派给该接口的 IP 地址。
-d 人工删除一个静态配置项目
-v 显示详细信息
-f 从指定文件或/etc/ethers中读取新的arp条目

1.3. 实例

# 查询arp
$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.197.2            ether   00:50:56:f8:b3:40   C                     ens33
192.168.197.1            ether   00:50:56:c0:00:08   C                     ens33     
# 添加arp
$ arp -s 192.168.197.5 00:50:56:c0:00:07
# 删除arp
$ arp -d 192.168.197.5

2. arping

2.1. 介绍

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

  arping,用来向局域网内的其它主机发送ARP请求的指令,它可以用来测试局域网内的某个IP是否已被使用。

2.2. 格式及参数解释

arping [-fqbDUAV] [-c count] [-w deadline] [-w timeout] [-s source] [-I interface] destination

-a:Audible ping.这个当有reply回来的时候,你的电脑有喇叭的话,就会滴滴的叫
-A:与-U参数类似,但是使用的是ARP REPLY包而非ARP REQUEST包。
-b:发送以太网广播帧,arping在开始时使用广播地址,在收到回复后使用unicast单播地址。 
-c:发送指定的count个ARP REQUEST包后停止。如果指定了-w参数,则会等待相同数量的ARP REPLY包,直到超时为止。 
-D:重复地址探测模式,用来检测有没有IP地址冲突,如果没有IP冲突则返回0。 
-f:收到第一个响应包后退出。 
-h:显示帮助页。 
-I:用来发送ARP REQUEST包的网络设备的名称。对于多网卡设备,需要指定具体接口。
-q:quite模式,不显示输出。 
-U:无理由的(强制的)ARP模式去更新别的主机上的ARP CACHE列表中的本机的信息,不需要响应。 
-V:显示arping的版本号。 
-w:指定一个超时时间,单位为秒,arping在到达指定时间后退出,无论期间发送或接收了多少包。在这种情况下,arping在发送完指定的count(-c)个包后并不会停止,而是等待到超时或发送的count个包都进行了回应后才会退出。 
-s:设置发送ARP包的IP资源地址,如果为空,则按如下方式处理: 
    1. DAD模式(-D)设置为0.0.0.0; 
    2. Unsolicited模式(-U)设置为目标地址; 
    3. 其它方式,从路由表计算。
-d:这个比较重要,当局域网有IP占用的时候,可以指定这个参数,当有相同的IP的不同MAC地址reply的时候,arping会退出,退出码为1

2.3. 实例

  1. 查看某个IP的MAC地址

    arping 192.168.131.155
  2. 查看某个IP的MAC地址,并指定count数量

    arping -c 1 192.168.131.155
  3. 当有多块网卡的时候,指定特定的设备来发送请求包

    arping -i eth1 -c 1 192.168.131.155
  4. 查看某个IP是否被不同的MAC占用

    arping -d 192.168.131.155
  5. 查看某个MAC地址的IP,要在同一子网才查得到

    arping -c 1 52:54:00:a1:31:89
  6. 确定MAC和IP的对应,确定指定的网卡绑定了指定的IP

    arping -c 1  -T 192.168.131.156  00:13:72:f9:ca:60
  7. 确定IP和MAC对应,确定指定IP绑在了指定的网卡上

    arping -c 1  -t  00:13:72:f9:ca:60 192.168.131.156
  8. 有时候,本地查不到某主机,可以通过让网关或别的机器去查。以下几种形式测了下都可以

    arping  -I ens33 -c 1  -S 10.240.160.1 -s 88:5a:92:12:c1:c1  10.240.162.115
    
    arping  -I ens33  -c 1  -S 10.240.160.1  10.240.162.115

2.4. 实例分析

  1. 用于检验目标主机是否存活

    $ arping -c 1 -I ens33 192.168.197.1
    
    ARPING 192.168.197.1 from 192.168.197.128 ens33
    Unicast reply from 192.168.197.1 [00:50:56:C0:00:08]  0.732ms
    Sent 1 probes (1 broadcast(s))
    Received 1 response(s)
    • 1 packets received, 0% unanswered表示目标主机在该网络中存活
    $ arping -c 1 -I ens33 192.168.197.3
    
    ARPING 192.168.197.1 from 192.168.197.128 ens33
    Unicast reply from 192.168.197.1 [00:50:56:C0:00:08]  0.732ms
    Sent 1 probes (1 broadcast(s))
    Received 1 response(s)
    • 0 packets received, 100% unanswered (0 extra)表示目标主机在该网络中未存活
  2. 检查是否存在ARP欺骗

      用于检查是否存在ARP欺骗,返回的数据包的IP地址一样,而MAC地址有多个,则存在ARP欺骗。如下说明目标主机不存在ARP欺骗。

    $ arping -D -I ens33 192.168.197.1
    
    ARPING 192.168.197.1 from 0.0.0.0 ens33
    Unicast reply from 192.168.197.1 [00:50:56:C0:00:08]  0.739ms
    Sent 1 probes (1 broadcast(s))
    Received 1 response(s)

      如果目标主机是网关的IP,而这时候有存在两个(或多个)不同的MAC地址对应同一个网关的IP,这时候就说明有人使用ARP欺骗来冒充你的网关,这时候你电脑所有发出的信息,都有可能流经这个中间人的电脑。

3. arpd

arpd命令是用来收集免费arp信息的一个守护进程,它将收集到的信息保存在磁盘上或者在需要时,提供给内核用户用于避免多余广播。

3.1. 格式及参数

    arpd(选项)(参数)
-l:将arp数据库输出到标准输出设备显示并退出;
-f:指定读取和加载arpd数据库的文本文件,文件的格式与“-l”输出信息类似;
-b:指定arpd数据库文件,默认的位置为“/var/lib/arpd.db”;
-a:指定目标被认为死掉前查询的次数;
-k:禁止通过内核发送广播查询;
-n:设定缓冲失效时间。

3.2. 实例

启动arpd进程:
arpd -b /var/tmp/arpd.db

运行一段时间后,查看结果:
arpd -l -b /var/tmp/arpd.db

发表评论

邮箱地址不会被公开。 必填项已用*标注