使用 tcpdump 抓取数据包

安装

tcpdump官网:https://www.tcpdump.org
开源地址:https://github.com/the-tcpdump-group/tcpdump/blob/master/README.md

软件源安装:

1
2
3
sudo apt update && sudo apt install tcpdump  # Debian系
sudo yum install tcpdump # RHEL系
sudo pacman -S tcpdump # Arch系

软件源安装的tcpdump通常会落后官网几个版本,因此建议手动编译安装最新版:

1
2
3
4
5
6
7
8
sudo apt install -y build-essential libpcap-dev
wget https://www.tcpdump.org/release/tcpdump-4.99.4.tar.xz
tar -xvf tcpdump-4.99.4.tar.xz
cd tcpdump-4.99.4
./configure
make
sudo make install # 卸载:sudo make uninstall
tcpdump --version

alt text

5个常用的参数以及过滤器

参数

使用tcpdump -h命令 可以看到他有二十多个参数:

alt text

每个参数的详细解释可以参考官方文档:https://www.tcpdump.org/manpages/tcpdump.1-4.99.4.html

其中常用的参数有以下五个:

  • -i:指定需要抓包的网卡。如果未指定的话,tcpdump会根据搜索到的系统中状态为UP的最小数字的网卡确定(不包括换回接口),一般情况下是eth0。使用-i参数通过指定需要抓包的网卡,可以增加抓包的针对性,便于后续的分析工作。
  • -nnn:禁用tcpdump展示时把IP、端口等转换为域名、端口对应的知名服务名称。这样看起来更加清晰,同时能加开输出速度。
  • -s:指定抓包的包大小。默认是 262144 字节,如果只想捕获数据包首部而不关心载荷,可以设置一个较小的值,例如 96 或 128。如果想要抓取较大的包,可以设置更大的值。
  • -c:指定抓包的数量, 到达数量后退出。
  • -w:指定抓包文件保存到文件(推荐格式.pacp)而不是显示到终端,以便后续使用Wireshark等工具进行分析, tcpdump直接读取抓包文件可以使用-r参数(读取时如果提示权限拒绝,可以尝试修改文件后缀为pac)。

过滤器

使用tcpdump的过滤器可以达到减少无效信息干扰的效果。常用的过滤器规则有以下几个:

  • host:源主机或目的主机的IP地址。
  • src host:源主机的IP地址。
  • dst host:目的主机的IP地址。
  • port:源或目的端口。
  • src port:源端口。
  • dst port:目的端口。
  • tcpudpicmparoip6:数据包所使用的协议,支持的协议参数不多,建议使用端口过滤。
  • !:反向匹配,例如port!22,抓取非22端口的数据通信。

实例

默认状态下直接抓取所有数据包:

1
sudo tcpdump

alt text

不将主机名、端口号、MAC地址转换为名称:

1
sudo tcpdump -nnn

alt text

写入100条数据包到文件而不打印到终端:

1
sudo tcpdump -w dump.pcap -c 100

alt text

读取文件:

1
tcpdump -r dump.pcap -nnn

alt text

alt text

过滤显示指定主机的数据包:

1
sudo tcpdump -nnn host 192.168.52.1

alt text

监视指定主机间的通信:

1
sudo tcpdump -nnn host 192.168.52.15 and host \(192.168.52.1 or 192.168.52.17\)

alt text

监视指定主机与指定主机之外的通信:

1
sudo tcpdump -nnn host 192.168.52.15 and host \!192.168.52.1

alt text

监视指定协议的通信:

1
2
sudo tcpdump -nnn tcp or udp -c 10
sudo tcpdump -nnn icmp or arp -c 10

alt text

监视指定端口的通信:

1
sudo tcpdump -nnn port 80 or port 443

alt text

参考

https://www.tcpdump.org/manpages/pcap-filter.7.html

https://book.douban.com/subject/26876528/