分为Windows、跨平台、命令行、移动端、商业高级版,包含特点、适用场景、优缺点,主要用于抓取、解析IP、TCP/UDP、ICMP等数据包。
一、图形化主流工具
1. Wireshark(最通用,首选)
- 平台:Windows / Linux / macOS,开源免费
- 底层:基于libpcap/winpcap/npcap,抓取网卡原始帧,完整解析IP头、IPv6、TCP、UDP、ICMP、HTTP、DNS等上百种协议。
核心能力
- 过滤:
ip.src=192.168.1.10、ip.dst、tcp.port等过滤IP数据包 - 完整解析IP头部:版本、IHL、TOS、总长度、ID、标志位、片偏移、TTL、协议号、源IP、目的IP
- 追踪TCP流、重组数据包、导出pcap抓包文件
- 过滤:
- 优点:协议最全,社区庞大,教程多;支持IPv4/IPv6分片分析
- 缺点:大流量抓包占用内存CPU高;需要管理员权限
配套:tshark 是Wireshark的命令行版本。2. Microsoft Network Monitor 3.4
- Windows专属,微软原生抓包工具
- 适合Windows平台IP包排查,现已基本停止维护,推荐替换Wireshark。
3. Capsa(Colasoft)科来网络分析系统
- Windows,有免费版/商业版
- 对IP会话、IP分片、网络故障做可视化统计,适合运维排障,中文界面友好。
- 免费版有抓包大小限制。
二、命令行抓包工具(服务器、Linux环境)
1. tcpdump(Linux/macOS,工业最常用)
Linux服务器分析IP数据包必用
# 抓取网卡eth0,只抓IP包,保存到pcap
tcpdump -i eth0 ip -w ip_capture.pcap
# 指定源IP过滤
tcpdump -i eth0 ip src 10.0.0.5- 输出可以直接看IP头关键信息,导出
.pcap文件后丢到Wireshark做深度解析。 - 优点:轻量,服务器无图形界面首选;资源消耗小
- 缺点:原生解析展示不如Wireshark直观,复杂协议建议导出pcap用Wireshark打开。
2. tshark(Wireshark命令行版)
tshark -i eth0 -Y "ip" -w ip_trace.pcap- 拥有Wireshark全部过滤语法,适合脚本自动化抓包,Linux/Windows/macOS都可以。
3. ngrep
- 网络版grep,可以匹配IP包内payload内容,简单快速,适合快速筛选。
三、移动端抓IP数据包
1. iOS
- rvictl:Mac通过USB映射iPhone网卡,Wireshark抓取手机IP数据包,无需越狱。
- Surge、Shadowrocket:代理抓包,只能抓经过代理的流量,不能抓取底层IP二层原始数据包。
2. Android
- 安卓root后:tcpdump二进制直接在手机抓原始IP包
- 非root:Android Studio Profiler;或者PC开启热点,电脑网卡抓手机流量;
- HttpCanary:APP,非root只能抓代理转发流量,不能抓完整底层IP数据包。
⚠️代理类抓包工具(HttpCanary、Charles、Fiddler):只能抓取应用层HTTP/HTTPS,拿不到完整IP头部、IP分片、ICMP、底层网络包,这点要区分。
四、代理抓包工具(注意局限性)
Charles、Fiddler、mitmproxy
- 工作原理:HTTP代理,解析应用层,看不到完整原始IP报文,无法分析IP分片、TTL、ICMP包。
- 适合调试HTTP接口,不适合IP数据包底层分析。
五、商业硬件抓包仪(硬件级)
适合高速网络、万兆/25G以太网,硬件网卡镜像抓包,不丢包:
- Keysight(是德科技)Network Analyzer
Viavi 网络测试设备
软件抓包在大流量下会丢包,硬件抓包器适合航空电子、高速以太网(如ARINC818)等专业场景。
选型建议
| 使用场景 | 推荐工具 |
|---|---|
| PC端深度分析IP头、分片、ICMP | Wireshark |
| Linux服务器、无GUI环境 | tcpdump,导出pcap后Wireshark分析 |
| 脚本自动化批量抓包解析 | tshark |
| 只调试HTTP接口,不看IP底层 | mitmproxy / Charles |
| 万兆高速网络不能丢包 | 硬件网络分析仪 |
IP包常用过滤表达式(Wireshark/tshark通用)
ip #只显示IPv4数据包
ipv6 #只显示IPv6
ip.src == 192.168.1.100
ip.dst == 8.8.8.8
ip.ttl < 64 #过滤TTL较小的IP包
ip.flags.mf == 1 #IP分片,更多分片标记置1
ip.frag_offset >0 #IP分片偏移不为0