标题：ARP防火墙
ARP攻击
网络经常掉线、发生IP冲突、担心通讯数据受到监控（如MSN、QQ、EMAIL）、网络速度受到网管软件限制（如聚生网管、P2P终结者）、甚至深受各种ARP攻击软件之苦（如网络执法官、网络剪刀手、局域网终结者）等这些问题是我们上网时经常遇到的，而这些问题的产生 ，根源都是ARP欺骗（ARP攻击）。在没有ARP欺骗之前，数据流向是这样的：网关<->本机。ARP欺骗之后，数据流向是这样的：网关<->攻击者（“网管”）<->本机，本机与网关之间的所有通讯数据都将流经攻击者（“网管”），所以“任人宰割”就在所难免了。 
ARP防火墙通过在系统内核层拦截虚假ARP数据包以及主动通告网关本机正确的MAC地址，可以保障数据流向正确，不经过第三者，从而保证通讯数据安全、保证网络畅通、保证通讯数据不受第三者控制，从而完美的解决上述所有问题。
九大功能
拦截攻击
(1) 在系统内核层拦截外部虚假ARP数据包，保障系统不受ARP欺骗、ARP攻击影响，保持网络畅通及通讯安全；
(2) 在系统内核层拦截本机对外的ARP攻击数据包，以减少感染恶意程序后对外攻击给用户带来的麻烦；
拦截IP冲突
在系统内核层拦截IP冲突数据包，保障系统不受IP冲突攻击的影响；
Dos攻击抑制
在系统内核层拦截本机对外的TCP SYN/UDP/ICMP/ARP DoS攻击数据包，定位恶意发动DoS攻击的程序，从而保证网络的畅通；
安全模式
除了网关外，不响应其它机器发送的ARP Request，达到隐身效果，减少受到ARP攻击的几率；
P数据分析
分析本机接收到的所有ARP数据包，掌握网络动态，找出潜在的攻击者或中毒的机器；
监测缓存
自动监测本机ARP缓存表，如发现网关MAC地址被恶意程序篡改，将报警并自动修复，以保持网络畅通及通讯安全；
主动防御
主动与网关保持通讯，通告网关正确的MAC地址，以保持网络畅通及通讯安全；
  ARP防火墙追踪攻击者
发现攻击行为后，自动快速锁定攻击者IP地址；
病毒专杀
发现本机有对外攻击行为时，自动定位本机感染的恶意程序、病毒程序；
工作原理
  ARP防火墙ARP是Address Resolution Protocol（地址转换协议）的简称，是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包中填入自己的物理地址Ma，相当于发出这样的询问“谁拿了192.168.0.2这个地址？请回Ma这个物理地址。”计算机B在收到了这个查询以后，以Ma为目的地址发回一个ARP包，里面包含了自己的物理地址。这样通讯的双方都了解了对方的物理地址，通讯过程正式建立。 
