1.基本原理

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此***者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。

2.arp命令

arp命令用来管理ARP缓存

arp -v 详细模式

$ arp -v
Address                  HWtype  HWaddress           Flags Mask            Iface
xxxxx                    ether   00:12:da:46:34:00   C                     eth0
10.1.1.17                ether   00:16:3e:f2:38:33   C                     eth1
10.1.1.12                ether   00:16:3e:f2:37:6b   C                     eth1
Entries: 3  Skipped: 0  Found: 3

arp -n 显示数字地址

$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
xxxxxxxx                 ether   00:12:da:46:34:00   C                     eth0
10.1.1.13                ether   00:16:3e:f2:37:7d   C                     eth1
10.1.1.18                ether   00:16:3e:f2:38:35   C                     eth1

arp  -a 查看指定主机的IP和MAC对应关系,默认显示全部

$ arp -a
? (xxxxxxxxx) at 00:12:da:46:34:00 [ether] on eth0
? (10.1.1.13) at 00:16:3e:f2:37:7d [ether] on eth1
? (10.1.1.18) at 00:16:3e:f2:38:35 [ether] on eth1
[gintama@gintama-taiwan-lb1 ~]$ arp -a 10.1.1.18
? (10.1.1.18) at 00:16:3e:f2:38:35 [ether] on eth1

arp -d 删除指定主机的IP和MAC对应关系

$ sudo arp -d 10.1.1.18

arp -i 只显示指定网卡的IP和MAC对应关系

$ arp -i eth0
Address                  HWtype  HWaddress           Flags Mask            Iface
xxxxxxxxxxxxx            ether   00:12:da:46:34:00   C                     eth0
$ arp -i eth1
Address                  HWtype  HWaddress           Flags Mask            Iface
10.1.1.13                ether   00:16:3e:f2:37:7d   C                     eth1
10.1.1.18                ether   00:16:3e:f2:38:35   C

arp -s hostname hw_addr, --set hostname    手动设置IP和MAC的对应关系

$ sudo arp -s 10.1.1.18 00:16:3e:f2:38:35

3.arping命令

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

想目标主机发送ARP请求

-A 使用ARP REPLAY替代ARP REQUEST报文

$ sudo arping -A  -I eth1  -s 10.1.1.12  10.1.1.19
ARPING 10.1.1.19 from 10.1.1.12 eth1
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  627.781ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  988.125ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  827.356ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  837.510ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  303.940ms

-b 只发送MAC层面的ARP广播报文,正常情况下,arping先以发送ARP广播报文方式启动,当收到ARP REPLY报文后就转成单播

$ sudo arping -b  -I eth1  -s 10.1.1.12  10.1.1.19
ARPING 10.1.1.19 from 10.1.1.12 eth1
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  0.764ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  0.843ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  0.744ms

-c 指定发送ARP REQUEST报文个数.如果再指定-w参数,arping将一直等待ARP REPLY报文,直到超时时间截止

$ sudo arping -c 5  -I eth1  -s 10.1.1.12  10.1.1.19
ARPING 10.1.1.19 from 10.1.1.12 eth1
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  0.771ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  0.744ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  0.741ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  0.806ms
Unicast reply from 10.1.1.19 [00:16:3E:F2:38:3B]  0.731ms
Sent 5 probes (1 broadcast(s))
Received 5 response(s)

-w deadline

以秒为单位指定超时时间。

-D 重复地址检查模式

$ sudo arping -D 10.1.1.200
ARPING 10.1.1.200 from 0.0.0.0 eth0
Unicast reply from 10.1.1.200 [00:16:3E:F2:37:6B]  0.692ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)

-I 指定发送ARP REQUEST的网卡

-s 指定源地址

如果使用DAD模式,设置成为0.0.0.0

如果使用Unsolicited ARP mode,设置成为目的地址

其他情况下,根据路由表计算

4.阻止ARP flux

ARP协议用于将IP地址转换成为物理地址,默认情况下,拥有多块网卡的Linux主机会响应该主机的任意网卡上接收到的任意网卡上绑定的IP地址的ARP请求。

假设一台Linux主机拥有两块网卡A和B,IP地址和MAC地址分别是

主机A

IP   10.10.41.102

MAC  08:00:27:4B:63:93

主机B

IP   10.10.41.142

MAC  08:00:27:47:78:55

现在使用arping命令分别向两个IP发送ARP REQUEST

$ sudo arping 10.10.41.142
ARPING 10.10.41.142 from 10.10.41.17 eth0
Unicast reply from 10.10.41.142 [08:00:27:4B:63:93]  1.721ms
Unicast reply from 10.10.41.142 [08:00:27:4B:63:93]  1.774ms
Unicast reply from 10.10.41.142 [08:00:27:4B:63:93]  2.626ms
Unicast reply from 10.10.41.142 [08:00:27:4B:63:93]  1.174ms
Unicast reply from 10.10.41.142 [08:00:27:4B:63:93]  1.164ms
^CSent 5 probes (1 broadcast(s))
Received 5 response(s)
$ sudo arping 10.10.41.102
ARPING 10.10.41.102 from 10.10.41.17 eth0
Unicast reply from 10.10.41.102 [08:00:27:4B:63:93]  1.988ms
Unicast reply from 10.10.41.102 [08:00:27:4B:63:93]  1.266ms
Unicast reply from 10.10.41.102 [08:00:27:4B:63:93]  1.478ms
Unicast reply from 10.10.41.102 [08:00:27:4B:63:93]  1.243ms
^CSent 4 probes (1 broadcast(s))
Received 4 response(s)

