news 2026/10/17 4:53:52

网络嗅探与ARP欺骗实验全记录:从抓包到中间人攻击实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络嗅探与ARP欺骗实验全记录:从抓包到中间人攻击实战

《网络攻防实践》实验三做完有一阵了,一直想把这次实验的完整过程和踩坑记录整理出来。这门课在高校网络空间安全、信息安全相关专业里基本是必修,实验三通常已经脱离了前两次“熟悉命令、配置环境”的起步阶段,开始真正进入攻防对抗的核心环节——网络嗅探与协议分析。这篇文章就围绕我在某高校实验环境中完成的这次实验展开,从环境搭建、抓包分析、中间人攻击到报告撰写,把思路、命令、参数和排查经验一次说清楚。

如果你是正在做这份实验报告的同学,或者是刚接触网络安全、想系统了解网络嗅探的爱好者,这篇文章可以直接当作一份“保姆级”参考。我会尽量把每个操作背后的原理讲明白,不光是让你照着敲命令,而是让你理解这条命令究竟做了什么,抓到的那些报文又说明了什么。

1. 实验整体设计与环境准备

1.1 实验方向定位与核心目标

这门课的实验安排通常是有梯度的:实验一熟悉Linux基础命令和网络配置,实验二搭建靶机环境、理解基本攻击链路,到了实验三,就是真正进入“流量”的世界——网络嗅探。网络嗅探是一切网络攻击分析的基础,不管是后续要做的中间人攻击、弱口令嗅探,还是更后面的Web渗透测试,第一步几乎都是“先看看网络里在传什么”。

我做的这次实验三,核心目标可以拆成三条:

  • 理解以太网和TCP/IP协议栈中数据包的封装与转发过程;
  • 掌握Wireshark、tcpdump等常见抓包工具的使用,能够抓取并筛选目标流量;
  • 在交换网络环境下,通过ARP欺骗实现中间人嗅探,并从中提取明文信息(比如HTTP请求中的用户名密码)。

为什么把ARP欺骗也放进实验三?因为现在校园机房里的网络几乎都是交换式以太网,不是早年那种用Hub连接的共享式网络。在共享式网络里,你只要把网卡设为混杂模式,就能听到网段内所有广播域里的数据帧;但在交换网络里,数据帧会精确转发到目标端口,普通监听是听不到别人的流量的。要想在交换网络里嗅探到别人的通信内容,就必须让自己成为“中间人”,让流量主动经过你的网卡。ARP欺骗就是实现中间人最经典、最容易理解的手段。

我在实际做实验时最喜欢用一句话概括这次实验:先当“旁观者”,记录数据;再当“中间人”,截获数据。两个阶段用的工具和方法不同,但目标是一致的——把人家的明文信息拿到手。本质上这和现实中的“偷看信件”是一个逻辑:如果网络里的数据是明文的,谁在链路中谁就能看到。

1.2 实验环境搭建与虚拟网络规划

实验三对环境的依赖比较大,我建议不要在物理机上直接做,用虚拟机隔离最稳妥,也方便随时快照回滚。我的参考环境是三台虚拟机加一个虚拟网卡,运行在VMware Workstation上。

  • 攻击机:Kali Linux 2024.x,IP规划为192.168.88.100;
  • 靶机一:Metasploitable 2(自带大量漏洞的Linux靶机),IP为192.168.88.10;
  • 靶机二:Windows XP或Windows 7精简版,IP为192.168.88.20;
  • 宿主机和网关:通过VMware的VMnet 1(仅主机模式)桥接,网关地址为192.168.88.2。

为什么用仅主机模式而不是NAT模式?因为NAT模式的流量会经过宿主机虚拟网卡,干扰因素太多,而且靶机和攻击机之间的通信路径不够“纯粹”。仅主机模式下,整个虚拟网络是一个封闭的二层网络,流量路径完全可控,非常适合观察ARP广播和以太网帧的转发行为。注意Windows靶机一定要关闭防火墙,否则后面做ARP欺骗测试时,ICMP包和HTTP请求会被防火墙直接丢掉,造成“抓包有流量但目标没响应”的错觉。

