1 ARP协议工作原理简介

ARP是Address Resolution Protocal(地址转换协议)的简称,是TCP/IP协议中最底层的协议之一。它的作用是完成IP地址到MAC(物理地址)的转换。在局域网中两台计算机之间的通讯,或者局域网中的计算机将IP数据报转发给网关的时候,网卡都需要知道目标计算机的物理地址,以填充物理帧中的目的地址。

现在假设同一以太网中的计算机A(192.168.0.1)需要向计算机B(192.168.0.2)发送数据报,而此时A尚不知道B的物理地址。为了获得B的物理地址,A在局域网上发送ARP广播,查询192.168.0.2这个物理地址,同时在ARP包中填入自己的物理地址Mac,相当于发出这样的询问“谁拿了192.168.0.2这个地址?请回我(我就是Mac这个物理地址)。”计算机B在收到了这个查询以后,以Mac为目的地址发回一个ARP包,里面包含了自己的物理地址。这样通讯的双方都了解了对方的物理地址,通讯过程正式建立。在实际的ARP协议软件的实现中还有一些应该注意的事项:每台计算机上都有一个ARP缓冲,它保存了一定数量的从IP地址到MAC地址的映射,同时当一个ARP广播到来时,虽然这个ARP广播可能与它无关,但ARP协议软件也会把其中的物理地址与IP地址的映射记录下来,这样做的好处是能够减少ARP报在局域网上发送的次数。同时,ARP缓冲中IP地址与物理地址之间的映射并不是一但生成就永久有效,每一个ARP映射表项都有自己的时延,如果过了一定的时间还没有新的ARP到来,那么这个ARP映射就从缓冲中被删除了。那么下一次计算机向这个IP地址发送数据包的时候必须来一次新的查询。

通常ARP协议都在支持广播的网络上使用,比方以太网,这种数据包不能跨物理网段使用,即不能跨越一个路由器(除路由器本身还用作ARP代理以外)。

2 Arp欺骗的2种方式

我们知道系统向一个ip地址发送数据的时候总是先通过子网掩码来计算是否在同一网内,如果在,arp查询这个ip的MAC地址,向这个MAC地址发送数据;如果计算后,发现不再同一个网内,那就ARP询问网关的MAC地址,发送数据直接丢给网关处理,问题就出在这了,我们上网,ip地址99.9%的不再同一个网内,必定通过网关。例如:主机B上网,要发送数据给外网电脑K,但是必须经过网关A,这个时候B就会通过广播进行arp询问(询问网关的MAC):我是主机B,我的IP地址是123,MAC是QQWW,请问网关001你的MAC是多少?网关收到数据包后回复主机123(MAC是QQWW):我是网关001,我的MAC是OOPP。就上面的一喊一答,漏洞很多。

2.1 冒充网关,欺骗受害主机(如网络执法官);

C不想让B上网,就等B喊完了A回答完了,再冒充一次网关A回答(回答时让IP是真的,MAC却是一个不存在的地址),B第一次得到正确值,但是当第二次假地址来的时候仍然当真,把第一次的抹杀,B上网的数据全丢了(因为网关的MAC与IP不对应,数据给不到网关),不能上网了。(其实C不用等到B喊或A答,就平白无故的,不间断的告诉冒充网关告诉B假的MAC就ok了);

ARP防火墙的对策:我会帮助B记住正确的地址,你来假的,我就会紧随其后来个真的。

2.1 冒充受害机,欺骗网关A(如网络剪刀手);

上面我们说到的B是喊(广播)的,当A听到后,并不是单单回答,而且会默默地把B的地址记在心里(网关也会建立ARP缓冲表)。这就是利用之处,C不想让B上网,就代替B 询问(不是喊了,因为如果被B听到会“地址冲突”)格式这样:我是主机B,ip123,MAC是HTY(假的),主机IP001,MAC是OOPP。这样网关也会默默记住。断网原理,B虽然把数据给了网关,但是网关回复数据的时候却丢了(因为在网关的ARP缓冲内,B的IP与MAC不对应)。

