详解网络传输中的三张表:MAC地址表,ARP缓存表,路由表:http://blog.51cto.com/dengqi/1223132
ARP缓存表:https://blog.csdn.net/zi\_jun/article/details/8786071
arp协议
ARP协议(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址。
简单地说,ARP协议主要负责将局域网中的32位IP地址转换为对应的48位物理地址,即网卡的MAC地址,比如IP地址为192.168.0.1网卡MAC地址为00-03-92-D0-A7-2B。首先主机向目标主机发送包含IP地址信息的广播数据包,即ARP请求,然后目标主机向该主机发送一个含有IP地址和MAC地址数据包,通过MAC地址两个主机就可以实现数据传输了。
什么是arp缓存表?
在以太局域网内数据包传输依靠的是MAC地址,IP地址与MAC对应的关系依靠ARP表,每台安装有TCP/IP协议的主机(包括网关)都有一个ARP缓存表。该表中保存这网络中各个电脑的IP地址和MAC地址的对照关系。
在正常情况下arp缓存表能够有效的保证数据传输的一对一性。但是ARP协议对应的ARP缓存表维护机制中存在不完善的地方,当主机收到一个ARP的应答包后,它并不验证自己是否发送过这个ARP请求,而是直接将应答包里的MAC地址与IP对应的关系替换掉原有的ARP缓存表里的相应信息。这就是导致arp欺骗的根本原因。
如何查看ARP缓存表?
在终端输入 arp -a可以查看ARP缓存内容
在终端输入arp -d <IP地址>或 arp -d 可以删除指定IP或全部的ARP缓存记录。
Linux不会真正清除ARP缓存,它只是对要清除的目录设一个标志。
Linux内核会把当前ARP缓存以可读的形式存于文件/proc/net/arp中。
# arp -a
? (192.168.1.254) at 00:30:0A:BD:6B:25 [ether] on eth0
ads
(10.1.8.11) at 00:03:FF:64:51:A6 [ether] on eth1
atm
(10.1.10.26) at 00:90:CC:D1:46:0F [ether] PERM on eth1
?
(10.1.8.254) at 00:B0:64:6F:B9:A0 [ether] on eth1
从中可以看到,我的系统两张网卡上共有四条ARP缓存,对没有主机名的条目,主机名一栏用?表示。下面再来看一下/proc/net/arp:
# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.1.254 0x1 0x2 00:30:0A:BD:6B:25 * eth0
10.1.8.11 0x1 0x2 00:03:FF:64:51:A6 * eth1
10.1.10.26 0x1 0x6 00:90:CC:D1:46:0F * eth1
10.1.8.254 0x1 0x2 00:B0:64:6F:B9:A0 * eth1
在该文件中保存有IP地址,网络类型,ARP标志,MAC地址,网络掩码,和网络接口名等ARP缓存信息。其中IP地址,MAC地址和网络接口意思很明显;网络掩码用于指定ARP代理,2.2之后的内核已经不再支持;网络类型参见RFC826,0x1指以太网;
关于Flags
先删除10.1.8.11的ARP缓存
# arp -d 10.1.8.11
# arp -a
? (192.168.1.254) at 00:30:0A:BD:6B:25 [ether] on eth0
ads
(10.1.8.11) at <incomplete> on eth1
atm
(10.1.10.26) at 00:90:CC:D1:46:0F [ether] PERM on eth1
?
(10.1.8.254) at 00:B0:64:6F:B9:A0 [ether] on eth1
#cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.1.254 0x1 0x2 00:30:0A:BD:6B:25 * eth0
10.1.8.11 0x1 0x0 00:03:FF:64:51:A6 * eth1
10.1.10.26 0x1 0x6 00:90:CC:D1:46:0F * eth1
10.1.8.254 0x1 0x2 00:B0:64:6F:B9:A0 * eth1
删除10.1.8.11之后,arp -a会显示<incomplete>,/proc/net/arp中将它的Flags设为0x0,以表明该ARP cache暂时无效,等待更新,但该条目并没有从ARP cache中彻底删除。收到ARP应答后,该条目会自动更新,我们并不一定要发出ARP请求。
linux/proc/net/arp文件
/proc/net/arp
This holds an ASCII readable dump of the kernel ARP table used for address resolutions.
It will show both dynamically learned and preprogrammed ARP entries.
The format is:
IP address HW type Flags HW address Mask Device
192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0
192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
Here "IP address" is the IPv4 address of the machine
and the "HW type" is the hardware type of the address from RFC 826.
The flags are the internal
flags of the ARP structure (as defined in /usr/include/linux/if_arp.h) andthe "HW address" is the data link layer mapping for that IP address if it is known.
/* ARP protocol HARDWARE identifiers. */
>
#define ARPHRD_NETROM 0 /* from KA9Q: NET/ROM pseudo */
#define ARPHRD_ETHER 1 /* Ethernet 10Mbps */
#define ARPHRD_EETHER 2 /* Experimental Ethernet */
#define ARPHRD_AX25 3 /* AX.25 Level 2 */
#define ARPHRD_PRONET 4 /* PROnet token ring */
#define ARPHRD_CHAOS 5 /* Chaosnet */
#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB */
#define ARPHRD_ARCNET 7 /* ARCnet */
#define ARPHRD_APPLETLK 8 /* APPLEtalk */
#define ARPHRD_DLCI 15 /* Frame Relay DLCI */
#define ARPHRD_ATM 19 /* ATM */
#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id) */
#define ARPHRD_IEEE1394 24 /* IEEE 1394 IPv4 - RFC 2734 */
#define ARPHRD_EUI64 27 /* EUI-64 */
#define ARPHRD_INFINIBAND 32 /* InfiniBand */
/* ARP Flag values. */
#define ATF_COM 0x02 /* completed entry (ha valid) */
#define ATF_PERM 0x04 /* permanent entry */
#define ATF_PUBL 0x08 /* publish entry */
#define ATF_USETRAILERS 0x10 /* has requested trailers */
#define ATF_NETMASK 0x20 /* want to use a netmask (only
for proxy entries) */#define ATF_DONTPUB 0x40 /* don't answer this addresses */
什么是ARP攻击?
ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。
ARP攻击主要是存在于局域网网络中,局域网中若有一个人感染ARP木马,则感染该ARP木马的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
将ip地址转换为mac地址是ARP的工作,在网络中发送虚假的ARP respones,就是ARP欺骗。
ARP欺骗根据欺骗的中间对象的不同分为两种:
1>对路由器ARP表的欺骗
欺骗的原理: 通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的IP-MAC地址信息无法更新保存在路由器中,结果路由器的所有数据只能发送给错误的MAC地址,造成正常PC无法收到信息。
2>对局域网内PC的网关欺骗
欺骗的原理: 建立假网关,给局域网中的PC发送ARP的应答包,让PC认为网关已经改到了新的IP(假网关)上了,让被它欺骗的PC向假网关发数据,而不是通过正常的网关上网。局域网内的PC就是上不了网了。
如何判断是否受到ARP攻击?
ARP攻击是有机器伪装成了网关的MAC,所以浏览受害机器的ARP缓存肯定可以发现一台或多台机器与网关有相同的MAC地址。由此可判断是否是ARP攻击。
具体:
chao@redcat:~$ arp -a
? (10.91.11.58) 位于 00:14:2a:44:55:72 [ether] 在 eth0
? (10.91.11.73) 位于 00:1e:ec:77:95:9d [ether] 在 eth0
? (10.91.255.254) 位于 00:14:2a:44:55:72 [ether] 在 eth0
看,10.91.11.58与网关有相同的mac地址(实际是10.91.11.58对寻找10.91.255.254的mac地址的广播进行相应,并且欺骗广播,说10.91.255.254的mac地址是 00:14:2a:44:55:72,于是本应发给10.91.255.254的包发给了58,正常的网络通信就受到影响了)~判断58可能中了arp攻击病毒~
查看网关的真实MAC地址:
chao@redcat:~$ arping 10.91.255.254
WARNING: interface is ignored: Operation not permitted
ARPING 10.91.255.254 from 10.91.11.150 eth0
Unicast reply from 10.91.255.254 [00:D0:03:C5:9B:FC] 3.525ms
Unicast reply from 10.91.255.254 [00:D0:03:C5:9B:FC] 0.878ms
Unicast reply from 10.91.255.254 [00:14:2A:44:55:72] 59.480ms
Unicast reply from 10.91.255.254 [00:14:2A:44:55:72] 59.660ms
Unicast reply from 10.91.255.254 [00:14:2A:44:55:72] 51.857ms
Unicast reply from 10.91.255.254 [00:14:2A:44:55:72] 56.920ms
Unicast reply from 10.91.255.254 [00:14:2A:44:55:72] 54.042ms
Unicast reply from 10.91.255.254 [00:14:2A:44:55:72] 55.230ms
^CSent 18 probes (1 broadcast(s))
Received 8 response(s)
看,我们受到的响应中有网关正确的响应(第一行),也有其他主机的arp欺骗响应(第三行后面都是~)
解决方案:对每台主机进行IP和MAC地址静态绑定是防止ARP欺骗最根本的办法。
1、清空ARP缓存 arp -d 网关IP
2、找到网关真实MAC地址 arping 网关IP
3、绑定MAC地址 arp -s 网关IP 网关真实MAC
如果网络中常有此问题,则可:
1、如下命令建立 /ect/ip-mac 文件
echo '网关IP地址 网关MAC地址' >/ect/ip-mac
通过下面的命令查看文件是否写的正确
more /ect/ip-mac
2、arp -f /ect/ip-mac 加载静态绑定arp记录
3、如果想开机自动绑定
echo 'arp -f /ect/ip-mac' >> /etc/rc.d/rc.local