作为常年混迹内网安全和网络运维的“手工耿”型选手,我接到过不少奇怪的网络隔离需求。比如某次内部演练,要求在不动交换机配置、不碰防火墙规则的前提下,让指定IP段内的设备暂时无法访问网关。这种活儿说难不难,但用常规手段还真不好干——ACL没权限、物理拔线太粗暴、改IP又动静太大。最后我用的方案就是标题里写的:arpspoof双向欺骗,把192.168.110.10到192.168.110.100这一段机器批量“请”下网。
这篇文章就把完整的原理、实操命令、批量脚本思路,以及我踩过的那些“成功率从100%掉到80%”的坑,一次性讲清楚。如果你也遇到类似的临时断网测试、网关隔离演练、或者纯粹想搞懂ARP欺骗为什么能断网,这篇文章可以直接照着抄。
1. 什么场景下需要“批量切断一段IP”
先别急着敲命令,搞明白需求从哪来,后面才不会乱。我遇到过的情况主要有这么几类。
1.1 真实需求往往不是“攻击”,而是隔离测试
很多读者看到“断网”两个字就想到恶意攻击,但实际工作中,这类操作频繁出现在授权测试、故障演练和设备下线场景里。
比如公司要淘汰一批旧终端,但某些设备因为Agent卸载不干净,总在半夜自动连上网络拉取策略。这时候网络管理员没有交换机console权限,又不想一台台去物理拔网线,最快的临时处置方式,就是让这些设备在二层上“找不到网关”——它们还连着交换机,但所有跨网段通信全部超时。
再比如做内网入侵模拟演练,红队需要验证“如果攻击者拿下一台普通主机后,能否通过ARP欺骗切断同网段特定终端的可用性”,用来评估监控系统能不能发现这种异常。这种情况下,arpspoof就是一个标准的测试工具,而不是攻击工具。
还有一类需求更朴素——某个IP段里的机器中了挖矿木马,正在疯狂向外发包。应急响应时来不及逐台隔离,先把整段IP的网络通信掐掉,再慢慢排查。这时候“批量切断”就是一个高效的前置处置动作。
1.2 为什么选arpspoof而不是防火墙/交换机ACL
一句话:因为大多数情况下你根本没有设备权限,或者在二层环境下ACL根本不生效。
- 防火墙ACL:需要登录防火墙管理界面,而且防火墙通常部署在三层出口,对内网同网段设备之间的二层互访压根管不到。
- 交换机ACL/端口隔离:需要知道目标接在哪个端口,还要有交换机配置权限,在大型接入网络里逐端口梳理根本不现实。
- DHCP改网关:动静太大,还要等客户端续租,时效性差。
- arpspoof:只要你在同一个广播域内,有一台Linux机器(或者能装dsniff工具包的任意系统),直接构造ARP应答包就能让目标设备“以为”网关换人了,整个过程不需要任何网络设备权限。
当然,我不是说arpspoof万能。它只在二层可达的范围内有效,而且遇到ARP防护机制会失灵,这些细节后面专门讲。但在“快速、临时、不影响网络设备配置”这个维度上,arpspoof确实是最直接的方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 双向欺骗的原理:先搞清楚在骗谁
很多教程一上来就让人跑两条arpspoof命令,但完全不解释为什么是两条。我见过不少人照抄命令后一脸懵:只跑一条的时候目标还能上网,跑两条才断——这是为啥?
2.1 ARP的基本工作流程
ARP(Address Resolution Protocol)解决的是“已知IP,求MAC”的问题。在同一个二层网络里,主机A要给主机B发数据包,光有IP不行,数据链路层需要知道B的MAC地址,否则没法封装以太网帧。
工作流程大概是这样的:
- A查询自己的ARP缓存表,看有没有B的IP到MAC映射。
- 没有的话,A发一个ARP广播请求:“谁是192.168.110.10?请把你的MAC地址告诉我。”
- B收到广播后,发现问的是自己,就回一个ARP应答:“192.168.110.10的MAC是aa:bb:cc:dd:ee:ff。”
- A收到应答,把这条映射写进ARP缓存,然后正常通信。
注意,ARP协议没有认证机制。任何主机都可以发“ARP应答”,而且很多操作系统对收到ARP应答的处理并不严格——你说是谁,我就信谁,直接更新缓存表。这就是ARP欺骗能成立的根本原因。
2.2 单向欺骗和双向欺骗的区别
假设攻击机是C,目标是A,网关是G。
单向欺骗:C只给A发伪造应答,告诉A“网关的MAC是C的MAC”。效果是A想访问外网时,数据包都发给了C。如果C不开IP转发,A就断网了;如果C开了IP转发,C就变成了中间人,能窃听A的流量。但这时候G并不知道A的MAC变了,所以G发给A的数据包,走的还是正常路径。A发给G的包经过C,G发给A的包却不经过C——这种状态叫“半程劫持”,用来做流量嗅探时只能看到一半数据。
双向欺骗:C同时给A发“网关的MAC是C”的应答,给G发“A的MAC是C”的应答。这样一来,A发往网关的流量经过C,网关发往A的流量也经过C,所有通信都从C这里走一圈。这就是“双向欺骗”,也叫做完全中间人。
标题里提到的“双向欺骗”指的就是这个状态。对于断网这个需求来说,只有双向欺骗才最干净利落——A发给网关的包被C截了,网关回给A的包也被C截了,两条方向的通信同时断掉。
2.3 为什么“不转发”就等于断网
这里有个关键点:arpspoof本身只是发送ARP应答包,它并不修改目标机器的路由表,也不改IP配置。它做的事情只有一个——让A的ARP缓存里“网关IP对应的MAC地址”变成C的MAC地址。
那数据包发出去之后会发生什么?
A把发往网关的数据包封装成以太网帧,目的MAC填的是C的MAC,目的IP还是网关IP。交换机看到目的MAC是C的MAC,就把帧转发给C的端口。C收到这个帧,发现IP不是自己的,按正常Linux主机的做法,它会把包交给IP协议栈处理。由于这个包的目的IP不是本机,系统会尝试做转发——但Linux默认 /proc/sys/net/ipv4/ip_forward 是0,也就是不转发。于是这个数据包直接被丢弃。
网关回给A的数据包同理,回包到C这里就被丢了。
所以断网的本质是:ARP缓存被污染,导致目标主机的数据包全部打到攻击机上,而攻击机默认不转发,包就石沉大海了。
提示:如果你想做中间人嗅探而不是断网,需要执行
sysctl -w net.ipv4.ip_forward=1开启内核转发。但咱们这篇帖子的需求是断网,所以保持默认的0就行。
3. 环境准备与单目标验证
先跑通一台,再谈批量。批量之前你连单台都搞不定,后面全是灾难现场。
3.1 工具安装:arpspoof在哪个包里
arpspoof是dsniff工具集的一个组件。Kali Linu