ARP防火墙的对策:网卡混杂模式,无论你C怎样说话,我都能听到(问什么呢?因为网线上的电流变化就像水波一样,到处蔓延,只是不混杂的,不是发给自己MAC或广播的就不理睬,哪怕是冒充自己的)。然后发送正确的报文。

3 防范措施

大部分ARP防火墙的原理通过在系统内核层拦截虚假ARP数据包以及在攻击时主动向网关发包,主动通告网关本机正确的MAC地址,使之网关能够正确识别客户端,而发包的速度多少就可能影响网速,所以在大型网内在攻击时都有可能影响网速,在客户端进行防御是不能够完全抵御的,ARP攻击应该从源头上解决才行!(风云不支持VISTA);

3.1.建立DHCP服务器(建议建在网关上,因为DHCP不占用多少CPU,而且ARP欺骗攻击一般总是先攻击网关,我们就是要让他先攻击网关,因为网关这里有监控程序的,网关地址建议选择192.168.10.2,把192.168.10.1留空,如果犯罪程序愚蠢的话让他去攻击空地址吧),另外所有客户机的IP地址及其相关主机信息,只能由网关这里取得,网关这里开通DHCP服务,但是要给每个网卡,绑定固定唯一IP地址。 一定要保持网内的机器IP/MAC一一对应的关系。这样客户机虽然是DHCP取地址,但每次开机的IP地址都是一样的。

3.2.建立MAC数据库,把网吧内所有网卡的MAC地址记录下来,每个MAC和IP、地理位置统统装入数据库,以便及时查询备案。

3.3.网关机器关闭ARP动态刷新的过程,使用静态路邮,这样的话,即使犯罪嫌疑人使用ARP欺骗攻击网关的话,这样对网关也是没有用的,确保主机安全。

3.4.网关监听网络安全。网关上面使用TCPDUMP程序截取每个ARP程序包,弄一个脚本分析软件分析这些ARP协议。ARP欺骗攻击的包一般有以下两个特点,满足之一可视为攻击包报警:第一以太网数据包头的源地址、目标地址和ARP数据包的协议地址不匹配。或者,ARP数据包的发送和目标地址不在自己网络网卡MAC数据库内,或者与自己网络MAC数据库 MAC/IP不匹配。这些统统第一时间报警,查这些数据包(以太网数据包)的源地址(也有可能伪造),就大致知道那台机器在发起攻击了。

3.5.偷偷摸摸的走到那台机器,看看使用人是否故意,还是被任放了什么木马程序陷害的。如果后者,不声不响的找个借口支开他,拔掉网线(不关机,特别要看看Win98里的计划任务),看看机器的当前使用记录和运行情况,确定是否是在攻击。

4 可考虑的办法:

4.1如果发现断网,

WIN+R>CMD>IPConfig:查看自己的IP地址和MAC地址是否被更改;

ARP –a:查看网关的IP和MAC是否被更改;

4.2 arp -d;

4.3 先断开antiarp;然后再打开,此时可把正确的MAC地址改回来;

4.4 运行以下批处理文件:

@echo off

arp -d

netsh -c "i i" add neighbors 11 "192.168.1.1" "00-21-27-b2-eb-96"

netsh -c "i i" add neighbors 11 "192.168.1.100" "00-1f-16-68-ea-b7"

rem 将网关和自己网卡的IP地址和MAC绑定(即由动态变为静态)

rem 命令:netsh -c "i i" add neighbors 本地连接的idx "网关IP" "网关mac"

rem 查询本地连接的idx:用命令netsh i i show in查询;

rem 查询本机IP地址和MAC地址:ipconfig /all

rem 查询网关的IP和Mac地址:arp -a

rem netsh -c interface ip dump > c:\NetPC.TXT,可以查询到上述的地址绑定,类似于arp -a的操作;

4.5 禁用本地连接,启用本地连接

ARP命令

1 ARP -a:查看ARP缓存,包括网关IP和MAC;

2 ARP -D:清空ARP缓存;

3 ARP -S 网关IP 网关MAC:手工将网关IP和正确的MAC绑定(未绑定前是动态的,绑定后则会变成动态了);

