在论坛的电脑问题应用交流区,经常看到有朋友问:网速怎么突然变慢啦,防火墙提示遇到Arp攻击啦,网络里有人用网络剪刀手或者网络执法官程序,怎么对付啦等等问题。在排除了路由器的原因后,多数是因为网内有电脑中了传奇木马病毒,或者网内有人安装了网络剪刀手,网络执法官,局域网终结者这类依靠Arp欺骗来工作的网络管理程序。当内网有一台电脑中了这类Arp欺骗类的病毒或者安装了这类依靠Arp欺骗来工作的网络管理程序,整个内网就会速度明显变慢,甚至网络断流(当中毒软件关机的时候到交换机Arp表老化失效的那段时间内),或者由于多台电脑中了病毒或者安装了网管程序而互相干扰导致网络完全无法使用。由于中病毒或者安装网管软件的是别人的电脑,我们动不了。但我们有能力给自己的电脑加上简单的防护手段来避免这种危害。
1、Arp欺骗类病毒和网管程序的工作原理:
在整个局域网内,有一个网关,大家都只知道网关的IP地址。其实,我们的网卡连接网关,不是按IP地址,而是按网关的mac地址来找的。这样,在交换机和我们的电脑里,就保存有一份网关的mac地址(网关的网卡物理地址,全球唯一)和网关IP地址的对应表,这张表就是Arp表。比如说,A电脑要让网关发一个数据包出去,它就会喊:谁是网关啊?把你的mac地址告诉我。网关听到后,就会说:我是网关(192.168.0.1),我的mac地址是XX:XX:XX:XX:XX:XX,你把数据包发到这个XX:XX:XX:XX:XX:XX就行了。A电脑听到后,就会把网关的mac地址和IP地址填到他的Arp表里,在一定的时间内(老化时间),他的所有向外的数据包都会发往XX:XX:XX:XX:XX:XX这个地址,从而完成上网的过程。
这个时候,如果内网有B电脑中了Arp病毒(传奇木马就是),或者装了网络执法官这类软件,它就会对外不停地喊:我是网关192.168.0.1,我的mac地址是BB:BB:BB:BB:BB:BB,这个时候,内网所有的电脑都会把数据发往B这台电脑,然后由B再发到网关,完成上网的过程。这个时候,B电脑就可以:分析数据包,截获用户名和密码(病毒和木马程序的目的),或者进行流量统计和流量管理,超过了他规定流量的数据包就会扔掉。这就是Arp欺骗的整个过程。
这里有朋友会问了,那我在电脑里手工指定网关的IP和mac地址行不行?这样不就不受病毒和Arp网管程序欺骗了?当然可以了。我这个小程序就是起这个作用的。由于静态的Arp绑定,每次关机或者重启都会失效,所以要写注册表,让这个绑定程序每次开机都自动运行一次才行。
另外,这个程序也有缺点,就是你的网关换了,你要再运行一次这个程序才能上网。因为你的电脑里记着的是以前网关的mac地址啊。
2、程序代码:
@echo off
title=自动绑定网关的静态arp表
::setlocal enabledelayedexpansion
arp -d
set gateway=192.168.0.1
for /f "delims=: tokens=2" %%a in ('ipconfig /all^|find /i "default gateway"') do (
for /f %%b in ("%%a") do set gateway=%%b )
@echo -----此程序将自动搜索你的网关ip和mac进行绑定-----
@echo.
@echo ..................................................
@echo .---------你网关的ip地址是: %gateway% ------.
ping -n 3 %gateway% >nul
for /f "tokens=1,2" %%i in ('arp -a ^| find "%gateway%"') do (set gatewayip=%%i & set gatewayeth=%%j)
arp -d
@echo .------你网关的mac地址是: %gatewayeth%------.
@echo .-----------下面将绑定你的网关的arp--------------.
arp -s %gatewayip% %gatewayeth% 1>nul 2>nul
@echo @echo off >c:\windows\route.bat
@echo ping -n 20 %gatewayip% 1^>nul 2^>nul >>c:\windows\route.bat
@echo arp -s %gatewayip% %gatewayeth% >>c:\windows\route.bat
@echo Windows Registry Editor Version 5.00 >routearp.reg
@echo. >>routearp.reg
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] >>routearp.reg
@echo. >>routearp.reg
@echo "routearp"="c:\\windows\\route.bat" >>routearp.reg
regedit /s routearp.reg
del routearp.reg /q
@echo
@echo . --------网关arp静态绑定成功!!!-------- .
@echo .以后每次开机后都会由注册表自动绑定网关的静态arp .
@echo . --------按任意键将退出本程序!!--------- .
@echo ..................................................
pause
程序代码摘要说明一下,以示是我自己写的,并且不是病毒:
第四行先删除电脑里旧Arp表,这样就是错误的arp绑定也会清空
第五行给gateway变量赋初值(你的网关不是192.168.0.1也没关系)
第六行开始只要你现在电脑是正常上网,会自动从电脑的网络配置信息里得到网关的信息,并取出它的mac地址进行绑定
从倒数第十六行开始,生成一个注册表文件,并运行,让电脑每次开机自动运行这个绑定操作
倒数第七行,删除这个临时生成的注册表文件
最后六行,提示信息并等待按任意键退出

这是批处理程序名称(只要后面的.bat不变,前面改成什么都没关系)

这是运行这个工具之前我的电脑里Arp表,可以看到只有一个动态的网关IP和mac条目。动态就是说随时有人喊是网关它就换掉

这是我的xp运行程序里的界面,已经绑定完成,等待按任意键退出窗口

这是绑定完成后我的电脑里的Arp表里的新条目,大家可以看到只有一条静态绑定条目了。也就是说,别人再怎么喊,它也不会变了。除非你再次运行这个工具程序重新绑定
由于论坛本版块不允许上传附件,所以我就把代码发地贴子里。要用的朋友直接复制这段代码,然后粘贴到记事本里,保存为“绑定网关.bat”文件名就行了(注意不能保存为Txt文本格式,要保存为bat批处理程序格式)。在需要绑定网关的电脑上双击运行一次就行。
注:这个小程序是几年前写的,在xp下用是没一点问题的,在win7下我没试过。用win7的朋友自己考虑是否冒险。
[
本帖最后由 wubozh 于 2011-8-17 10:35 编辑 ]