前言
tcpdump
是一个命令行包分析工具,很像 wireshark, 你可以使用tcpdump
抓包、分析包、连接问题的 troubleshoot,和查找网络层上潜在的安全问题。
开始
首先,你可以使用-D
列出可以抓包的网络接口
$ sudo tcpdump -D
1.en0 [Up, Running]
2.bridge0 [Up, Running]
3.p2p0 [Up, Running]
4.awdl0 [Up, Running]
5.utun0 [Up, Running]
6.en1 [Up, Running]
7.en2 [Up, Running]
8.lo0 [Up, Running, Loopback]
9.vboxnet0 [Running]
10.gif0
11.stf0
Protocol filters
$ sudo tcpdump tcp
Port filters
$ sudo tcpdump port 80
# 端口范围
$ sudo tcpdump port 22-125
# Source port is 80
$ sudo tcpdump src port 80
# Destination port is 80
$ sudo tcpdump dst port 80
Host filters
$ sudo tcpdump host 1.2.3.4
# Source host is 1.2.3.4
$ sudo tcpdump src host 1.2.3.4
# Destination host is 1.2.3.4
$ sudo tcpdump dst host 1.2.3.4
Net filters
sudo tcpdump net 192.168.1.0/24
Combining filters
$ sudo tcpdump "src port 80" and "dst host 1.2.3.4"
$ sudo tcpdump "src port 80" or "src port 443"
#
$ sudo tcpdump -i eth0 src port not 22
注: tcpdump 支持 and
, or
, not
保存输出
$ sudo tcpdump tcp -c 20 -w PATH_TO_FILE
注:
- 可以使用
-w
, 保存抓包的数据至文件中。 -c count
Exit after receivingcount
packets.
如果你即想保存至文件也想输出至屏幕,你可以添加
$ sudo tcpdump tcp -w - | tee PATH_TO_FILE | tcpdump -r -
保存的抓包文件可以通过 -r
来读取
$ sudo tcpdump -r PATH_TO_FILE
解析包
tcpdump抓获的一个tcp的典型数据包输出类似于如下:
17:42:53.490718 IP 192.168.0.1.443 > 192.168.0.114.59508: Flags [.], ack 1, win 67, length 0
第一字段
17:42:53.490718
是抓包的时间戳, 下一个IP
代表的是网络层的协议,在这个例子中是IPv4
下一个字段是源地址和端口,这里是源地址是
192.168.0.1
,端口是443
, 类似地,192.168.0.114.59508
代表目的地址及端口。Flags [.]
表示 TCP 的标记,这个例子中,TCP ACK 的标记被设置,其后是ACK的编号“ACK 1”, 下一个字段是窗口大小“Win 67”,最后是分组长度“Length 0”。
注: 不同协议类型的输出中有更多字段,有关详细信息,请查看tcpdump的文档。
阅读包
$ sudo tcpdump port 80 -A -c 1
您可以运行此命令,然后使用HTTP访问页面。 您将看到以纯文本打印出来的包内容。
Host: www.example.com
Connection: keep-alive
User-Agent: Chrome/80
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Referer: http://www.example.com
Accept-Encoding: gzip, deflate
Accept-Language: en-US;q=0.8,en;q=0.7
Cookie: SESSID=71mapjkxxro59donut84n0cfms0