netsh命令,NetSH (Network Shell)

可以使用 Netsh.exe 工具执行以下任务:

· 配置接口。

· 配置路由协议。

· 配置筛选器。

· 配置路由。

· 配置基于 Windows 的远程访问路由器(它运行路由和远程访问服务器 (RRAS) 服务)的远程访问行为。

· 显示任何计算机上当前运行路由器的配置。

· 使用脚本功能以批处理模式运行一组针对指定路由器的命令。

Netsh.exe 工具的语法为

netsh [-r router name] [-a AliasFile] [-c Context] [Command | -f ScriptFile]

要显示在上下文中可以使用的子上下文和命令的列表,请在 netsh> 命令提示符处键入上下文名称,后跟空格和 ?。例如,要显示可以在 /routing 上下文使用的子上下文和命令的列表,应在 netsh> 命令提示符处键入 routing ?,然后按 Enter。

Netsh 是命令行脚本实用工具,它允许从本地或远程显示或修改当前正在运行的计算机的网络配置。 Netsh 还提供了一个脚本功能,对于指定计算机,可以通过此功能以批处理模式运行一组命令。为了存档或配置其他服务器,Netsh 也可以将配置脚本保存在文本文件中。 只要利用Netsh命令,进入到DOS下的网络配置状态,就能实现各种网络配置。

在DOS环境中,设置网络参数之前,必须先进入IP设置模式才可以。先打开系统运行对话框,执行“CMD ”命令,将主界面切换到DOS环境中,在命令行中输入“Netsh”命令,单击回车键后,DOS命令提示符 将自动变为“netsh>”,再依次执行“Interface”|“IP”命令后,DOS命令提示符就会变成 “Interface ip>”(如图1所示),此时你就进入了IP设置模式。在该模式下,你可以利用“set”命令设置网络IP地址、网络掩码、DNS服务器,也可以利用“show”命令,查看各种网络参数,包括与本机建立的各种TCP/IP连接等。

设置IP地址:在IP设置模式下,执行“set address name static [addr] [mask] [gateway] [gwmetric]”命令,就能给指定网络连接分配IP地址、掩码地址、网关地址。其中,“set address”是设置IP地址的专用命令,name表示指定的网络连接名称,Win2000下的name应设置 为“Internet连接”,WinXP、Win2003下的name应设置为“本地连接”;static是表示设置静态地址,“[addr]”指的是具体IP地址,“[mask]”指的是具体掩码地址,“[gateway]”指的是具体网关地址 ,“[gwmetric]”指的是具体网关跃点数,一般情况下,该数值应设置为“1”。

例如,现在要为局域网中的某Win2000工作站,分配一固定IP地址为“10.192.168.10”,同时将该工作站的掩码地址设置为 “255.255.255.0”,将网关地址设置为“10.192.168.1”。那么你就可以在IP设置模式下,执行字符 串命令“set address Internet连接 static 10.192.168.10 255.255.255.0 10.192.168.1 1”,要不了多久,系统将会返回“确定”的提示(如图2所示),这表明IP地址设置成功。倘若你是一位拨号用 户,需要为自己的计算机分配一个动态IP地址时,就必须在IP设置模式下,输入字符串命令“set address Internet连接 source=dhcp”,单击回车键后,倘若系统返回“确定”提示,就表示为该计算机成功启用了DHCP服务,以后计算机的IP地址将会自动获取。

设置DNS服务器:在IP设置模式下,你还能为指定的网络连接设置DNS服务器,只要执行“set dns name static [addr]”命令就可以了。其中 “set dns”是设置DNS服务器的专用命令,“static”表示设置静态DNS服务器,“[addr]”是具体的 DNS服务器IP地址。例如,现在要将当前计算机的DNS服务器,设置为“202.100.100.202”时,那么你 可以在IP设置模式下,输入字符串命令“set dns Internet连接 static 202.100.100.202”,单击回车后,系统将返回“确定”提示,这表明配置静态DNS服务器已经成功。此时,你可以执行“show dns ”命令,看看当前计算机的DNS服务器,是否已经被设置成指定的IP地址了,如图3所示。倘若需要为计算机启动动态DNS服务器时,可以执行“set dns Internet连接 source=dhcp”命令。