规划好IP后,我习惯先用一个最简单的命令验证三台机器是否互通:

ping 192.168.88.10 -c 4

在Kali里用ping发4个包,同时打开Wireshark抓包,确认能在网络接口上看到ICMP请求和应答。这一步看似基础,实际上能排查掉80%的环境问题——网卡选错、IP段不一致、防火墙拦截,都会在ping环节暴露出来。

下面是我实验环境的具体参数表,供参考:

角色系统IP地址网关主要用途
攻击机Kali Linux192.168.88.100192.168.88.2Wireshark、arpspoof、Ettercap
靶机AMetasploitable 2192.168.88.10192.168.88.2提供HTTP明文登录服务
靶机BWindows XP192.168.88.20192.168.88.2作为被欺骗的客户端
网关VMnet 1192.168.88.2-模拟外网出口

提示:实验场景只存在于虚拟机组成的封闭虚拟网络内,不要将这种方法用在任何非授权网络上。攻防实践课的价值在于通过模拟理解网络原理,而不是用于真实环境中的非法行为。

2. 实验核心环节:网络嗅探与协议分析

2.1 抓包实操:从网卡捕获到报文筛选

做完基础连通性测试后,就进入第一个正式环节——抓包。这里我用的是Wireshark加tcpdump的组合。先解释一下两者的分工:tcpdump是命令行工具,适合在无图形界面的环境里快速抓包、做初步判断;Wireshark是图形化分析工具,适合对报文逐层拆解、追踪完整数据流。Kali里这两个工具都是自带安装的。

在Wireshark里开始抓包前,有一个关键选择:捕获哪个网卡接口。我的Kali机器网卡设备名是eth0,用ip a命令可以确认。如果设备名显示为ens33或enp0s3,不要慌,在VMware虚拟机的Kali上很常见,本质都一样。选定接口后点击开始抓包,然后在靶机A上发起一个简单的HTTP请求:

curl http://192.168.88.10/

回到Wireshark,你会看到大量报文。此时第一件事就是过滤。这里必须讲清楚Wireshark两种过滤器的区别,因为实验报告里很多同学把这两种混用,导致过滤结果完全不对。

  • 捕获过滤器(Capture Filter):在开始抓包之前设置,底层是BPF(Berkeley Packet Filter)语法,直接决定哪些报文被写入内存/磁盘。常用写法是host 192.168.88.10 and tcp port 80。
  • 显示过滤器(Display Filter):在抓包后设置,只影响显示,不影响已捕获的报文。常用写法是ip.addr == 192.168.88.10 && tcp.port == 80。

初学者经常在显示过滤器里写host 192.168.88.10,结果报错,就是因为把BPF语法和Wireshark显示语法混着用。BPF语法不带字段名直接写host,显示过滤器必须写成ip.host或ip.addr。我在实验时习惯先粗抓,再在显示过滤器里慢慢缩小范围,因为保留所有报文方便后面回溯;只有在流量非常大的时候,才用捕获过滤器做“截流”。

下面是几个我实验中实际用到的过滤器表达式,可直接复制:

tcp.port == 80 // 只看HTTP服务端口的TCP报文 ip.src == 192.168.88.10 // 只看某个源IP的报文 http.request // 只看HTTP请求报文 http.request.method == "POST" // 只看POST请求

2.2 协议分析要点:TCP三次握手、HTTP明文内容提取

过滤器筛出报文后,实验报告的重头戏就来了——报文分析。很多同学抓了一堆包,截图里全是密密麻麻的16进制字节,但excel里一个关键字段都没标注,这样的报告其实价值不大。做协议分析,至少要能从一帧报文里说清楚三件事:当前帧属于哪一层协议、该层的关键字段是什么、这个字段对通信过程有什么影响。

我以TCP三次握手为例,这是每次抓HTTP流量都会遇到的经典场景。在Wireshark里用tcp.port == 80过滤后,找到第一次访问某IP时连续的四帧报文:第一次握手的SYN、第二次握手的SYN+ACK、第三次握手的ACK,以及随后的HTTP请求。三次握手的关键不在于“发了三个包”,而在于序列号(Sequence Number)和确认号(Acknowledge Number)的递增逻辑。

