简介

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禁止打印包的解析结果

示例

  1. 简单使用
    默认情况下,TCPDump会捕获所有接口的网络流量。如果您要仅捕获特定接口的流量,请在命令后面添加-i选项并指定要监视的接口名称,例如:
    tcpdump -i eth0
  2. 过滤数据包
    捕获到的网络数据包通常非常庞大,因此需要使用过滤规则来筛选出您感兴趣的数据包,而不是处理所有数据包。您可以通过使用“过滤表达式”来指定要捕获的数据包。
    例如,要仅捕获IP地址为192.168.1.101的源主机发送到目标主机的ICMP数据包,您可以使用以下命令:
    tcpdump -i eth0 icmp and src 192.168.1.101 and dst host <destination_ip>
  3. 输出文件
    默认情况下,TCPDump将捕获的数据包打印到终端上。但是,您可以将其输出到文件中以进行离线分析,并通过文件名指定输出文件,例如:
    tcpdump -i eth0 -w /path/to/output.pcap
    这将把所有捕获的数据包写入到/path/to/output.pcap文件中,该文件可由其他网络分析工具(如Wireshark)进一步处理。
  4. 显示时间戳
    如果您需要对捕获的数据包进行时序分析,那么为每个数据包添加时间戳非常有用。您可以使用-t选项启用此功能,例如:
    tcpdump -i eth0 -t
  5. 显示数据包详细信息
    如果您需要查看有关数据包更多的详细信息,如源和目的端口、协议类型等,可以使用-v选项启用详细模式,例如:
    tcpdump -i eth0 -v
  6. 改变数据包捕获缓冲区大小
    如果在大流量环境中进行网络监控,那么默认的TCPDump捕获缓冲区可能会不足。在这种情况下,可以使用-B选项增加捕获缓冲区的大小,例如:
    tcpdump -i eth0 -B 4096
    此命令将使TCPDump使用4 MB的缓冲区来存储捕获的数据包。
  7. 读取已保存的pcap文件进行分析
    tcpdump -r capture.pcap
  8. 监听特定 IP 地址、端口和协议类型
    tcpdump -i any -nn host 192.168.0.100 and port 22 and proto TCP
  9. 显示 DNS 查询的数据包
    tcpdump -i eth0 -nn port 53