学习 wireshark 前需要先了解 tcpdump,许多情况下我们使用 tcpdump 抓包(更快速、更方便),然后使用 wireshark 进行分析 。可参见 tcpdump实操
环境:Ubuntu 16.04 LTS


安装 wireshark

1
# sudo apt install wireshark-qt

启动 wireshark

1
# wireshark

启动后显示如下界面:

发现没有我们想要的网卡。如何知道哪块网卡是我们想要的?打开命令行终端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ifconfig
ens33 Link encap:Ethernet HWaddr 00:0c:29:48:09:a9
inet addr:192.168.248.128 Bcast:192.168.248.255 Mask:255.255.255.0
inet6 addr: fe80::555a:9e00:3f14:e7f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4331 errors:0 dropped:0 overruns:0 frame:0
TX packets:3064 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2400943 (2.4 MB) TX bytes:462038 (462.0 KB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1249 errors:0 dropped:0 overruns:0 frame:0
TX packets:1249 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:121848 (121.8 KB) TX bytes:121848 (121.8 KB)

ens33 就是可用网卡(lo 是环回接口,不用管)。

没有显示 ens33 是因为操作权限问题。重新以管理员身份运行 wireshark:

1
# sudo wireshark

成功显示 ens33双击该选项 ,进入 wireshark 抓包页面。


捕获过滤器

捕获过滤和显示过滤器是 wireshark 的两种主要过滤方式,但二者机制完全不同。前者是指示 wireshark 只捕获满足一定要求的报文,而后者则是在已经捕获到的报文中筛选出满足进一步要求的报文。捕获过滤器在打开 wireshark 时设置:

或者打开 wireshark 后,在设置页面操作:
注意,需要先停止捕获才可设置

配置捕获规则的语法和 tcpdump 相同,这里不再赘述。

建议:某些时候无需设置太过具体的条件,以免不利于网络错误排查。比如你要求只接收 TCP 报文,但 TCP 连接出错时可能会产生 ICMP 报文来传达错误信息,而这却被你给屏蔽了…


显示过滤器

显示过滤在捕获网络报文后进行:

显示过滤的语法和 tcpdump 完全不同。详细语法参见wireshark manual


名称解析


  • 选项 1:将 MAC 地址解析为名称。
  • 选项 2:将著名端口号解析为协议名,如,将端口号 80 解析为 http 。
  • 选项 3:将 IP 解析为域名。
  • 选项 4:如果将 IP 解析为域名,则只利用已经抓到的包来解析,不另外专门进行 DNS 查询。
  • 选项 5:如果无法从已抓到的报文解析 IP,则另外进行 DNS 查询。这会影响速度,一般不开。

已经解析的名字可以通过以下方式找到:

另外,你也可以自己命名一些 IP 地址:

自己命名的 IP 也会被加入到上面的 Resolved Address 栏目中。