Wireshark
Wireshark 是一款自由且开源的包分析器。可用于网络排错、网络分析、软件和通讯协议开发以及教学等。
安装[编辑 | 编辑源代码]
Wireshark 软件包分成了 CLI 版本和依赖 CLI 版本的前端界面.
- CLI 版本 - 安装软件包 wireshark-cli包。
- TUI 前端 - 安装软件包 termshark包。
- Qt 前端 - 安装软件包 wireshark-qt包。
以普通用户身份抓包[编辑 | 编辑源代码]
以 root 身份运行 Wireshark 是不安全的。Wireshark 已经实现了权限分离,因此 Wireshark 的图形界面(或 tshark CLI)能够以普通用户身份运行,而数据包捕获工具使用 root 身份运行[1]。
wireshark-cli包 的安装脚本会为 /usr/bin/dumpcap
设置数据包捕获能力。
/usr/bin/dumpcap
仅能被 root 用户或 wireshark
群组用户执行,因此需要将用户加入 wireshark
用户组以使普通用户能够正常运行 Wireshark (参见 Users and groups#用户组管理)。
使用如下命令获得当前用户的抓包权限(中文 wiki 注):
$ sudo groupadd wireshark $ sudo usermod -a -G wireshark $USER $ sudo chgrp wireshark /usr/bin/dumpcap $ sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
执行完如上命令重启生效。
一些抓包技巧[编辑 | 编辑源代码]
你可以通过使用 capture filters 和 display filters 准确获取你想抓取的数据包。
过滤 TCP 包[编辑 | 编辑源代码]
只查看所有的 TCP 数据包,在 Filter 拦输入 tcp
,或者在终端中输入:
$ tshark -f "tcp"
过滤 UDP 包[编辑 | 编辑源代码]
只想查看所有的 UDP 数据包,在 Filter 拦输入 udp
,或者在终端输入:
$ tshark -f "udp"
查看指定 IP 地址的数据包[编辑 | 编辑源代码]
将 1.2.3.4
替换为要查看的 IP 地址。
- 只想查看发到某个特定地址的数据包,输入
ip.dst == 1.2.3.4
。
- 只想查看从某个特定地址发出的数据包,输入
ip.src == 1.2.3.4
。
- 要查看某个特定地址的所有数据包,输入
ip.addr == 1.2.3.4
。
排除特定 IP 地址的数据包[编辑 | 编辑源代码]
将 1.2.3.4
替换为要排除的 IP 地址。
ip.addr != 1.2.3.4
查看局域网数据包[编辑 | 编辑源代码]
如果只想查看局域网数据包,使用
(ip.src==10.0.0/8 AND ip.dst==10.0.0/8) OR (ip.src==172.16.0.0/12 AND ip.dst==172.16.0.0/12) OR (ip.src==192.168.0.0/16 and ip.dst==192.168.0.0/16)
这样可以过滤出所有来自私有网络地址的数据包。
查看指定端口的数据包[编辑 | 编辑源代码]
查看某两个或更多端口的流量:
tcp.port==80||tcp.port==3306 tcp.port==80||tcp.port==3306||tcp.port==443
使用 dumpcap 捕获数据包[编辑 | 编辑源代码]
dumpcap 是 Wireshark 的一部分,可以使用该工具在无图形界面的情况下捕获数据包。dumpcap 可以在 tmux 或 GNU Screen 中使用,以在一个处于 Detached 状态的会话中捕获数据包。
可以使用 -h
参数查看 dumpcap 的所有选项。
下面的例子展示了如何捕获循环缓冲区(ringbuffer)中内容。下面的命令会以每个文件 100MB 的大小捕获20个.pcap
文件,并且会在捕获第21个文件时替换最早创建的文件并依次继续。因此此命令会保持运行,而不会持续消耗磁盘空间以致磁盘容量耗尽。
# dumpcap -i 1 -b filesize:100000 -b files:20 -w mycapture.pcapng
-i
- 接口名称或编号(dumpcat -D
命令列出的编号)-b filesize:
- 创建的.pcap
文件的大小,以 kB 为单位-b files:
- 在输出指定的文件数量后覆盖旧文件-w
- 输出文件名,上例中输出会保存到mycaptureidentifier.pcapng