首先说一下什么是ARP。如果你在Windows 9x/ME/XP/2003或者Unix等操作系统的命令模式下输入arp -a,你的输出看起来应该是这样的:
Interface: xxx.xxx.xxx.xxx
Internet Address Physical Address Type
xxx.xxx.xxx.xxx 00-00-93-64-48-d2 dynamic
xxx.xxx.xxx.xxx 00-00-b4-52-43-10 dynamic
...... ......... ....
这里第一列显示的是ip地址,第二列显示的是和ip地址对应的网络接口卡的硬件地址(MAC),第三列是该ip和mac的对应关系类型。
可见,arp是一种将ip转化成以ip对应的网卡的物理地址的一种协议,或者说ARP协议是一种将ip地址转化成MAC地址的一种协议。它靠维持在内存中保存的一张表来使ip得以在网络上被目标机器应答。
为什么要将ip转化成mac呢?简单的说,这是因为在tcp网络环境下,一个ip包走到哪里,要怎么走是靠路由表定义。但是,当ip包到达该网络后,哪台机器响应这个ip包却是靠该ip包中所包含的mac地址来识别。也就是说,只有机器的mac地址和该ip包中的mac地址相同的机器才会应答这个ip包。因为在网络中,每一台主机都会有发送ip包的时候。所以,在每台主机的内存中,都有一个arp--> mac的转换表。通常是动态的转换表(注意在路由中,该arp表可以被设置成静态)。也就是说,该对应表会被主机在需要的时候刷新。这是由于以太网在子网层上的传输是靠48位的mac地址而决定的。
通常主机在发送一个ip包之前,它要到该转换表中寻找和ip包对应的mac地址。如果没有找到,该主机就发送一个ARP广播包,看起来象这样子:
"我是主机xxx.xxx.xxx.xxx , mac是xxxxxxxxxxx ,ip为xxx.xxx.xxx.xx1的主机请告之你的mac来"
ip为xxx.xxx.xxx.xx1的主机响应这个广播,应答ARP广播为:
"我是xxx.xxx.xxx.xx1,我的mac为xxxxxxxxxx2"
于是,主机刷新自己的ARP缓存,然后发出该ip包。
明白了ARP的基本原理之后,就知道这两条命令的意思了:
arp -a是显示主机系统当前的ARP缓存中的内容。
arp -s是将某个IP地址(可以是一个主机的IP地址,也可以是一个路由器的IP地址)与其相对应的mac地址做静态的“绑定”,免得被刷新掉。(这可以作为防止ARP欺骗的一种方法。)
“arp –s w.x.y.z aa-bb-cc-dd-ee-ff”命令来添加静态ARP实现ARP绑定。其中w.x.y.z代表路由器的IP地址,aa-bb-cc-dd-ee-ff代表路由器的MAC地址。
例如:arp -s 192.168.1.1 00-02-b3-3c-16-95
再输入“arp -a”就可以看到刚才添加的静态ARP条目了。
为了不必每次重启电脑后都要重新输入上面的命令来实现防止ARP欺骗,可以新建一个批处理文件如arp_bind.bat。在里面加入我们刚才的命令:
arp -s 192.168.1.1 00-02-b3-3c-16-95
保存就可以了,以后可以通过双击它来执行这条命令,还可以把它放置到系统的启动目录下来实现启动时自己执行。打开电脑“开始”->“程序”,双击“启动”打开启动的文件夹目录,把刚才建立的arp_bind.bat复制到里面去。这样每次重启都会执行ARP绑定命令,
通过这些设置,就可以很好的防止ARP攻击了。
将IP地址和网卡上面的MAC地址绑定.这样,可以防止中ARP病毒.局域网中某台机器的掉线问题.或是某几台机器掉线.或是IP冲突等问题.都是ARP病毒在做怪.