查询配置信息:大家知道在DOS环境中,利用“Ipconfig”命令,也能查看到当前计算机的网络配置信息,可是该命令查 看到的信息很有限,只限于IP地址、掩码地址、网关地址等。而在IP设置模式下,你能查看到各种网络配置信息。例如,执行“show config”命令后,你除了可以看到“Ipconfig”命令能查询的信息外, 还能知道网关跃点数是多少,DNS服务器是什么,WINS服务器是什么等。执行“show tcpconn”命令, 你能查看到当前有哪些Internet主机,与本地机器建立了连接,也可以查看到本地端口的工作状态,是处于关闭状态还是监听状态(如图4所示)。灵活运用该命令,你能及时发现系统是否受到了外来入侵 ,要是有陌生的主机与本地主机的陌生端口,建立了连接时,那系统十有八九受到了攻击,此时你必须尽快采取措施,确保系统安全。当然,Netsh还为你提供了许多查询网络信息的命令,例如查询IP统计信息的命令,查询TCP统计信息的命令,查询UDP、ICMP统计信息的命令等,这些命令使用都比较简单, 在这里就不一一详细介绍了。

快速修改配置:倘若你的笔记本电脑,需要在不同的网络环境中工作,那么每次工作之前,总需要重新修改网络参数,这实在太麻烦了。现在,你可以在Netsh模式下,很轻松地 实现快速修改网络配置的目的,具体步骤为:在DOS命令行状态下,输入字符串命令“netsh -c interface dump>c:\net1.txt”,单击回车键后,当前工作站的网络配置信息,就全部被保存到C盘 net1.txt文件中了(该文件保存着网络1环境中的上网参数);下面,打开net1.txt文件,你可以看到 如图5所示的配置信息,包括工作站的IP地址、掩码IP地址、网关IP地址等。现在,你可以用笔记本电 脑可能使用到的其他网络环境中的配置参数,替换这里的对应参数,其余内容保持不变,然后再将该文 本文件另存为“net2.txt”(该文件保存着网络2环境中的上网参数);同样地,你可以生成net3.txt 、net4.txt……netn.txt,让这些文件保存着网络3、网络4……网络n环境中的上网参数。以后,笔记 本电脑无论接入到哪个网络环境中,只要在DOS命令行状态下,执行“netsh exec c:\netn.txt”命令 ,就能实现快速修改网络配置的目的了(这里的“netn.txt”文件,必须对应着指定的网络环境)。

查询本机IP地址和MAC地址