通常ARP协议都在支持广播的网络上使用，比方以太网，这种数据包不能跨物理网段使用，即不能跨越一个路由器（除路由器本身还用作ARP代理以外）。  ARP防火墙在实际的ARP协议软件的实现中还有一些应该注意的事项：每台计算机上都有一个ARP缓冲，它保存了一定数量的从IP地址到MAC地址的映射，同时当一个ARP广播到来时，虽然这个ARP广播可能与它无关，但ARP协议软件也会把其中的物理地址与IP地址的映射记录下来，这样做的好处是能够减少ARP报在局域网上发送的次数。同时，ARP缓冲中IP地址与物理地址之间的映射并不是一但生成就永久有效，每一个ARP映射表项都有自己的时延，如果过了一定的时间还没有新的ARP到来，那么这个ARP映射就从缓冲中被删除了。那么下一次计算机向这个IP地址发送数据包的时候必须来一次新的查询。 
本地网络IP 查找的原理。事实上Windows 本身就用ARP来确定自己的IP地址是否与网络上的另一台计算机发生了冲突。当一个ARP包到来时，Windows 如果检查到其中的IP地址与本机上的相同，而物理地址不同，这时Windows 就会向用户报告这个IP地址已经被别人占用。非常有意思的是，Windows 对待IP地址是以先来后到的顺序分配，如果已经有人先占了，那么本机的网络接口就会被禁用。这也是非常恼人的“特色”因为一旦开机后有了第一次冲突，以后的任何网络操作就都无效了。Windows XP 有了一定的进步，它在发现冲突以后并不禁用接口，而是允许用户进行修复。其实用sniffer可以看到所谓的“修复”也不过是发了几个ARP包出去，把IP“抢”回来。  ARP防火墙在以前的文章中我描述了一个用ICMP 回送请求（类似PING）进行IP查找的程序。这个程序用并发的几十个线程同时PING网络上的多台计算机，如果回送请求被正确的应答了，那么可以认为这个IP地址已经被占用，如果没有，我们就宣称它是空闲的。然而它有优点也有缺点，其优点是能够PING很远的计算机，即使不在同一个物理网段上，缺点是当目标计算机上安装了防火墙并禁止了ICMP包，或者采用了防ICMP flood 攻击的规则以后都有可能让ICMP回送请求得不到应答。 
ARP的优点与缺点正好与ICMP相反。它无法跨物理网段进行IP查找，但是由于没有防火墙禁止ARP包的通过（想想看，如果禁止了ARP包，也就等于不让人家知道你的物理地址，那么实际上也就是将自己的计算机同网络断开了），所以ARP包的IP查找结果一定是非常精准的。  ARP防火墙在实现了一个原始的ARP IP查找版本以后，我发现其结果并不准确，有些已经没有人使用的IP地址被错误的报成有人占用了，难道我的判断是错误的？当然不，这种错误的原因是在Windows 的ARP缓冲中。实际上，在发送一个ARP报文的时候，Windows会首先检查本机的ARP缓冲，如果发现了已经有对应的ARP表项，而且还没有过期的话，Windows 并不会发送这个报文，而是直接返回给调用者这个ARP表项的内容。这样一来，假设有计算机中途掉网，而它的ARP表项还没有过期，那么这个程序仍然能够得到它的IP到MAC的映射，自然也就会错误的宣称这个IP地址还在使用中了。在运行这个程序前，我使用arp –d（事实上，在看了本文以后，你就可以实现一个这样的arp程序了）这个命令来删除缓冲中所有的ARP表项，然后得到的结果就非常准确了。IP Helper API 提供了管理ARP缓冲的过程，所以我修改了这个程序，把arp –d的功能集成到了自己的程序中来。如果看看《使用TCP/IP协议实际网际互连（第二卷）》你就会明白ARP协议软件中的诸多问题。 
IP Helper API GetIpNetTable 函数能够提取出本机上的所有ARP表项。使用它的方法与上一篇文章中使用的函数相当的类似，你也必须两次使用它，第一次获得缓冲的大小，而第二次获得实际的ARP表。这个映射表是以数组的方式指出的。其结构如下： 
typedef struct _MIB_IPNETTABLE { 
DWORD dwNumEntries; //数组的大小 
MIB_IPNETROW table[ANY_SIZE]; //数组本身 
} MIB_IPNETTABLE, *PMIB_IPNETTABLE; 
而MIB_IPNETROW 的定义： 
typedef struct _MIB_IPNETROW { 
DWORD dwIndex; // 网络接口的索引号 
DWORD dwPhysAddrLen; // 物理地址长度 
BYTE bPhysAddr[MAXLEN_PHYSADDR]; // 物理地址
DWORD dwAddr; // IP地址 
DWORD dwType; // ARP表项类型  ARP防火墙} MIB_IPNETROW, *PMIB_IPNETROW; 
其中dwType 即ARP表项类型是比较重要的东西，因为某些ARP表项一但设定就不再改变，比方本机地址的ARP表项和默认网关的地址表项等等，这些ARP表项并不会“过期”，除非网络故障或者设置改变了以后，会重新生成一次ARP查询。这种表项被称为“静态”的。此时dwType的值为4。在程序中，我们不必删除这类表项（虽然删了它们也不会造成什么后果）。 
然而在实际的程序中，我使用了FlushIPNetTable这个函数来删除特定网卡上的ARP缓冲。 
然后是删除一个表项的DeleteIpNetEntry，修改表项的SetIpNetEntry 和添加表项的CreateIpNetEntry 。还有两个管理代理ARP表项的函数，关于代理ARP，可以看看《使用TCP/IP 协议实现网际互连（第一卷）》关于ARP代理的部分，由于与我们的程序无关，就不做介绍了。 
最后需要详述的函数是SendARP。它的原型如下： 
DWORD SendARP( 
IPAddr DestIP, // 目的IP 地址 
IPAddr SrcIP, // 源IP地址，可选参数，把它填成0不会有问题 
PULONG pMacAddr, // 返回的物理地址
PULONG PhyAddrLen // 物理地址的长度
主流防火墙
瑞星防火墙  瑞星防火墙国内老牌的安全软件厂商。风云防火墙  风云防火墙国内防火墙新兴力量，风云防火墙。风云防火墙将秉持自己的简约而不简单的核心开发思想，认真综合、考虑用户的建议，开发、整合适于当前网络时代防火墙趋势与理念的功能，为用户提供防护优秀、功能实用、操作简单、占用资源低的风云防火墙。奇虎360防火墙360ARP防火墙通过在系统内核层拦截ARP攻击数据包，确保网关正确的MAC地址不被篡改，可以保障数据流向正确，不经过第三者，从而保证通讯数据安全、保证网络畅通、保证通讯数据不受第三者控制，完美的解决局域网内ARP攻击问题。
服务器安全狗-ARP防火墙
服务器安全狗是国内首款支持Windows全系列操作系统（Windows2003/Windows2008 32位 64位）的基  于内核级的服务器安全防护软件，软件采用NDIS中间层驱动模式，从驱动层直接屏蔽攻击，可以将针对服务器的攻击带来的损失降低到最小，最大程度地保护用户服务器的安全。彩影防火墙  彩影防火墙ARP防火墙采用内核层拦截技术和主动防御技术，几大功能模块（拦截ARP攻击/拦截IP冲突/DoS攻击抑制/安全模式/ARP数据分析/监测ARP缓存/主动防御/追踪攻击源/查杀ARP病毒/系统时间保护/IE首页保护/ARP缓存保护/自身进程保护/智能防御）互相配合，可彻底解决ARP相关问题，扼杀DoS攻击源。超级巡警  超级巡警防火墙专门查杀并可辅助查杀各种木马、流氓软件、利用rootkit技术的各种后门和其它恶意代码(间谍软件、蠕虫病毒)等等。提供了多种专业工具，提供系统/IE修复、隐私保护和安全优化功能，提供了全面的系统监测功能，使你对系统的变化了如指掌，配合手动分析可近100%的查杀未知恶意代码！金山防火墙  金山防火墙金山ARP防火墙能够双向拦截ARP欺骗攻击包，监测锁定攻击源，时刻保护局域网用户PC的正常上网数据流向，是一款是适于个人用户的反ARP欺骗保护工具！网关动态探测+识别——识破伪造的网关地址，动态获取、并分析判断后为受保护PC绑定正确的网关地址，从而时刻保障保护本机上网数据的正确流向。同时也支持用户手动设置绑定网关地址。主动向真网关表明合法身份
双向拦截ARP攻击——外部攻击、本机受感染攻击均不影响使用
拦截来自外部接受或是由本机发出的ARP攻击数据包并提醒用户，保障本机及其它PC的网络通畅。保护本机不受IP冲突攻击的影响，击源追踪锁定，抓住罪魁祸首。
拦截到ARP攻击包后立即追踪攻击源，找出安全威胁源头。
主动实时升级主动漏洞修复。让受保护PC在局域网隐身，恶性攻击无从下手独有“安全桌面”：采用底层驱动技术特殊保护下的独立空间，有效隔绝盗号木马的各种攻击，尤其适合进行全屏游戏的时候使用，并且和正常桌面之间的切换方便无门槛。当程序在密保的保护下运行时，如有其他程序对其产生注入等可疑行为的时候，利用金山毒  ARP防火墙霸强大的互联网可信认证技术，利用强大的后台数据支持来判断安全与否，从而最大程度的减少对用户的骚扰，且更有利于拦截危险程序可疑行为拦截+互联网可信认证
当程序在密保的保护下运行时，如有其他程序对其产生注入等可疑行为的时候，利用金山毒霸强大的互联网可信认证技术，利用强大的后台数据支持来判断安全与否，从而最大程度的减少对用户的骚扰，且更有利于拦截危险程序。当程序在密保的保护下运行时，如有其他程序对其产生注入等可疑行为的时候，利用金山毒霸强大的互联网可信认证技术，利用强大的后台数据支持来判断安全与否，从而最大程度的减少对用户的骚扰，且更有利于拦截危险程序。对被保护进程使用了进程隐藏功能之后，如同穿上了传说中的隐身衣，这些进程将无法被Ring3层的其他程序所发现。从而加大了木马查找并攻击这些程序的难度。（注意：这个功能可能会导致某些使用了行为拦截技术的软件误报为Rootkit）。
软件评测
  ARP防火墙在经过一段时间的测评之后，经验是：如果操作系统是：windowsxp、windows2000、windows2003的话，最佳的选择是风云防火墙。作为国内新兴的防火墙，风云操作简单易用，即便是新手使用也不会感到吃力。除了可以为PC提供不错的ARP防护外，还可以提供TCP/IP终止、SSL终止、URL过滤、请求分析、会话跟踪等全面防护。如果操作系统是VISTA的话，最佳的选择莫过于金山ARP防火墙了。金山ARP防火墙的安装文件仅649K，资源占用区区752K，而ARP防护能力却着实不弱，值得考虑。另外，彩影ARP防火墙个人版的ARP防护能力也不逊于金山ARP防火墙，只是安装文件比金山的要大，内存占用多一点。[1]