Flags Mask:记录标志,"C"表示arp高速缓存中的条目,"M"表示静态的arp条目
实际上,如果"arp -s"设置成功之后,会增加一个Flags为"CM"的表项,有些系统静态条目不会因为ARP响应而更新,而高速缓存中的条目会因此而更新。如果想要手工设置没有"M",那么用"temp"选项,例如:"arp -s IP MAC temp"类似的命令,实践发现,如果已经设置过IP了,那么再设置也不会改变其Flags。
说明:
机房做网络改造,需要替换原来内外网的交换机。服务器正好在要替换交换机的那几个柜。替换前机房问我们有没有做mac绑定。这个绑定主要是指服务器方面有没有指定网关的静态mac地址。因为要更换交换机,而局域网传输数据又是通过mac来传输的。如果有绑定的话,服务器没办法学习新交换机的mac地址,数据仍然发送到旧的网关mac地址去,这样网络是不通的!
因此机房更换交换机要确认下我们服务器有没有绑定网关的mac地址
实现:
首先,做两个对比试验:
# arp -a
? (192.168.8.241) at 00:15:58:A2:13: D0 [ether] on eth0
? (192.168.8.1) at 00:15:C5:E1: D1:58 [ether] on eth0
# arp -s 192.168.8.1 00:15:C5:E1: D1:58
# arp -a
? (192.168.8.241) at 00:15:58:A2:13: D0 [ether] on eth0
? (192.168.8.1) at 00:15:C5:E1: D1:58 [ether] PERM on eth0
发现没有?多了一个PERM!!那就是新增加的静态mac绑定
或者
# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.8.241 0x1 0x2 00:15:58:A2:13: D0 * eth0
192.168.8.1 0x1 0x6 00:15:C5:E1: D1:58 * eth0
# arp -s 192.168.8.241 00:15:58:A2:13: D0
# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.8.241 0x1 0x6 00:15:58:A2:13: D0 * eth0
192.168.8.1 0x1 0x6 00:15:C5:E1: D1:58 * eth0
发现没有?Flags改变了! 所以我们可以用两种方法找到arp的静态绑定地址:
arp -a | grep PERM或者cat /proc/net/arp | grep 0×6,但建议用后者比较快。
==============================
http://os.51cto.com/art/201006/206905.htm
Linux Arp命令危害:Linux Arp命令危害极大,有的病毒就使用ARP欺骗,不仅影响自身机器,同时也会影响同网段的其它机器,将其它机器的HTTP数据包里加入病毒代码。
1、代码例子如:<html><iframe src=http://病毒链接.htm width=0 height=0></iframe>这种病毒危害非常大!即使你机器的安全性做得很好,可是没办法保证同网段的其它机器安全没有问题!
解决办法:在网关和本机上双向绑定IP和MAC地址,以防止ARP欺骗。
2、Linux Arp命令约定
A、网关上已经对下面所带的机器作了绑定。网关IP:192.168.1.1 MAC:00:02:B3:38:08:62
B、要进行绑定的Linux主机IP:192.168.1.2 MAC:00:04:61:9A:8D:B2
3、Linux Arp命令绑定步骤
1、先使用arp和arp -a查看一下当前ARP缓存列表
- [root@ftpsvr ~]# arp
- Address HWtype HWaddress Flags Mask iface
- 192.168.1.234 ether 00:04:61:AE:11:2B C eth0
- 192.168.1.145 ether 00:13:20:E9:11:04 C eth0
- 192.168.1.1 ether 00:02:B3:38:08:62 C eth0
Linux Arp命令说明:
Address:主机的IP地址
Hwtype:主机的硬件类型
Hwaddress:主机的硬件地址
Flags Mask:记录标志,"C"表示arp高速缓存中的条目,"M"表示静态的arp条目。
[root@ftpsvr ~]# arp -a
? (192.168.1.234) at 00:04:61:AE:11:2B [ether] on eth0
? (192.168.1.1) at 00:16:76:22:23:86 [ether] on eth0
2、新建一个静态的mac-->ip对应表文件:ip-mac,将要绑定的IP和MAC地下写入此文件,格式为 ip mac。
[root@ftpsvr ~]# echo '192.168.1.1 00:02:B3:38:08:62 ' > /etc/ip-mac
[root@ftpsvr ~]# more /etc/ip-mac
192.168.1.1 00:02:B3:38:08:62
3、设置开机自动绑定
[root@ftpsvr ~]# echo 'arp -f /etc/ip-mac ' >> /etc/rc.d/rc.local
4、手动执行一下绑定
[root@ftpsvr ~]# arp -f /etc/ip-mac
5、确认绑定是否成功
- [root@ftpsvr ~]# arp
- Address HWtype HWaddress Flags Mask iface
- 192.168.0.205 ether 00:02:B3:A7:85:48 C eth0
- 192.168.1.234 ether 00:04:61:AE:11:2B C eth0
- 192.168.1.1 ether 00:02:B3:38:08:62 CM eth0
- [root@ftpsvr ~]# arp -a
- ? (192.168.0.205) at 00:02:B3:A7:85:48 [ether] on eth0
- ? (192.168.1.234) at 00:04:61:AE:11:2B [ether] on eth0
- ? (192.168.1.1) at 00:02:B3:38:08:62 [ether] PERM on eth0
从绑定前后的ARP缓存列表中,可以看到网关(192.168.1.1)的记录标志已经改变,说明绑定成功。
http://blog.sina.com.cn/s/blog_a39910330101f0sd.html
Linux下ARP设定
在公司处理了一些ARP的问题,然后就想到了linux下如何实现的问题!于是上网查了一下资料,原来也挺简单.整理一下别人的步骤放到这里,方便查询.
有些系统中有这样的需求,希望内部网中的某几个IP地址连接互联网,而又希望这些IP地址不被非法用户盗用。可以通过下面的解决办法实现:
首先使用ipchains或者iptables来设定只允许合法的IP地址连出。
对于合法IP建立IP/Mac捆绑。要讨论这个问题我们首先需要了解ARP协议的工作原理,arp协议是地址解析协议(Address Resolution Protocol)的缩写,其作用及工作原理如下:
在底层的网络通信中,两个节点想要相互通信,必须先要知道源与目标的MAC地址。为了让系统能快速地找到一个远程节点的MAC地址,每一个本地的内核都保存有一个即时的查询表(称为ARP缓存)。ARP中有影射远程主机的IP地址到其对应的MAC地址的一个列表。地址解析协议(ARP)缓存是一个常驻内存的数据结构,其中的内容是由本地系统的内核来管理和维护的。默认的情况下,ARP缓存中保留有最近十分钟本地系统与之通信的节点的IP地址(和对应的MAC地址)。
当一个远程主机的MAC地址存在于本地主机的ARP 缓存中,转换远程节点的IP地址为MAC地址不会遇到问题。然而在许多情况下,远程主机的MAC地址并不存在于本地的ARP缓存中,系统会怎么处理呢?在知道一个远程主机的IP地址,但是MAC地址不在本地的ARP缓存中的时候,以下的过程用来获取远程节点的MAC地址:本地主机发送一个广播包给网络中的所有的节点,询问是否有对应的IP地址。一个节点(只有一个)会回答这个ARP广播信息。在回应的信息包里就会包含有这个远程主机的MAC地址。在收到这个返回包后,本地节点就会在本地ARP缓存中记录远程节点的MAC地址。
如果我们将IP/MAC对应关系建立为固定的,也就是对那些合法IP地址建立静态的MAC对应关系,那么即使非法用户盗用了IP地址linux路由器在回应这些IP发出的连接请求时则不会通过arp协议询问其mac地址而是使用Linux建立的静态MAC地址、发出应答数据这样盗用IP者则不会得到应答数据从而不能使用网络服务。
建立静态IP/MAC捆绑的方法是:建立/etc/ethers文件,其中包含正确的IP/MAC对应关系,格式如下:
192.168.2.32 08:00:4E:B0:24:47
然后再/etc/rc.d/rc.local最后添加:arp -f即可
2.4内核的iptables可以对IP和Mac同时进行限定,使用该功能对合法IP的规则同时限定IP地址和Mac地址即可。
一、背景1、网关IP:192.168.1.1 MAC:00:02:B3:38:08:622、要进行绑定的Linux主机IP:192.168.1.2 MAC:00:04:61:9A:8D:B2
二、绑定步骤1、先使用arp和arp -a查看一下当前ARP缓存列表[root@ftpsvr ~]# arpAddress HWtype HWaddress Flags Mask Iface192.168.1.234 ether 00:04:61:AE:11:2B C eth0192.168.1.145 ether 00:13:20:E9:11:04 C eth0192.168.1.1 ether 00:02:B3:38:08:62 C eth0
说明:Address:主机的IP地址Hwtype:主机的硬件类型Hwaddress:主机的硬件地址Flags Mask:记录标志,"C"表示arp高速缓存中的条目,"M"表示静态的arp条目。
[root@ftpsvr ~]# arp -a? (192.168.1.234) at 00:04:61:AE:11:2B [ether] on eth0? (192.168.1.1) at 00:16:76:22:23:86 [ether] on eth0
2、新建一个静态的mac-->ip对应表文件:ip-mac,将要绑定的IP和MAC地址写入此文件,格式为 ip-mac。[root@ftpsvr ~]# echo '192.168.1.1 00:02:B3:38:08:62 ' > /etc/ip-mac[root@ftpsvr ~]# more /etc/ip-mac192.168.1.1 00:02:B3:38:08:62
3、设置开机自动绑定[root@ftpsvr ~]# echo 'arp -f /etc/ip-mac ' >> /etc/rc.d/rc.local
4、手动执行一下绑定[root@ftpsvr ~]# arp -f /etc/ip-mac
5、确认绑定是否成功[root@ftpsvr ~]# arpAddress HWtype HWaddress Flags Mask Iface192.168.0.205 ether 00:02:B3:A7:85:48 C eth0192.168.1.234 ether 00:04:61:AE:11:2B C eth0192.168.1.1 ether 00:02:B3:38:08:62 CM eth0
[root@ftpsvr ~]# arp -a? (192.168.0.205) at 00:02:B3:A7:85:48 [ether] on eth0? (192.168.1.234) at 00:04:61:AE:11:2B [ether] on eth0? (192.168.1.1) at 00:02:B3:38:08:62 [ether] PERM on eth0
从绑定前后的ARP缓存列表中,可以看到网关(192.168.1.1)的记录标志已经改变,说明绑定成功。
三、添加信任的Windows主机(192.168.1.10)1、Linux主机(192.168.1.2)上操作[root@ftpsvr ~]# echo '192.168.1.10 00:04:61:AE:09:14' >> /etc/ip-mac[root@ftpsvr ~]# arp -f /etc/ip-mac
2、Windows主机(192.168.1.10)上操作1)清除ARP缓存C:\Documents and Settings\Administrator>arp -d2)绑定Linux主机的IP和MAC地址C:\Documents and Settings\Administrator>arp -s 192.168.1.2 00-04-61-9A-8D-B2
你可以将上面2个步骤写在一个BAT(批处理)文件中,这样做的好处是,今后如果要增加其它机器的绑定,只需维护这个文件就可以了。例:@echo offarp -darp -s 192.168.1.2 00-04-61-9A-8D-B2exit
注意:Linux和Widows上的MAC地址格式不同。Linux表示为:AA:AA:AA:AA:AA:AA,Windows表示为:AA-AA-AA-AA-AA
2FAQ
1. 什么是ARP?
ARP (Address Resolution Protocol) 是个地址解析协议。最直白的说法是:在IP-以太网中,当一个上层协议要发包时,有了节点的IP地址,ARP就能提供该节点的MAC地址。
2. 为什么要有ARP?
OSI模式把网络工作分为七层,彼此不直接打交道,只通过接口(layer interface).IP地址在第三层,MAC地址在第二层。协议在发送数据包时,得先封装第三层(IP地址),第二层(MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其MAC地址,又不能跨第二、三层,所以得用ARP的服务。
3. 什么是ARP cache?
ARP cache 是个用来储存(IP,MAC)地址的缓冲区。当ARP被询问一个已知IP地址节点的MAC地址时,先在ARP cache 查看,若存在,就直接返回MAC地址,若不存在,才发送ARP request向局域网查询。
4. ARP 有什么命令行?
常用的包括:(格式因操作系统、路由器而异,但作用类似)- 显示ARP cache: show arp; arp -a - 清除ARP cache: arp -d;clear arp。
3举例
计算机A的IP为192.168.1.1,MAC地址为00-11-22-33-44-01;
计算机B的IP为192.168.1.2,MAC地址为00-11-22-33-44-02;
根据上面的所讲的原理,我们简单说明这个过程:A要和B通讯,A就需要知道B的以太网地址,于是A发送一个ARP请求广播(谁是192.168.1.2 ,请告诉192.168.1.1),当B收到该广播,就检查自己,结果发现和自己的一致,然后就向A发送一个ARP单播应答
4原理
在TCP/IP协议中,A给B发送IP包,在报头中需要填写B的IP为目标地址,但这个IP包在以太网上传输的时候,还需要进行一次以太包的封装,在这个以太包中,目标地址就是B的MAC地址。
计算机A是如何得知B的MAC地址的呢?解决问题的关键就在于ARP协议。
在A不知道B的MAC地址的情况下,A就广播一个ARP请求包,请求包中填有B的IP(192.168.1.2),以太网中的所有计算机都会接收这个请求,而正常的情况下只有B会给出ARP应答包,包中就填充上了B的MAC地址,并回复给A。
A得到ARP应答后,将B的MAC地址放入本机缓存,便于下次使用。
本机MAC缓存是有生存期的,生存期结束后,将再次重复上面的过程。
ARP协议并不只在发送了ARP请求才接收ARP应答。当计算机接收到ARP应答数据包的时候,就会对本地的ARP缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。因此,当局域网中的某台机器B向A发送一个自己伪造的ARP应答,而如果这个应答是B冒充C伪造来的,即IP地址为C的IP,而MAC地址是伪造的,则当A接收到B伪造的ARP应答后,就会更新本地的ARP缓存,这样在A看来C的IP地址没有变,而它的MAC地址已经不是原来那个了。由于局域网的网络流通不是根据IP地址进行,而是按照MAC地址进行传输。所以,那个伪造出来的MAC地址在A上被改变成一个不存在的MAC地址,这样就会造成网络不通,导致A不能Ping通C!这就是一个简单的ARP欺骗。
5显示修改
“地址解析协议 (ARP)”缓存中的项目。ARP缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则 arp 命令将显示帮助信息。
windows中arp命令详解
语法
arp[-a [InetAddr] [-N If_Addr]] [-g [InetAddr] [-N If_Addr]] [-d InetAddr [If_Addr]] [-s InetAddr EtherAddr [If_Addr]]
参数
-a[ InetAddr] [ -N If_Addr]
显示所有接口的当前 ARP缓存表。要显示特定 IP 地址的 ARP缓存项,请使用带有 InetAddr 参数的 arp -a,此处的 InetAddr 代表 IP 地址。如果未指定 InetAddr,则使用第一个适用的接口。要显示特定接口的 ARP缓存表,请将 -N If_Addr 参数与 -a 参数一起使用,此处的 If_Addr 代表指派给该接口的 IP 地址。-N 参数区分大小写。
-g[ InetAddr] [ -N If_Addr]
与 -a 相同。
-d InetAddr [If_Addr]
删除指定的 IP 地址项,此处的 InetAddr 代表 IP 地址。对于指定的接口,要删除表中的某项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表指派给该接口的 IP 地址。要删除所有项,请使用星号 (*)通配符代替 InetAddr。
-s InetAddr EtherAddr [IfaceAddr]
向 ARP缓存添加可将 IP 地址 InetAddr 解析成物理地址EtherAddr 的静态项。要向指定接口的表添加静态ARP缓存项,请使用 If_Addr 参数,此处的 If_Addr 代表指派给该接口的 IP 地址。
/?
在命令提示符下显示帮助。
注释
InetAddr 和 If_Addr 的 IP 地址用带圆点的十进制记数法表示。
EtherAddr 的物理地址由六个字节组成,这些字节用十六进制记数法表示并且用连字符隔开(比如,00-AA-00-4F-2A-9C)。
通过 -s 参数添加的项属于静态项,它们不会 ARP缓存超时。如果终止 TCP/IP 协议后再启动,这些项会被删除。要创建永久的静态 ARP缓存项,请将适当的 arp 命令置于批处理文件中,并使用“任务计划”在启动时运行该批处理文件。
示例
要显示所有接口的 ARP缓存表,可键入:
arp -a
对于指派的 IP 地址为 10.0.0.99 的接口,要显示其 ARP缓存表,可键入:
arp -a -N 10.0.0.99
要添加将 IP 地址 10.0.0.80 解析成物理地址00-AA-00-4F-2A-9C 的静态 ARP缓存项,可键入:
arp -s 10.0.0.80 00-AA-00-4F-2A-9C
------------------------------
http://blog.chinaunix.net/uid-9525959-id-3318814.html
arp
[功能]
管理系统的arp缓存。
[描述]
用来管理系统的arp缓存,常用的命令包括:
arp: 显示所有的表项。
arp -d address: 删除一个arp表项。
arp -s address hw_addr: 设置一个arp表项。
常用参数:
-a 使用bsd形式输出。(没有固定的列)
-n 使用数字形式显示ip地址,而不是默认的主机名形式。
-D 不是指定硬件地址而是指定一个网络接口的名称,表项将使用相应接口的MAC地址。一般用来设置ARP代理。
-H type, --hw-type type: 指定检查特定类型的表项,默认type为ether,还有其他类型。
-i If, --device If: 指定设置哪个网络接口上面的arp表项。
-f filename: 作用同'-s',不过它通过文件来指定IP地址和MAC地址的绑定。文件中每行分别是主机和MAC,中间以空格分割。如果没有指定文件名称,则使用/etc/ethers文件。
以下例子中,用主机名称的地方也可以用点分10进制的ip地址来表示。另外输出结果中用"C"表示ARP缓存内容,"M"表示永久性表项,"P"表示公共的表项。
[举例]
*查看arp表:
#arp
Address HWtype HWaddress Flags Mask Iface
hostname1 ether 44:37:e6:97:92:16 C eth0
hostname2 ether 00:0f:fe:43:28:c5 C eth0
hostname3 ether 00:1d:92:e3:d5:ee C eth0
hostname4 ether 00:1d:0f:11:f2:a5 C eth0
这里,Flags中的"C"代表此表项目是高速缓存中的内容,高速缓存中的内容过一段时间(一般20分钟)会清空,而"M"则表示静态表项,静态表项的内容不会过一段时间被清空。
*查看arp表,并且用ip显示而不是主机名称:
# arp -n
Address HWtype HWaddress Flags Mask Iface
10.1.10.254 ether 00:1d:92:e3:d5:ee C eth0
10.1.10.253 ether 44:37:e6:9b:2c:53 C eth0
10.1.10.178 ether 00:1b:78:83:d9:85 C eth0
10.1.10.119 ether 00:1d:0f:11:f2:a5 C eth0
这里,对于上面的条目,假设当我们"ping 10.1.10.1"通过之后,arp中会多一条"10.1.10.1"相关的信息。
*查看arp表,显示主机名称和ip:
#arp -a
ns.amazon.esdl.others.com (10.1.10.254) at 00:1d:92:e3:d5:ee [ether] on eth0
server.amazon.eadl.others.com (10.1.10.253) at 44:37:e6:9b:2c:53 [ether] on eth0
D2-baijh.amazon.esdl.others.com (10.1.10.178) at 00:1b:78:83:d9:85 [ether] on eth0
aplab.local (10.1.10.119) at 00:1d:0f:11:f2:a5 [ether] on eth0
*添加一对IP和MAC地址的绑定:
# arp -s 10.1.1.1 00:11:22:33:44:55:66
这里,如果网络无法达到,那么会报告错误,具体如下:
root@quietheart:/home/lv-k# arp -s 10.1.1.1 00:11:22:33:44:55:66
SIOCSARP: Network is unreachable
root@quietheart:/home/lv-k# arp -n
Address HWtype HWaddress Flags Mask Iface
10.1.10.254 ether 00:1d:92:e3:d5:ee C eth0
10.1.10.253 ether 44:37:e6:9b:2c:53 C eth0
10.1.10.178 ether 00:1b:78:83:d9:85 C eth0
10.1.10.119 ether 00:1d:0f:11:f2:a5 C eth0
实际上,如果"arp -s"设置成功之后,会增加一个Flags为"CM"的表项,有些系统静态条目不会因为ARP响应而更新,而高速缓存中的条目会因此而更新。如果想要手工设置没有"M",那么用"temp"选项,例如:"arp -s IP MAC temp"类似的命令,实践发现,如果已经设置过IP了,那么再设置也不会改变其Flags。
*删除一个arp表项:
# arp -d 10.1.10.118
这里,删除之后只是硬件地址没有了,如下:
root@quietheart:~# arp -n
Address HWtype HWaddress Flags Mask Iface
10.1.10.118 ether 00:25:9c:c2:79:90 CM eth0
10.1.10.254 ether 00:1d:92:e3:d5:ee C eth0
root@quietheart:~# arp -d 10.1.10.118
root@quietheart:~# arp -n
Address HWtype HWaddress Flags Mask Iface
10.1.10.118 (incomplete) eth0
10.1.10.254 ether 00:1d:92:e3:d5:ee C
*删除eth0上面的一个arp表项:
# arp -i eth0 -d 10.1.10.118
[其它]
*指定回复的MAC地址:
#/usr/sbin/arp -i eth0 -Ds 10.0.0.2 eth1 pub
当eth0收到IP地址为10.0.0.2的请求时,将会用eth1的MAC地址回答。
例如,双网卡机器运行这条命令:
/usr/sbin/arp -i eth0 -Ds 10.0.0.2 eth1 pub
会多一项:
10.0.0.2 * <from_interface> MP eth0