Aug 292007
 

这两天办公室不时有人机器中毒,结果整个内部局域网经常被ARP Poison充斥,导致网络瞬断,于是不得不想办法来实现静态IP-Mac地址绑定。然而在我用的Windows Server 2008 beta3的机器上,却碰到了一个很奇怪的问题。

在本机键入如下命令,这个IP是我局域网网关的地址,MAC为其内网网卡的MAC:

C:\Windows\system32>arp -s 10.0.0.254  00-11-d8-64-6b-bc

结果失败,错误提示为:

The ARP entry addition failed: 5

放狗搜了一下这个错误提示,发现这个提示应该为权限不足。见鬼了,明明用的是administrators组的用户,却权限不够?于是把故障嫌疑定位到UAC上去,发现无论是怎样调整,甚至关掉UAC,都还是同样的结果。同时用Process Explorer检查发现我的CMD进程有足够权限执行此项配置,这样也断定不可能是用户权限问题,简直是见鬼了。

然后就是打开安全审核,拼了命查找各项安全日志,无奈发现不了任何蛛丝马迹。回头一想,貌似命令行下的一些个命令都不生成安全审计记录的,这次彻底郁闷了。

翻着翻着资料突然看到了netsh这个工具,这玩艺是MS建议以后再命令行配置Windows网络协议栈的一个类似IOS的新工具,死马当活马医,试试看这玩艺能不能操作ARP表,简单看了一下帮助,于是弄出来这么个命令:

C:\Windows\system32>netsh -c “interface ipv4″ add neighbors 10  “10.0.0.254″  ”00-11-d8-64-6b-bc”

其中数字10为我本地网卡连接的index,这个从show interface可以看到。或者直接替换成网卡名称也可以,就是”Local Area Connection”了。

结果这个命令竟然成功了,运行之后再运行arp -a可以看到static的ARP表项已经按照预想的一样创建成功。也就是说,前面使用arp -s添加失败根本不是权限不够的原因,而是其他原因了。具体什么原因呢?我个人猜想恐怕是内核网络部分一些数据结构或者API的变更,同时arp.exe这个工具没有跟随更新导致的broken问题吧。

更诡异的在后面,虽然我目的达到了,但不小甘心又使用arp -s修改了刚添加的静态表项,结果发现竟然修改成功-_-b,然后又继续测试其他情况,发现如下结论:

1,目前ARP表中不存在对应IP的记录,可以用arp -s添加新的静态IP-Mac绑定。

2,目前ARP表中已经存在对应IP的static表项的记录,可以用arp -s修改为新的静态IP-Mac绑定。

3,目前ARP表中已经存在对应IP的dynamic表项的记录,使用arp -s添加新的静态记录时会出现错误:The ARP entry addition failed: 5

总之这个版本的Windows附带的这个arp.exe一定有问题,改天找找看有没有联系方式能否反映给MS开发部门。

  9 Responses to “Windows Server 2008无法使用arp命令添加静态MAC绑定”

  1. [...] 这里有篇文章反映了Windows Server 2008下的相同问题,毫无疑问的,它和Vista使用的是相同的内核。 Tags: ARP, bug, IP, MAC, netsh, Vista, Windows, 微软 [...]

  2. 有没有试过先清除一下arp 动态表呢(dynamic) arp -d
    然后再绑一下试试
    看你的文章,我倒觉得应该是windows对arp.exe的使用更严谨了.怕人恶意绑定吧
    在系统已有(dynamic)表之下不可绑,在无(dynamic)可绑.因为(dynamic)是网络连接到网关机和别的什么终端自动由系统缓存的表.
    而static静态表肯定是由人工输入的当然允许administrator用户自由修改
    我还没用过2008 但从你的三条问题,我觉得应该这样理解

  3. sorry yedsky,不知为什么sk2把你的comment当成spam了,直到现在才手工给救出来.
    关于这个问题,arp -d我试过了,我当时也猜想可能是有这方面的原因,但关键在于绑定网关这里,因为只要协议栈建立起,就避免不了要进行搜寻网关的动作,因此arp -d一删除立刻又会重新添加,因此没有办法删除网关的dynmic绑定,也就没有办法通过arp -s添加.
    另外Vista确认也有此问题.

  4. 那么。。Vista下怎么使用呢
    我照搬了下,,貌似netsh也不是完全一样的版本。。

  5. 我在vista下用arp -s也不能绑定,清了arp也一样。所以用netsh命令就可以了。但是我发现netsh绑定以后重启似乎不会消失。现在服务端变了mac,弄得很麻烦,每次都要arp -d清了arp缓存才可以练到server 请问有没有解决办法??请用邮件联系 谢谢

  6. 好菜的方式 你这个只是保护了 win2008这台主机
    绑定arp应该是在 路由里绑定 mac 对应的ip 并限止非表内计算机连接 这才可防掉 arp!

  7. 你说的没错,不过我想我还没高尚到为了自保而想去消灭整个世界的战争.

  8. I do not even know the way I finished up right here,
    however I believed this post was great. I don’t know
    who you are but certainly you are going to a well-known blogger in the event
    you are not already. Cheers!

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>