分为Windows、跨平台、命令行、移动端、商业高级版,包含特点、适用场景、优缺点,主要用于抓取、解析IP、TCP/UDP、ICMP等数据包。

一、图形化主流工具

1. Wireshark(最通用,首选)

  • 平台:Windows / Linux / macOS,开源免费
  • 底层:基于libpcap/winpcap/npcap,抓取网卡原始帧,完整解析IP头、IPv6、TCP、UDP、ICMP、HTTP、DNS等上百种协议。
  • 核心能力

    1. 过滤:ip.src=192.168.1.10、ip.dst、tcp.port 等过滤IP数据包
    2. 完整解析IP头部:版本、IHL、TOS、总长度、ID、标志位、片偏移、TTL、协议号、源IP、目的IP
    3. 追踪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

  1. 安卓root后:tcpdump二进制直接在手机抓原始IP包
  2. 非root:Android Studio Profiler;或者PC开启热点,电脑网卡抓手机流量;
  3. 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头、分片、ICMPWireshark
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