C:\Users\wwu>ipconfig /all
Windows IP 配置
主机名 . . . . . . . . . . . . . : wwu-PC
主 DNS 后缀 . . . . . . . . . . . :
节点类型 . . . . . . . . . . . . : 混合
IP 路由已启用 . . . . . . . . . . : 否
WINS 代理已启用 . . . . . . . . . : 否
以太网适配器 本地连接:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Marvell Yukon 88E8039 PCI-E Fast Ethernet
Controller
物理地址. . . . . . . . . . . . . : 00-1F-16-68-EA-B7
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
本地链接 IPv6 地址. . . . . . . . : fe80::2892:d7a4:1b45:9a1f%11(首选)
IPv4 地址 . . . . . . . . . . . . : 192.168.0.115(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
获得租约的时间 . . . . . . . . . : 2015年10月3日 18:00:01
租约过期的时间 . . . . . . . . . : 2015年10月3日 20:00:01
默认网关. . . . . . . . . . . . . : 192.168.0.1
DHCP 服务器 . . . . . . . . . . . : 192.168.0.1
 

查询网关的Mac地址:

C:\Users\wwu>arp -a
接口: 192.168.0.115 --- 0xb
Internet 地址 物理地址 类型
192.168.0.1 ec-26-ca-63-24-1e 动态
192.168.0.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.2 01-00-5e-00-00-02 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.251 01-00-5e-00-00-fb 静态
224.0.0.252 01-00-5e-00-00-fc 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态

Windows7下arp绑定和解除绑定 netsh

1、首先以管理员身份运行CMD打开命令行程序(开始-程序-附件-命令提示符 击右键选择“以管理员身份运行” )

2、运行 netsh i i show in

显示:(电脑中网卡的数量不同,网卡的安装次数会影响以下显示内容)

Idx Met  MTU   状态           名称

---   ---   ----- ----------- -------------------

1 50 4294967295 connected Loopback Pseudo-Interface 1

11 25 1500 connected 本地连接

 

3、在以上显示内容中找到你用来上网连接的Idx那个号码,在下面命令中使用 (我上网的网卡是“本地链接”所以Idx为 8)。然后在命令提示符窗口输入:

netsh -c "i i" add neighbors 11 "192.168.1.1" "00-23-cd-a4-b3-ce"回车

4、然后在命令提示符输入运行 arp -a 就可以看到绑定好的网关处于静态了

5、如过想解除绑定在CMD命令行程序里输入netsh i i reset 回车就可以,不过需要重启才能生效

查询网卡的idx编号

netsh -c “i i” add neighbors idx IP MAC”进行ARP绑定,这里的idx就是上一步查到的网卡的idx编号,IP和MAC就是你要绑定的IP地址和MAC地址。

C:\Users\wwu>netsh i i show in
Idx Met MTU 状态 名称
--- ---------- ---------- ------------ ---------------------------
1 50 4294967295 connected Loopback Pseudo-Interface 1
11 20 1500 connected 本地连接
(上面的11即是本地连接或本地网上的idx编号)

win7下使用netsh进行网关和本机网卡的IP和mac地址绑定(win7下如果不能用arp -s)

直接运行cmd,运行arp -d * ,arp -s会出现下面的错误提示:

ARP 项删除失败: 请求的操作需要提升。

ARP 项添加失败: 拒绝访问。或提示:ARP 项添加失败: 请求的操作需要提升。
(英文版提示:The ARP entry addition failed: Access is denied. )

如何解决呢?
运行arp -d * 需要用管理员身份运行,进入windows\system32文件夹找到cmd.exe,右键“以管理员身份运行”,这样打开cmd程序就能运行arp -d命令了。但是这样还是不能运行arp -s 进行静态mac绑定,大概是win7禁用了这个命令,需要用netsh命令。

具体做法是:

1、先运行:netsh i i show in 找到正在使用的网卡idx号

2、然后运行:netsh -c i i add neighbors 11 192.168.1.1 00-21-27-bc-89-48 就可以进行绑定了,这里11是idx号。

在Win7和Vista上用ARP -D并不能完全的删除绑定
必须使用
netsh -c "i i" delete neighbors IDX (IDX改为相应的数字)
才可删除MAC地址绑定

在vista中也会产生同样的错误!


C:\Users\sink>arp -a
接口: 10.200.52.186 --- 0xa
Internet 地址 物理地址 类型
10.200.53.254 00-04-38-87-f2-0c 动态
10.200.53.255 ff-ff-ff-ff-ff-ff 静态

C:\Users\sink>arp -s 10.200.53.254 00-04-38-87-f2-0c
ARP 项添加失败: 5

C:\Users\sink>netsh i i show in
Idx Met MTU 状态 名称
--- --- ----- ----------- -------------------
1 50 4294967295 connected Loopback Pseudo-Interface 1
10 20 1500 connected 本地连接

C:\Users\sink>netsh -c "i i" add neighbors 10 "10.200.53.254" "00-04-38-87-f2-0c"
C:\Users\sink>arp -a
接口: 10.200.52.186 --- 0xa
Internet 地址 物理地址 类型
10.200.53.60 00-16-d4-f5-b7-2e 动态
10.200.53.254 00-04-38-87-f2-0c 静态
10.200.53.255 ff-ff-ff-ff-ff-ff 静态

解决办法

0. 使用 arp -a 命令 查看网关的MAC网卡物理地址

1. 使用 netsh i i show in 命令 查看 本地连接的 idx编号

2.使用 netsh -c "i i" add neighbors 本地连接的idx "网关IP" "网关mac“ 命令绑定

3.使用 arp -a 查看结果

配置示例:管理学校机房

网络环境:

ADSL接入,通过ISP上网,

上网服务器:win2ks+isa2k

IP:192.168.0.1

subnetmask:255.255.255.0

DNS为ISP的DNS IP:202.101.10.10

客户机全部win2kpro(并装有还原卡

IP:192.168.0.2---192.168.0.102

subnetmask:255.255.255.0

网关和DNS都为代理服务器的IP:192.168.0.1并且都装了ISA的防火墙客户端软件。

学校规定:学生帐号登陆不能上Internet,而老师通过自己帐号登陆则可以连接Internet;

多数情况下上网权限的控制,都是通过IP地址来实现(当然,ISA在AD的支持下是可以通过帐户来实现上网权限的控 制,这不是本文讨论范围内),也就是说同一台电脑,学生用过后,如果老师使用时要Internet的话,就必须更改计算机的IP地址,但有些菜鸟老师更 改,都教了N次了,还是不会......

在默认情况下,客户机是全部不能上internet的,ISA的规则上是禁止 192.168.0.2---192.168.0.102的IP上internet,另外在ISA再创建一规则,允许 192.168.0.103-192.168.0.203上internet (这不是本文的重点,如果有需要,大家可以查看相关资料)。

netsh派上用场了,我们客户机PC18上运行CMD进入MS-DOS,输入

netsh -c interface ip dump > c:\NetPC.TXT

(该命令是显示当前”本地连接" 的接口IP 配置,并保存在NetPC.TXT文本文件中)

查看一下c:\NetPC.TXT这个文件,显示的是当前”本地连接”的接口的IP配置,是否跟用ipconfig /all命令,看到的一样的。

{

TPYE c:\NetPC.TXT

# ----------------------------------

# 接口 IP 配置

# ----------------------------------

pushd interface ip

# "本地连接" 的接口 IP 配置

set address name="本地连接" source=static addr=192.168.0.18 mask=255.255.255.0

set address name="本地连接" gateway=192.168.0.1 gwmetric=0

set dns name="本地连接" source=static addr=192.168.0.1 register=PRIMARY

add dns name="本地连接" addr=202.101.10.10 index=2

set wins name="本地连接" source=static addr=none

popd

# 接口 IP 配置结束

}

我们打开NetPC.TXT这个文件,把“addr=192.168.0.18”的IP改为“addr=192.168.0.118”,再保存。

然后,在老师帐户的桌面上创建一个IP.BAT文件,内容输入“netsh -f c:\NetPC.TXT”(注意文件的路径,我们刚才是把NetPC.TXT放在C盘根目录下)。

用老师的帐户登陆后,双击桌面上的IP.BAT文件,我们用ipconfig /all看看结果,显示IP地址换成192.168.0.118了,别的配置都没有变。

我们知道192.168.0.103―192.168.0.203的IP地址是可以上网的。也就是说,如果老师想上网的话,只要双击IP.BAT这个文件就可以了;

以上的设置是在PC18这台机器上做的,如果我们要在别的机器上设置,我们只在把NetPC.TXT这个文件的里的 IP地址换成192.168.0.103-192.168.0.203范围内的IP(当然要保证使用的IP是唯一的,以免产生IP冲突),再新建一个 IP.BAT文件,内容可以一样,不过要注意NetPC.TXT这个文件的路径;补允一点,老师帐户都为管理员组,学生帐户为普通用户组。

通过以上设置,基本上达到我们的目的,老师上机的时候,只要双击桌面上IP.BAT这个文件,IP地址就会换成192.168.0.103―192.168.0.203这个网段的IP,也就是说可以上网了,电脑重启,因为有还原卡,机器又会被变成192.168.0.2―192.168.0.102这个网段的IP,也就不能上网了。通过netsh这个命令,我们能感觉到他的强大,可以为我们免去一些烦琐的事情。