tcpdump网络数据分析工具使用
基本指令
指定网络接口
-i INTERFACE
先查看当前设备的网卡信息
┌──(root㉿kali)-[/home/kali]
└─# ip a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
...
然后就可以指定需要监听的网卡
eg:
┌──(root㉿kali)-[/home/kali]
└─# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
08:47:31.678427 IP 192.168.120.158.ssh > 192.168.120.1.10554: Flags [P.], seq 2972386559:2972386747, ack 2171887499, win 501, length 188
08:47:31.733926 IP 192.168.120.1.10554 > 192.168.120.158.ssh: Flags [.], ack 188, win 251, length 0
08:47:31.782932 IP 192.168.120.158.45348 > 192.168.120.2.domain: 11681+ PTR? 1.120.168.192.in-addr.arpa. (44)
08:47:31.882058 ARP, Request who-has 192.168.120.158 tell 192.168.120.2, length 46
08:47:31.882074 ARP, Reply 192.168.120.158 is-at 00:0c:29:0e:6e:46 (oui Unknown), length 28
限定监听的包数量
-c number
eg:
┌──(root㉿kali)-[/home/kali]
└─# tcpdump -i eth0 -c 5
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
08:48:38.247548 IP 192.168.120.158.ssh > 192.168.120.1.10554: Flags [P.], seq 2972394591:2972394779, ack 2171887975, win 501, length 188
08:48:38.303258 IP 192.168.120.1.10554 > 192.168.120.158.ssh: Flags [.], ack 188, win 250, length 0
08:48:38.324125 IP 192.168.120.158.34940 > 192.168.120.2.domain: 42203+ PTR? 1.120.168.192.in-addr.arpa. (44)
08:48:38.401428 IP 192.168.120.2.domain > 192.168.120.158.34940: 42203 0/0/0 (44)
08:48:38.401768 IP 192.168.120.158.55678 > 192.168.120.2.domain: 9223+ PTR? 158.120.168.192.in-addr.arpa. (46)
5 packets captured
10 packets received by filter
0 packets dropped by kernel
读取/写入流量文件
写入:-w filename
读取:-r filename
eg:
┌──(root㉿kali)-[/home/kali]
└─# tcpdump -i eth0 -c 2 -w 1.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
2 packets captured
2 packets received by filter
0 packets dropped by kernel
┌──(root㉿kali)-[/home/kali]
└─# tcpdump -r 1.pcap -c 2
reading from file 1.pcap, link-type EN10MB (Ethernet), snapshot length 262144
08:51:26.495118 IP 192.168.120.158.ssh > 192.168.120.1.10554: Flags [P.], seq 2972397563:2972397687, ack 2171889099, win 501, length 124
08:51:26.550057 IP 192.168.120.1.10554 > 192.168.120.158.ssh: Flags [.], ack 124, win 251, length 0
更多常用命令
| Command | Explanation |
|---|---|
tcpdump -i INTERFACE |
捕获特定网络接口的包 |
tcpdump -w FILE |
将捕获的包写入文件 |
tcpdump -r FILE |
读取捕获的文件中的数据包 |
tcpdump -c COUNT |
捕获特定数量的数据包 |
tcpdump -n |
捕获特定数量的数据包 |
tcpdump -nn |
不要解析 IP 地址,不要解析协议号 |
tcpdump -v |
详细显示;可以通过 -vv 和 -vvv 增加详细程度 |
一些例子
tcpdump -i eth0 -c 50 -v 通过监听 eth0 接口捕获并显示 50 个数据包,该接口为有线以太网,并以详细方式显示。
tcpdump -i wlo1 -w data.pcap 通过监听 wlo1 接口(WiFi 接口)捕获数据包并将其写入到 data.pcap 。它将持续进行,直到用户通过按 CTRL-C 键中断捕获。
tcpdump -i any -nn 在所有接口上捕获数据包,并在屏幕上显示,不进行域名或协议解析。
过滤表达式
过滤主机/端口
主机过滤:
-
源主机:
src host IPorsrc host HOSTNAME -
目的主机
dst host IPordst host HOSTNAME
端口过滤:
port 22
eg:
┌──(root㉿kali)-[/home/kali]
└─# tcpdump -i eth0 -c 2 port 22
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
08:58:41.913942 IP 192.168.120.158.ssh > 192.168.120.1.10554: Flags [P.], seq 2972406287:2972406475, ack 2171892331, win 501, length 188
08:58:41.967610 IP 192.168.120.1.10554 > 192.168.120.158.ssh: Flags [.], ack 188, win 252, length 0
2 packets captured
2 packets received by filter
0 packets dropped by kernel
协议过滤
在过滤的时候直接指定协议即可,一些常见协议:ip、ip6、udp、tcp、arp(建立通讯的MAC地址广播)、icmp
eg:
┌──(root㉿kali)-[/home/kali]
└─# tcpdump -i eth0 -c 2 icmp
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
09:01:54.201284 IP 192.168.120.158 > 39.156.70.239: ICMP echo request, id 1, seq 15, length 64
09:01:54.285802 IP 39.156.70.239 > 192.168.120.158: ICMP echo reply, id 1, seq 15, length 64
2 packets captured
2 packets received by filter
0 packets dropped by kernel
注:dns的报文不是直接指定 dns,而是 port domain or port 53
逻辑运算符
and : 捕获同时满足两个条件的包。例如, tcpdump host 1.1.1.1 and tcp 捕获带有 host 1.1.1.1 的 tcp 流量。
or: 捕获当任一条件为真时的数据包。例如, tcpdump udp or icmp 捕获 UDP 或 ICMP 流量。
not :当条件不成立时捕获数据包。例如, tcpdump not tcp 捕获除 TCP 段之外的所有数据包;我们预计结果中会有 UDP、ICMP 和 ARP 数据包。
高级过滤
长度筛选
greater LENGTH :过滤长度大于或等于指定长度的数据包
less LENGTH :过滤长度小于或等于指定长度的数据包
进制运算&头部字节
& (并且)接受两个位,除非两个输入都是 1,否则返回 0,如下表所示。
| (或)接受两个位,除非两个输入都是 0,否则返回 1。这在下表中显示。
! (非)取一个比特并对其进行反转;输入为 1 时给出 0,输入为 0 时给出 1,如下表所示。
proto[expr:size] 引用头部中任何字节的 内容,其中:
proto指的是协议。例如,arp、ether、icmp、ip、ip6、tcp和udp分别代表 ARP、以太网、ICMP、IPv4、IPv6、TCP 和 UDP。expr表示字节偏移量,其中0指的是第一个字节。size表示我们感兴趣的字节数,可以是 1、2 或 4 字节。它是可选的,默认为 1。
TCP中常见的头部标志字段
tcp-synTCP 同步(SYN)tcp-ackTCP 确认(确认)tcp-finTCP FIN(结束)tcp-rstTCP 重置(RST)tcp-pushTCP 推送
案例
tcpdump "tcp[tcpflags] == tcp-syn"仅捕获设置了 SYN(同步)标志的 TCP 数据包,而其他所有标志均未设置。tcpdump "tcp[tcpflags] & tcp-syn != 0"用于捕获至少设置了 SYN(同步)标志的 TCP 数据包。tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"用于捕获至少设置了 SYN(同步)或 ACK(确认)标志的 TCP 数据包。
显示数据包
常用选项
-q:快速输出;打印简短的包信息-e:打印链路层头部-A:以 ASCII 格式显示数据包内容-xx: 显示数据包数据为十六进制格式-X:显示数据包的十六进制和 ASCII 格式的头部和数据
eg:捕获 icmp 协议的数据包,以ASCII和十六进制显示
┌──(root㉿kali)-[/home/kali]
└─# tcpdump -i eth0 -c 2 icmp -qnX
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
09:12:01.226434 IP 192.168.120.158 > 39.156.70.46: ICMP echo request, id 2, seq 51, length 64
0x0000: 4500 0054 bf95 4000 4001 d402 c0a8 789e E..T..@.@.....x.
0x0010: 279c 462e 0800 6288 0002 0033 a193 cd67 '.F...b....3...g
0x0020: 0000 0000 6474 0300 0000 0000 1011 1213 ....dt..........
0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"#
0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123
0x0050: 3435 3637 4567
09:12:01.298879 IP 39.156.70.46 > 192.168.120.158: ICMP echo reply, id 2, seq 51, length 64
0x0000: 4500 0054 239a 0000 8001 6ffe 279c 462e E..T#.....o.'.F.
0x0010: c0a8 789e 0000 6a88 0002 0033 a193 cd67 ..x...j....3...g
0x0020: 0000 0000 6474 0300 0000 0000 1011 1213 ....dt..........
0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 .............!"#
0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&'()*+,-./0123
0x0050: 3435 3637 4567
2 packets captured
2 packets received by filter
0 packets dropped by kernel

浙公网安备 33010602011771号