第一次握手,客户端A的SYN报文里包含一个初始序列号,比如ISN=1000。服务器收到后,第二次握手返回SYN+ACK,它的确认号是1001(表示“我期望你下一个字节的序号”)——这里必须理解,确认号不是1000,而是1000+1,因为SYN标志位也要占一个序列号。第三次握手,客户端发送ACK,确认号是服务器的ISN+1。这个逻辑和你在银行排队取号很像:你取号是第1000个,下一个被叫到的是1001,你告诉服务员“我等着1001号”,服务员就知道你准备好了。

报文分析截图时,我建议用Wireshark的“Packet Details”面板展开TCP层,高亮Source Port、Destination Port、Sequence Number、Acknowledgement Number、Flags这几栏,剩下的不用截全。这样老师一眼就能看出你理解了报文结构。

HTTP明文提取就更直观了。在Wireshark过滤出http.request后,对任意一条请求右键,选择“Follow TCP Stream”(跟进TCP流),Wireshark会把整条TCP连接上的应用层数据拼成一个连续的文本流。如果靶机A运行的是DVWA(Damn Vulnerable Web Application)或者一个简单的PHP登录页面,你在“Follow TCP Stream”窗口里能直接看到POST包里的username=admin&password=123456这样的明文参数。这是因为HTTP协议本身没有加密机制,所有数据都以明文方式承载。

我实验时用靶机A上的DVWA做了一个模拟登录,抓到的TCP流中,请求行、Cookie、表单数据一目了然。这一步骤也是整个实验最有“获得感”的时刻,因为直观感受到了“如果不加密,你在网上传输的一切都是透明的”。

注意:如果在“Follow TCP Stream”里看到的全是乱码,大概率是HTTP响应经过gzip压缩了。可以过滤出仅包含请求方向的报文(tcp.stream eq 0 && http),或者用“Show data as”切换为Raw格式,必要时用http.response过滤响应报文,只看请求方向的明文。

3. 实验进阶环节:ARP欺骗嗅探与信息提取

3.1 ARP欺骗实现原理与操作步骤

完成了同网段内的直接抓包后,实验三的下一个目标是在交换网络里截获别人的通信。我刚说过,交换网络中普通网卡只能收到发往自己的帧,那么如何让发往别人的帧也经过你的网卡?答案就是ARP欺骗。

先讲原理。ARP协议解决的问题是“已知IP地址,求MAC地址”。当客户端A要访问网关192.168.88.2时,它会在本地广播一个ARP请求:“谁是192.168.88.2?请把你的MAC告诉我。”正常来说,网关会回复自己的MAC地址。但攻击机D可以抢先回复:“我就是192.168.88.2,我的MAC是00:0c:29:xx:xx:xx。”客户端A信以为真,把网关的IP和攻击机的MAC做了绑定,之后A发给网关的所有流量,实际都发到了攻击机的网卡上。

这个过程中,攻击机要做两件事:

  • 告诉目标主机“我是网关”;
  • 让目标主机到网关的流量经过自己,然后转发给真正的网关,确保目标主机不断网。

如果只欺骗目标主机却不让流量转发,目标主机会立刻断网,这反而会引起怀疑,实验也就没法继续了。所以必须在攻击机上开启IP转发。

开启IP转发的方式有两种。临时生效(重启失效):

echo 1 > /proc/sys/net/ipv4/ip_forward

永久生效则编辑/etc/sysctl.conf,增加一行net.ipv4.ip_forward = 1,然后执行sysctl -p。

配置好转发后,开始用arpspoof实施欺骗。arpspoof是Kali自带工具(在dsniff套件里),基本用法是:

arpspoof -i eth0 -t 192.168.88.20 192.168.88.2

这条命令的含义是:在eth0网卡上,不停地向IP为192.168.88.20的主机发送虚假ARP应答,声称自己是192.168.88.2。也就是说,告诉Windows靶机:“网关的MAC是我的。”