可以看到10.10.41.142这个IP返回的不是它该有的MAC地址

参考文档:

http://baike.baidu.com/link?url=TrCbU1FJnpEU_MO209Dolv6X2mW09RRw9XwJHNK5YaDc0groMMAIjP-8LB6DVbXeM4H1YWQQ5QpQHyNA8tj6UjtJ77j0waYDcpcQIdJLDcy

http://blog.cj2s.de/archives/29-Preventing-ARP-flux-on-Linux.html

http://blog.chinaunix.net/uid-24960107-id-193084.html

转载于:https://blog.51cto.com/john88wang/1618047

Linux下ARP相关操作相关推荐

  1. linux下arp***的解决方案[转]

    linux下arp***的解决方案[转]      原贴:http://hi.baidu.com/yk103/blog/item/ede09a2fc5fcba391e3089f2.html linux ...

  2. linux下的shell操作mysql

    (1)MySQL的启动 重启了一次服务器后,使用> mysql -u root -p登陆是出现下面的错误: ERROR 2002 (HY000): Can't connect to local ...

  3. Linux下WPS相关命令——et,wps,wpp

    Linux下WPS相关命令--et,wps,wpp 使用"et"命令可以打开"WPS表格程序","wps"命令可以打开"WPS文字 ...

  4. linux下arp攻击的解决方案[原]

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 原贴:h ...

  5. Linux之用户组相关操作 groupadd groupdel

    Linux之用户组相关操作  groupadd  groupdel 1. 创建用户组 命令 说明 groupadd 创建(添加)用户组 创建用户组效果图: [grep是搜索功能,详情博文:https: ...

  6. Linux之用户相关操作

    Linux之用户相关操作 1. 创建用户  [创建后会立即让设置密码] 命令 说明 useradd 创建(添加)用户 useradd命令选项: 选项 说明 -m 自动创建用户主目录,主目录的名字就是用 ...

  7. Linux下对文件操作时出现乱码怎么办?

    Linux下对文件操作经常会遇见乱码问题,我在网上搜了一些解决方法,希望能对大家有所帮助. 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中 ...

  8. Linux下使用C++操作redis数据库

    Linux下使用C++操作redis数据库 文章目录 Linux下使用C++操作redis数据库 一.安装配置hiredis.h 二.接口介绍 1.**`建立链接:redisConnect`** 2. ...

  9. linux下使用python操作mysql

    linux下使用python操作mysql 文章目录 linux下使用python操作mysql 一.Python 中MySQL的几个模块对象 1.模块 2.Connection 对象 3.Curso ...

最新文章

  1. 电脑不能上网学习总结
  2. idea中生成mapper xml文件,快速从代码跳转到mapper及从mapper返回代码的插件安装
  3. linux shell date 1,linux shell date命令的坑(date 1 month ago 的诡异现象)
  4. Django09:图书管理系统笔记/choices用法/ MTV与MVC模型/多对多三种创建方式
  5. 埃斯顿机器人 王杰高_埃斯顿自动化王杰高博士受邀赴韩参加“ROBOT WORLD 2016”等一系列相关活动...
  6. HDU 1286 找新朋友 (欧拉函数)
  7. STM32F103定时器输入捕获功能
  8. ❤️JavaWeb《超市订单管理系统—了解底层原理》(建议收藏)❤️
  9. C# SyncDictionary类
  10. 迅雷CEO邹胜龙自述:迅雷十年反思
  11. 基于 SOFAArk 和 SOFADashboard 实现动态模块管控 | Meetup#2 回顾
  12. 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真
  13. Win10安装Ubuntu18.04
  14. 快速调用编辑器来写一条长,复杂或难的命令--用Enki学Linux系列(5)
  15. 微信小程序 父子组件通讯/传值
  16. Bilibili到底有多少御坂妹?(一)
  17. IT教育培训机构套路揭秘,这样的学校不能选,擦亮眼睛不上当
  18. centos7 挂载云盘
  19. 文明-根达亚文明:根达亚文明
  20. AdFly一个可以赚钱的短链接网站

热门文章

  1. [Contest]2017 ACM/ICPC Asia Regional Shenyang Online(01 03 07 09 10 11待补)
  2. day2 程序流程控制
  3. POJ 3186Treats for the Cows (区间DP)
  4. 两个月学习Python的胡言乱语
  5. daily scrum 11.27
  6. Struts2中动态的指定返回的结果集
  7. PHP学习之路之Hello World小程序
  8. Kibana_X-Pack管理Elasticsearch权限
  9. Day12-流Stream
  10. vue —— vuex namespaced模块化编码