安装

系统版本

1
2
q@q:~$ cat /proc/version
Linux version 4.15.0-112-generic (buildd@lcy01-amd64-027) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020

查看是否安装tcpdump

1
2
3
4
q@q:~$ tcpdump --v
tcpdump version 4.9.0
libpcap version 1.7.4
OpenSSL 1.0.2g 1 Mar 2016

捕获数据

获取网络适配器列表
1
2
3
4
5
6
7
8
9
10
11
12
q@q:~$ tcpdump -D
1.veth9fbecfe [Up, Running]
2.veth93b2d8d [Up, Running]
3.br-012dfa3c9d33 [Up, Running]
4.ens160 [Up, Running]
5.any (Pseudo-device that captures on all interfaces) [Up, Running]
6.lo [Up, Running, Loopback]
7.docker0 [Up]
8.nflog (Linux netfilter log (NFLOG) interface)
9.nfqueue (Linux netfilter queue (NFQUEUE) interface)
10.usbmon1 (USB bus number 1)
11.usbmon2 (USB bus number 2)

查看对应的ip,主要关注ens开头的和lo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
qz@qz:~$ ifconfig
br-012dfa3c9d33 Link encap:Ethernet HWaddr 02:42:be:92:c9:ab
inet addr:172.18.0.1 Bcast:172.18.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:beff:fe92:c9ab/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:266448880 errors:0 dropped:0 overruns:0 frame:0
TX packets:204891553 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:30218396039 (30.2 GB) TX bytes:18753198765 (18.7 GB)

docker0 Link encap:Ethernet HWaddr 02:42:ac:18:d0:43
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

ens160 Link encap:Ethernet HWaddr 00:50:56:9e:04:94
inet addr:192.168.4.119 Bcast:192.168.4.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe9e:494/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7821246 errors:0 dropped:46269 overruns:0 frame:0
TX packets:1777370 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3617971239 (3.6 GB) TX bytes:1557020128 (1.5 GB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:12824082898 errors:0 dropped:0 overruns:0 frame:0
TX packets:12824082898 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:24765414028745 (24.7 TB) TX bytes:24765414028745 (24.7 TB)

veth93b2d8d Link encap:Ethernet HWaddr 32:29:2c:5f:48:94
inet6 addr: fe80::3029:2cff:fe5f:4894/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:244481243 errors:0 dropped:0 overruns:0 frame:0
TX packets:174711583 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:30367433549 (30.3 GB) TX bytes:16031703102 (16.0 GB)

veth9fbecfe Link encap:Ethernet HWaddr 3e:96:14:e7:5d:e7
inet6 addr: fe80::3c96:14ff:fee7:5de7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21967637 errors:0 dropped:0 overruns:0 frame:0
TX packets:30183816 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3581246810 (3.5 GB) TX bytes:2722494237 (2.7 GB)


抓取外部请求
1
2
3
4
q@q:~$ sudo tcpdump -X -s 0 port 8083 -w test.pcap
[sudo] password for q:
tcpdump: listening on veth9fbecfe, link-type EN10MB (Ethernet), capture size 262144 bytes

此时正在抓取8083端口的请求。因为为指定网络是配器,默认选择了第一个, 即veth9fbecfe,但是请求是发往192.168.4.119,即网络适配器ens160, 所以还需参数 -i ens160.

其他参数:

  • -w :保存结果为文件,后面跟文件名,为指定路径则保存在执行tcpdump命令的当前目录下。
  • -X :把协议头和包内容都原原本本的显示出来
  • -s 0 :snaplen 的简写,snaplen表示从一个包中截取的字节数。0表示包不截断,抓完整的数据包。默认的话 tcpdump 只显示部分数据包,默认68字节
1
2
q@q:~$ sudo tcpdump -i ens160 -X -s 0 port 8083 -w test.pcap
tcpdump: listening on ens160, link-type EN10MB (Ethernet), capture size 262144 bytes

还有非常多使用的参数,但是日常使用记住自己常用的就好了。

等待请求完成,按ctrl + c终止抓包,在当前目录下生成了test.pcap文件。拷贝到windows机器下用wireshark软件打开。

抓取同一主机内的数据

如果是在一台主机内部署了两个服务,互相调用,此时监听 ens160是抓取不到的,应该改为 loip127.0.0.1的网络适配.

查看数据

wireshark打开test.pcap之后如下:

overview

通过接口url查找

比如有一个请求http://192.168.4.119:8083/api/server/time,

ctrl+f打开搜索界面。

searchover_overview

第一个红框内是搜索范围,可选 分组列表 分组详情 分组字节流,第二个红框内是搜索方式,可选 显示过滤器 十六进制值 字符串 正则表达式。

如果是查询接口路径,选分组列表+字符串。可理解为Info下面的内容都可搜索。

search_string

查看请求内容

右键 -> 追踪流 -> Tcp流

tcp-into

右下角可修改字符格式UTF-8.

通过消息体查找

选分组详情 + 字符串。可直接搜索接口消息中的数据。

其他搜索方式

3种搜索范围都可选字符串和正则表达式,搜索方式选择了显示过滤器和十六进制值时搜索范围不可选,而且显示过滤器和十六进制值需要特殊的语法,有兴趣可自行研究。