但只欺骗了目标机器还不够,目标机器发出的流量到了你这里,你要拿到真正的网关地址去联网,就必须再伪造网关和目标的连接。我常用的做法是打开两个终端,一个执行上面的命令欺骗目标,另一个执行反向欺骗网关:

arpspoof -i eth0 -t 192.168.88.2 192.168.88.20

意思是:向网关发送虚假ARP应答,声称自己是192.168.88.20。这样一来,网关发给目标主机的流量也会经过攻击机。双向欺骗做完,整个链路上的流量都会镜像到攻击机的网卡上。

然后用Wireshark在eth0上抓包,显示过滤器设ip.addr == 192.168.88.20,就能看到Windows靶机访问网关时发出的所有HTTP明文流量了。

注意:arpspoof默认会持续发送ARP应答包,直到你用Ctrl+C终止。实验结束时一定要关闭所有arpspoof进程,否则目标机器会一直处于“被欺骗”状态,后续实验里网络的ARP缓存会非常混乱。

3.2 从攻击方视角看防护策略

做完中间人嗅探,实验的“攻”这一半就完整了。但攻防实践课程不能只攻不防。我在写实验报告时,特意加了一个部分:从攻击方的视角反推防御手段。这也算是实验设计里隐含的彩蛋——你真正理解了一次攻击是怎么成功的,你才能理解防御为什么必须那么做。

先回顾攻击能成功的根本原因:目标主机的ARP缓存表可以被任意ARP应答包更新,且不校验应答的真实性。由此可以推导出一系列防御方案:

  • 静态ARP绑定:在关键主机上手动绑定网关的IP和MAC。在Windows下执行arp -s 192.168.88.2 00:50:56:xx:xx:xx后,该主机不再接受网关IP的ARP广播应答,arp欺骗就会失效。我在实验里验证过,绑定后再次执行arpspoof,Windows靶机的arp -a中网关MAC不再变化,Wireshark里也抓不到靶机发往外网的流量了。
  • 交换机端口安全:限制单个端口允许通过的MAC地址数量,防止攻击机在同一端口发送多个不同MAC的报文。这是从设备层面阻断ARP欺骗的重要手段。
  • DHCP Snooping和Dynamic ARP Inspection(DAI):前者监听DHCP过程,建立合法IP-MAC绑定表;后者基于这张表检查所有ARP报文,非法ARP应答直接丢弃。这在企业级交换机上经常成对出现。
  • 通信加密:即使流量被截获,如果传输内容是HTTPS或SSH加密的,攻击者拿到的也只是密文。ARP欺骗能截获数据流,但未必能读懂数据流。这也是为什么我一直强调,实验里抓到的都是HTTP明文流量,放在真实场景中,随便一个局域网内嗅探都能看到大量未加密的敏感请求。

这部分在我的实验报告里作为“防御响应”小结来写,既让实验内容有了深度,也呼应了课程名称里的“攻防实践”四个字。强烈建议你在做实验时也做这一步,在靶机上实际配置一下静态ARP绑定,然后对比绑定前后抓包结果的变化,这比纯理论论述有说服力得多。

4. 实验结果验证与报告撰写

4.1 结果验证关键步骤

实验不是抓到了包就算完成,还需要系统地验证结果,否则报告中的数据经不起推敲。我在做完嗅探和ARP欺骗后,按下面的步骤做了验证:

第一步,验证ARP欺骗是否生效。在Windows靶机上打开命令行执行arp -a,查看网关192.168.88.2对应的MAC地址。正常情况下它应该是VMware虚拟网关的真实MAC(通常是00:50:56开头),欺骗生效后,该MAC会变成Kali攻击机网卡的MAC(也是00:50:56开头但具体地址不同)。这一步是整个实验最硬的证明,截图时把攻击机的MAC地址查出来一并放上。

ip link show eth0 # 在Kali上查看本机MAC

第二步,验证流量是否经过攻击机。在Kali的Wireshark抓包界面中,用ip.addr == 192.168.88.20过滤,能看到Windows靶机发往网关的HTTP请求,说明流量确实被截获了。为了增加说服力,我特意在Windows靶机上打开浏览器登录了一个测试页面,Kali立刻在抓包结果中看到了完整的POST请求。

