简介
TCPDump是一款常用的命令行网络抓包工具,它可以在Linux和Unix系统上实时捕获网络数据包,并将其以人类可读的形式呈现。
详解
使用命令tcpdump -h
查看使用手册:
┌──(root㉿kali)-[~]
└─# tcpdump -h
tcpdump version 4.99.1
libpcap version 1.10.1 (with TPACKET_V3)
OpenSSL 1.1.1n 15 Mar 2022
Usage: tcpdump [-AbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [--count]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ --immediate-mode ] [ -j tstamptype ]
[ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ -T type ] [ --version ]
[ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]
[ --time-stamp-precision precision ] [ --micro ] [ --nano ]
[ -z postrotate-command ] [ -Z user ] [ expression ]
常用参数
-i <interface> | 指定要监听的网络接口(网卡) |
-n | 以数字形式显示IP地址和端口号,而不是DNS查询结果 |
-nn | 禁用 IP 和端口号反解析,直接显示数字格式 |
-vvv | 增加层数,提高详情度 |
-c | 抓到指定数量的封包即自动结束 tcpdump |
-s | 指定抓取数据包的截取长度大小,例如只抓取前128字节的数据包 |
-e | 在输出时显示数据包的MAC地址 |
-X | 以16进制和ASCII码形式显示完整的数据包内容,更加详细地展示协议参数 |
dst <host>或者 src <host> | 指定数据包中的目的 IP 地址或源 IP 地址 |
dst <port> 或者 src <port> | 指定数据报文中的目标端口号或源端口号 |
net <network> | 指定网络名称或 CIDR 表示法指定的网络 ID,这个选项可以帮助用户抓取指定的网络通信数据 |
greater <size> or less <size> | 过滤希望捕获的数据包长度,限制在大于某个值或小于某个值的范围内 |
-G 和 -W | 循环储存并存档封包,在一个特定的文件名和周期里,例如每 60 秒 |
-E | 增加对 VLC 流和 SSL 解码的支持 |
-F | 使用特别定义的过滤器文件 |
-w <file> | 将捕获的数据包写入到 pcap 文件中,并且可以在后续对该文件进行离线分析 |
-r <file> | 从一个 pcap 文件中读取流量来进行分析 |
-s <size> | 设置抓取的数据包大小。它能帮助你规定分片的大小 |
tcp, udp or icmp | 按照协议进行过滤 |
proto <protocol> | 指定要捕获的协议类型 |
not <expression> | 过滤不想看到的结果 |
<expression> and <expression> | 联合使用多个条件进行过滤,例如:tcpdump port 80 and host 192.168.0.1 |
-q | 禁止打印包的解析结果 |
示例
- 简单使用
默认情况下,TCPDump会捕获所有接口的网络流量。如果您要仅捕获特定接口的流量,请在命令后面添加-i选项并指定要监视的接口名称,例如:tcpdump -i eth0
- 过滤数据包
捕获到的网络数据包通常非常庞大,因此需要使用过滤规则来筛选出您感兴趣的数据包,而不是处理所有数据包。您可以通过使用“过滤表达式”来指定要捕获的数据包。
例如,要仅捕获IP地址为192.168.1.101的源主机发送到目标主机的ICMP数据包,您可以使用以下命令:tcpdump -i eth0 icmp and src 192.168.1.101 and dst host <destination_ip>
- 输出文件
默认情况下,TCPDump将捕获的数据包打印到终端上。但是,您可以将其输出到文件中以进行离线分析,并通过文件名指定输出文件,例如:tcpdump -i eth0 -w /path/to/output.pcap
这将把所有捕获的数据包写入到/path/to/output.pcap文件中,该文件可由其他网络分析工具(如Wireshark)进一步处理。 - 显示时间戳
如果您需要对捕获的数据包进行时序分析,那么为每个数据包添加时间戳非常有用。您可以使用-t选项启用此功能,例如:tcpdump -i eth0 -t
- 显示数据包详细信息
如果您需要查看有关数据包更多的详细信息,如源和目的端口、协议类型等,可以使用-v选项启用详细模式,例如:tcpdump -i eth0 -v
- 改变数据包捕获缓冲区大小
如果在大流量环境中进行网络监控,那么默认的TCPDump捕获缓冲区可能会不足。在这种情况下,可以使用-B选项增加捕获缓冲区的大小,例如:tcpdump -i eth0 -B 4096
此命令将使TCPDump使用4 MB的缓冲区来存储捕获的数据包。 - 读取已保存的pcap文件进行分析
tcpdump -r capture.pcap
- 监听特定 IP 地址、端口和协议类型
tcpdump -i any -nn host 192.168.0.100 and port 22 and proto TCP
- 显示 DNS 查询的数据包
tcpdump -i eth0 -nn port 53