- A+
tcpdump 是一款 Linux 平台的网络数据包截获和分析工具,支持针对协议、主机、网口、端口等进行过滤。并且可以使用 and、or、not 等逻辑语句对过滤器进行组合,实现针对性截获。
1. 监听指定网口
使用 -i 参数指定监听的网口,不支持多个。不指定默认监听第一个(所以通常来讲,这个参数都需要指定,因为不指定很可能抓不到,而不是抓到多余的数据)。
tcpdump -i ens192
其中,ens192 是网口名称,可以使用 ifconfig 查看,如下:
2. 监听指定主机
使用 host 参数指定监听本机与指定的主机之间(双向)的通信包。不指定默认监听与所有主机的通信。
tcpdump -i ens192 host 172.16.160.215
其中,172.16.160.215 是目标主机。这里我指定的是我本机,因为我使用 Xshell 连接了服务器,所以一直有 ssh 包数据。
2.1. 监听指定源主机
使用 src host 参数监听指定主机到本机(单向,入)的通信包
tcpdump -i ens192 src host 172.16.160.215
2.2. 监听指定目标主机
使用 dst host 参数监听本机到指定主机(单向,出)的通信包
tcpdump -i ens192 dst host www.baidu.com
使用 wget www.baidu.com 访问一下百度首页,结果:
不使用 src 或者 dst,单独使用 host,则表示监听双向通信包。
3. 监听指定端口
使用 port 参数指定监听的端口。不指定默认监听所有端口的数据。
tcpdump -i ens192 port 3306
上述语句监听本机 ens192 网口与所有主机之间(双向)使用 3306 端口的通信包
3.1. 监听指定源端口
tcpdump -i ens192 src port 3306
上述语句监听所有经过本机 ens192 网口并且发出方端口为 3306 的通信包。
3.2. 监听指定目标端口
tcpdump -i ens192 dst port 3306
上述语句监听所有经过本机 ens192 网口并且接收方端口为 3306 的通信包。
4. 监听指定协议(TCP/UDP)
只监听 TCP 通信包。不指定默认监听所有协议。
tcpdump -i ens192 tcp
只监听 UDP 通信包
tcpdump -i ens192 udp
5. 组合条件(逻辑与或非)
5.1. 使用 and (逻辑与)组合条件,只监听满足所有 and 条件的通信包
tcpdump -i ens192 src host www.baidu.com and dst 172.16.163.36
上述语句监听所有从 www.baidu.com 到 172.16.163.36 的数据包(单向),针对 src host www.baidu.com and dst 172.16.163.36 ,当命令运行在 172.16.163.36 上时,效果等同于 src host www.baidu.com ,当命令运行在 www.baidu.com 上时,效果等同于 dst 172.16.163.36 。
tcpdump -i ens192 host www.baidu.com and 172.16.163.36
上述语句监听所有 www.baidu.com 和 172.16.163.36 之间的通信包(双向),这种写法,如果两个 host 中不包含本机 host,则通常抓取不到数据。
5.2. 使用 or(逻辑或)组合条件,监听满足任意一项 or 条件的通信包
tcpdump -i ens192 host www.baidu.com or 172.16.160.215
上述语句监听与 www.baidu.com 和 172.16.160.215 任意主机的通信包,不论出入方向。
tcpdump -i ens192 src host www.baidu.com or 172.16.160.217
上述语句监听来自 www.baidu.com 的通信包和与 172.16.160.217 来往的通信包。
5.3. 使用 !(逻辑非)反选条件,监听不满足条件的通信包
6. 指定抓取数据包的长度
使用 -s 0 抓取完整数据包
7. 指定抓取数据包个数
使用 -c 100 指定抓取 100 个数据包后自动退出。
8. 抓取数据包到指定文件
使用 -w 指定输出文件
tcpdump -i ens192 -w data.cap
上述语句讲抓取的数据输出到当前目录下的 data.cap 文件(没有则创建文件)。