第三步,验证IP转发链路是否通畅。在Windows靶机上ping 192.168.88.2,如果在ARP欺骗状态下依然能通,说明攻击机的IP转发配置正确;如果ping不通,说明转发没开启,靶机已经因欺骗而断网。这一步很容易被忽略,但它直接决定了你的欺骗是否“隐形”。

做完这三步,实验结果就可以整理成清单了。我会在报告里用一个简单的表格汇总验证项和结果:

验证项操作方式预期结果实际结果
ARP欺骗生效靶机执行arp -a网关MAC变为攻击机MAC通过
流量被截获Kali抓包过滤目标IP可见目标主机HTTP请求通过
转发链路正常靶机ping网关时延正常无丢包通过
明文信息提取Follow TCP Stream可见用户名密码字段通过

4.2 实验报告撰写与常见扣分点

写实验报告时,我见过很多同学有一手好数据却拿了低分,问题基本都出在呈现方式上。结合我在某高校做助教时的经历,整理了几个常见的扣分点,提前避雷:

第一,截图没有过滤条件。很多同学直接把Wireshark全量抓包界面截图放上去,密密麻麻几千条报文,让人看不出重点。正确做法是先设置显示过滤器,再展开关键字段后截图,让老师一眼看到你分析的是哪个层面的什么字段。

第二,只贴图不解释。数据包里的ACK号为什么是1001?Flags里SYN位为什么是1?这些字段的含义必须用文字讲清楚。实验报告不是操作记录,而是“分析报告”,重点在“为什么”。

第三,ARP欺骗和HTTP明文提取脱节。有些同学骗到流量后不知道下一步该干什么,就在报告里写“成功实施ARP欺骗,捕获流量若干”,但完全没提从流量中提取了什么信息。实验三的完整链路应该是:欺骗→截获→过滤→追踪流→提取明文,每一步都不可缺少。

第四,混淆了攻击机和靶机的IP、MAC。这种低级错误在报告中出现,往往说明实验逻辑混乱。建议写报告前先把整个实验拓扑图和IP规划表画在开头,后面所有截图里的IP都要和规划表一致。

我在报告里还会加一个备查的报文分析表,列出关键帧号的源目的IP、协议、长度和关键标志。这样既显得专业,也方便老师快速定位你分析的对应报文。

5. 常见问题与排查技巧实录

实验过程中几乎不可能一次顺利到底。下面是我这次实验以及以往做类似实验时踩过的坑,整理成问题速查表,按“现象→原因→排查思路”的顺序写出来,供你对照排查。

现象可能原因排查思路
Wireshark打开后没有抓包权限Kali默认非root用户访问原始套接字受限用sudo wireshark启动,或sudo tcpdump -i eth0 -c 10快速验证
抓了半天只有广播报文,看不到目标流量网卡选错,或目标流量走的不是同一虚拟网段用ip a确认IP地址和网卡名,再ping验证互通性
ARP欺骗后目标主机断网IP转发未开启检查cat /proc/sys/net/ipv4/ip_forward是否为1,临时置1
欺骗成功但Wireshark看不到HTTP明文目标主机访问的是HTTPS网站,或HTTP响应被gzip压缩改成访问靶机上的HTTP服务;用“Follow TCP Stream”追踪请求方向
Windows靶机Ping不通防火墙拦截ICMP临时关闭Windows防火墙,或在防御策略中仅允许特定规则
arpspoof提示“too many open files”之类错误虚拟机Socket或进程残留先pkill arpspoof清理进程,再重新执行命令
抓到的HTTP POST里没有参数用GET方式提交表单,或参数在URL中检查请求行里是否包含?username=...&password=...,或改用POST表单
实验完成后网关MAC异常arpspoof进程未结束,一直在发欺骗包Ctrl+C终止进程,在Windows上arp -d清空缓存,重新获取网关MAC

