首先,做两个对比试验:
root@firewall root]# arp -a
? (192.168.100.83) at 00:15:58:A2:13: D0 [ether] on eth0
? (192.168.100.81) at 00:15:C5:E1:D1:58 [ether] on eth0
[root@firewall bin]# arp -s 192.168.100.81 00:15:C5:E1:D1:58
[root@firewall bin]# arp -a
? (192.168.100.83) at 00:15:58:A2:13: D0 [ether] on eth0
? (192.168.100.81) at 00:15:C5:E1: D1:58 [ether] PERM on eth0
发现没有?多了一个PERM!
或者
[root@firewall bin]# cat /proc/net/arp
IP address HWtype Flags HWaddress Mask Device
192.168.100.83 0x1 0x2 00:15:58:A2:13:D0 * eth0
192.168.100.81 0x1 0x6 00:15:C5:E1:D1:58 * eth0
[root@firewall bin]# arp -s 192.168.100.83 00:15:58:A2:13:D0
[root@firewall bin]# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.100.83 0x1 0x6 00:15:58:A2:13:D0 * eth0
192.168.100.81 0x1 0x6 00:15:C5:E1: D1:58 * eth0
发现没有?Flags改变了!
所以我们可以用两种方法找到arp的静态绑定地址:
#arp -a | grep PERM 或者
#cat /proc/net/arp | grep 0x6
但建议用后者比较快。
利用静态ARP表进行控制
我们知道,ARP(Address Resolution Protocol,地址转换协议)被当作底层协议,用于IP地址到物理地址的转换。在以太网中,所有对IP的访问最终都转化为对网卡MAC地址的访问。
不妨设想一下,如果主机A的ARP列表中,到主机B的IP地址与MAC地址对应不正确,由A发往B数据包就会发向错误的MAC地址,当然无法顺利到达B,结 果是A与B根本不能进行通信。Linux可以通过arp命令控制ARP转换,即IP到MAC的转换。因此,也能利用这一功能对用户MAC地址进行匹配。下面我们就来看看arp命令的用法。
输入arp将显示当前所有ARP转换记录,类似于这样:
Address HWtype HWaddress Flags Mask Iface
www.baidu.com ether 00:06:29:57:16:F5 C eth0
218.200.80.177 ether 00:01:30:F4:32:40 C eth1
192.168.100.25 ether 00:02:1E:F1:92:C2 C eth0
由此可以看到,当前系统保留的IP地址与MAC地址一一对应,并指明了硬件类型(Hwtype)和通信所使用的接口(Iface)。不过这些都是动态生成的,无需手工干预。我们要做的恰恰是手工干预这一过程。
我们需要用到arp命令的另一重要功能,就是手工更改这一对应关系。此外,该命令还可以读取文本文件中的ARP记录,其默认文件是/etc/ethers。也就是说,当输入ARP-f的时候,系统就会读取/etc/ethers这个文件,并以其中的项目取代系统当前的ARP记录。假设/etc/ethers 文件内容如下:
192.168.100.25 00:02:01:50:BB:53
然后执行命令arp –f
这时,我们查看系统ARP表,会发现无论192.168.100.25原来对应的MAC地址是什么,都会被新的所取代:
www.baidu.com ether 00:06:29:57:16:F5 C eth0
218.200.80.177 ether 00:01:30:F4:32:40 C eth1
192.168.100.25 ether 00:02:01:50:BB:53 C eth0
此时,本机发往192.168.100.25的数据包目标MAC地址将由原来的00:02:1E:F1:92:C2改为00:02:01:50:BB:53 显然,如果192.168.100.25所在网卡的MAC地址并非00:02:01:50:BB:53,数据包就无法到达正确的目的地,那么它们也就无法通信了,这样也达到了识别非法用户的目的。
当然,控制MAC地址的方法还不止这些,例如可以利用交换机的端口管理功能识别用户。根据交换机的原理,它是直接将数据发送到相应端口,那么就必须保有一个数据库,包含所有端口所连网卡的MAC地址,由此可见,控制每个端口使用的MAC地址理论上是完全可行的。大部分中高端交换机如3Com SuperStack系列等,都具有这种功能。具体操作与交换机型号有关,这里就不赘述。
最后,提醒一下,MAC地址控制并非绝对保险。正如这个世界上没有绝对解不开的密码一样,所谓安全都是相对于特定的环境而言。现在,很多网卡都支持MAC地址的软件修改,Linux和Windows本身也都有办法修改这一物理地址。不过由于这种方式相对稳定,摒弃了繁琐的客户端设置,对用户完全透明,而且具备很强的可操作性,所以在某种程度上说是安全的。
我们先看一下linux下的arp命令(如果开始arp表中的内容为空的话,需要先对某台主机进行一个连接,例如ping一下目标主机来产生一个arp项
Linux Arp命令显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v] -a 通过询问当前协议数据,显示当前ARP项。如果指定inet_addr,则只显示指定计算机的IP地址和物理地址。如果不止一个网络接口使用ARP,则显示每个ARP表的项。
-g 与-a相同。
-v 在详细模式下显示当前ARP项。所有无效项和环回接口上的项都将显示。
inet_addr 指定Internet地址(IP地址)。
-N if_addr 显示if_addr指定的网络接口的ARP项。
-d 删除inet_addr指定的主机。inet_addr可以是通配符*,以删除所有主机。
-s 添加主机并且将Internet地址inet_addr与物理地址eth_addr相关联。物理地址是用连字符分隔的6个十六进制字节。该项是永久的。
eth_addr 指定物理地址。
if_addr 如果存在,此项指定地址转换表应修改的接口的 Internet 地址。如果不存在,则使用第一个适用的接口。 示例:
添加静态项。这个很有用,特别是局域网中中了arp病毒以后
# arp -s 123.253.68.209 00:19:56:6F:87:D2
# arp -a .... 显示 ARP 表。 但是arp -s设置的静态项在用户登出之后或重起之后会失效,如果想要任何时候都不失效,可以将ip和mac的对应关系写入arp命令默认的配置文件/etc/ethers中 例如:
引用
root@ubuntu:/# vi /etc/ethers
211.144.68.254 00:12:D9:32:BF:44
写入之后执行下面的命令就好了 引用
arp -f /etc/ethers
为保证重起之后绑定仍然有效,需要把上述命令写入/etc/ethers ARP(Address Resolution Protocol),或称地址解析协议。 本地机向"某个IP地址 -- 目标机IP地址"发送数据时,先查找本地的ARP表,如果在ARP表中找到"目标机IP地址"的ARP表项,(网络协议)将把"目标机IP地址"对应的"MAC地址"放到MAC包的"目的MAC地址字段"直接发送出去;
如果在ARP表没有找到"目标机IP地址"的ARP表项,则向局域网发送广播ARP包("目的MAC地址字段" == FF:FF:FF:FF:FF:FF),目标机将向本地机回复ARP包(包含目标机的MAC地址)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。