关于排查思路,我特别想强调一点:抓不到包的时候,先用tcpdump做最小化验证,别一上来就开Wireshark图形界面。一条命令就能判断网卡是否收到数据,省时省力:

sudo tcpdump -i eth0 -c 10

如果10秒内没有任何输出,基本可以断定是网卡或链路层问题,不用再去翻协议层面的过滤条件。

另外一个不错的技巧是,在Wireshark里把常用的显示过滤器保存起来。点击过滤器输入框左边的书签图标,把ip.addr == 192.168.88.10、http.request这类表达式存成预设,后续实验中一键切换,比每次手输高效得多。我习惯保存一套自己的过滤器预设,包括“只看HTTP请求”“只看TCP三次握手”“只看ARP报文”“只看某个IP的完整会话”,基本涵盖了实验中90%的过滤需求。

再补充一个我在实验现场发现的细节:做ARP欺骗时,攻击机网卡需要开启混杂模式吗?答案是——不需要。混杂模式的作用是接收所有到达该网卡的数据帧,但ARP欺骗是主动把数据帧“骗”到你的网卡上,数据帧的目的MAC已经是你的MAC了,网卡自然就会接收。只有被动嗅探(比如接在Hub上)才需要混杂模式。Wireshark在Kali里默认开启混杂模式,但真正起作用的还是你的欺骗是否成功。

最后分享一点个人体会。我在做完实验三之后最大的转变,是养成了“所有流量先加密再传输”的习惯。以前觉得在局域网里传输点数据无所谓,经过这次实验,亲眼看到用户名、密码、会话Cookie在抓包工具里一行行地展示出来,那种震撼是看书本知识完全无法比拟的。攻防实践课的意义也在这里——不是教你攻击,而是让你通过亲手攻击,真正理解网络协议中每一个看似无害的机制背后,可能存在的风险。

如果后续的实验允许自由选题,我建议可以在实验三的基础上继续扩展,比如用Ettercap做实时内容替换(在HTTP页面中注入自定义文本),或者用SSLstrip尝试HTTPS降级攻击。这些方向只要在虚拟环境里操作,都是在协议层面很好的延伸练习。不过那就是后话了,先把这份实验三做扎实,把抓包、过滤、追踪流、ARP欺骗这几板斧练熟,后面的攻防实验你会轻松很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 4:53:51

J2EE原生云书城:库存锁+订单幂等+支付回调三重防线

简介:这是一份基于J2EE技术栈开发的完整在线图书销售系统——‘云工厂-网上书城’,面向Java Web初学者与企业级应用进阶学习者,用于深入理解多层架构设计、前后端协同及数据库集成等核心实践。资源包含588个文件,涵盖83个Java源码…

作者头像 李华
网站建设 2026/10/17 4:53:33

LCEL管道式组合:LangChain大模型应用搭建与调试实战

很多人在学习LangChain时,第一个卡住的地方就是LCEL(LangChain Expression Language)。恰好我也在这个坑里爬过一阵子,今天把学习笔记整理出来,聊聊LCEL是什么、为什么要用它、怎么用它把大模型应用拼装起来&#xff0…

作者头像 李华
网站建设 2026/10/17 4:53:06

MySQL基本应用与性能调优:从建表、SQL优化到索引实战

1. MySQL到底是什么,为什么大家都在用它先别急着敲命令,把概念搞清楚比什么都重要。MySQL本质是一个关系型数据库管理系统,它帮你把数据按照“表”的形式组织起来,一张表里有行有列,行是一条记录,列是一个字…

作者头像 李华
网站建设 2026/10/17 4:51:52

基于MP2642GR-Z与STM32L162ZE的两串锂电池被动均衡方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/17 4:51:48

基于MP2642GR-Z与PIC18F86J10的储能电池主动均衡方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/17 4:51:25

信创环境下AI模型迁移与性能调优实战指南

这两年只要聊国产化,绕不开的一句话就是“AI信创双轮驱动”。对外怎么讲都行,对内落到机房和代码里,这件事远没有听起来那么宏大,它意味着把模型推理从一套已经用惯的软硬件环境,搬到另外一套必须自己重新验证的国产底…

作者头像 李华