任务一介绍

研究网络协议的主要挑战是我们无法亲眼看到协议“对话”的发生。所有技术复杂性都隐藏在友好优雅的用户界面之下。你访问本地网络资源时,从未看到ARP查询。同样,你可能多年访问互联网服务,直到查看网络手册或查看网络流量捕获时,才会看到任何三方握手。最好的学习辅助工具是捕捉网络流量并仔细研究各种协议;这有助于我们更好地理解网络的运作方式。

本房间介绍了一些使用 Tcpdump 的基本命令行参数。Tcpdump 工具及其库使用 C 和 C++ 编写,并于 1980 年代末或 1990 年代初发布给类 Unix 系统。因此,它们非常稳定,速度最佳。该图书馆是当今多种网络工具的基础。此外,它被移植到微软Windows平台,名为 .libpcaplibpcapwinpcap

学习目标

这个房间旨在为你提供使用所需的基础知识。具体来说,你将学习如何:tcpdump

  • 捕获数据包并保存到文件中
  • 对捕获的数据包设置过滤器
  • 控制捕获数据包的显示方式
任务二基础数据包捕获

你可以不提出任何论据;不过,这只用来测试你是否安装了它!在任何真实场景中,我们都必须明确听什么、写在哪里以及如何显示数据包。tcpdump

指定网络接口

首先要决定的是使用哪个网络接口监听。你可以选择在所有可用接口上收听,使用;或者,你也可以指定想要监听的接口,比如 。-i INTERFACE-i any-i eth0

一个命令,比如(或仅为)会列出可用的网络接口。在下面的终端中,我们看到一张网络卡,除了环回地址外。ip address showip a sens5

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> <span style="color:#ffaf00">ip</span> a s
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
[...]
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
[...]</code></span></span></span></span>

保存捕获的数据包

在很多情况下,你应该之后再检查捕获的数据包。这可以通过保存到文件中实现。文件扩展名通常设置为 。保存的数据包可以之后通过其他程序(如Wireshark)进行检查。当你选择该选项时,你不会看到数据包滚动。-w FILE.pcap-w

从文件中读取捕获的数据包

你可以用 Tcpdump 从文件中读取数据包,方法是使用 。这对学习协议行为非常有用。你可以在合适的时间范围内捕获网络流量,检查特定协议,然后读取捕获的文件,同时应用过滤器显示你感兴趣的数据包。此外,它可能是一个包含网络攻击的数据包捕获文件,你会检查它以分析攻击内容。-r FILE

限制捕获的数据包数量

你可以通过使用计数来指定捕获的数据包数量。如果不指定计数,包捕获会持续,直到你通过按 CTRL-C 来中断。根据你的目标,你只需要有限数量的包。-c COUNT

不要解析IP地址和端口号

tcpdump 会解析 IP 地址,并尽可能打印友好的域名。为了避免进行此类DNS查询,你可以使用该论证。同样,如果你不想解析端口号,比如被解析到,可以用 来阻止 DNS 和端口号查询。请考虑下文终端中所示的示例。我们捕获并展示了五个数据包,但未解析IP地址。-n80http-nn

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> <span style="color:#ffaf00">sudo</span> tcpdump <span style="color:#f8f8f2">-i</span> ens5 <span style="color:#f8f8f2">-c</span> <span style="color:#ffaf00">5</span> <span style="color:#f8f8f2">-n</span>
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5, link-type EN10MB (Ethernet), capture size 262144 bytes
08:55:18.989213 IP 10.10.117.2.22 > 10.11.81.126.53378: Flags [P.], seq 2888580014:2888580210, ack 771262362, win 922, options [nop,nop,TS val 3216251159 ecr 33295823], length 196
08:55:18.989446 IP 10.10.117.2.22 > 10.11.81.126.53378: Flags [P.], seq 196:424, ack 1, win 922, options [nop,nop,TS val 3216251159 ecr 33295823], length 228
08:55:18.989576 IP 10.10.117.2.22 > 10.11.81.126.53378: Flags [P.], seq 424:620, ack 1, win 922, options [nop,nop,TS val 3216251159 ecr 33295823], length 196
08:55:18.989839 IP 10.10.117.2.22 > 10.11.81.126.53378: Flags [P.], seq 620:816, ack 1, win 922, options [nop,nop,TS val 3216251159 ecr 33295823], length 196
08:55:18.989958 IP 10.10.117.2.22 > 10.11.81.126.53378: Flags [P.], seq 816:1012, ack 1, win 922, options [nop,nop,TS val 3216251159 ecr 33295823], length 196
5 packets captured
6 packets received by filter
0 packets dropped by kernel</code></span></span></span></span>

产出(更多)冗长输出

如果你想打印更多关于数据包的细节,可以用来生成稍微冗长一些的输出。根据 Tcpdump 手册页面(),添加 将打印“生存时间、身份、总长度和选项”等检查。他们会产出更多冗长的输出;会提供更多的冗长;详情请查看手册页面。-vman tcpdump-v-vv-vvv

摘要与示例

下表总结了我们讨论的命令行选项。

指挥 解释
tcpdump -i INTERFACE 在特定网络接口捕获数据包
tcpdump -w FILE 将捕获的数据包写入文件
tcpdump -r FILE 读取文件捕获的数据包
tcpdump -c COUNT 捕获特定数量的数据包
tcpdump -n 不要解析IP地址
tcpdump -nn 不要解析IP地址,也不要解析协议号
tcpdump -v 冗长的展示;冗长度可以增加,且-vv-vvv

请考虑以下例子:

  • tcpdump -i eth0 -c 50 -v通过监听接口(即有线以太网)捕获并显示50个数据包,并以冗长方式显示。eth0
  • tcpdump -i wlo1 -w data.pcap通过监听接口(WiFi接口)捕获数据包,并将数据包写入。该过程将持续,直到用户按CTRL-C中断捕获。wlo1data.pcap
  • tcpdump -i any -nn在所有接口捕获数据包,并在屏幕上显示,无需域名或协议解析。
任务三过滤表达式

虽然你可以不提供任何过滤表达式运行,但这并无实际作用。就像社交聚会一样,你不会试图同时听所有人;你更愿意把注意力放在某个特定的人或对话上。考虑到我们的网卡能接收到的包数量,不可能一次看到所有数据;我们需要具体并记录我们感兴趣的检查对象。tcpdump

按主机筛选

假设你只关心与网络打印机或特定游戏服务器交换的IP数据包。你可以用或 .在下面的终端中,我们捕获所有与 交换的数据包并保存为 。需要注意的是,捕获数据包需要你以 或 的身份登录。host IPhost HOSTNAMEexample.comhttp.pcaprootsudo

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> <span style="color:#ffaf00">sudo</span> tcpdump <span style="color:#ffaf00">host</span> example.com <span style="color:#f8f8f2">-w</span> http.pcap
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
16:49:02.482295 IP 192.168.139.132.49480 > 93.184.215.14.http: Flags [S], seq 3330895816, win 32120, options [mss 1460,sackOK,TS val 621343956 ecr 0,nop,wscale 7], length 0
16:49:02.635087 IP 93.184.215.14.http > 192.168.139.132.49480: Flags [S.], seq 2231582859, ack 3330895817, win 64240, options [mss 1460], length 0
16:49:02.635125 IP 192.168.139.132.49480 > 93.184.215.14.http: Flags [.], ack 1, win 32120, length 0
16:49:02.635491 IP 192.168.139.132.49480 > 93.184.215.14.http: Flags [P.], seq 1:131, ack 1, win 32120, length 130: HTTP: GET / HTTP/1.1
16:49:02.635580 IP 93.184.215.14.http > 192.168.139.132.49480: Flags [.], ack 131, win 64240, length 0
[...]
^C
13 packets captured
25 packets received by filter
0 packets dropped by kernel</code></span></span></span></span>

如果你想限制数据包只能来自某个源IP地址或主机名,必须使用或。同样,你可以限制数据包发送到特定目的地,使用或。src host IPsrc host HOSTNAMEdst host IPdst host HOSTNAME

按端口过滤

如果你想捕获所有DNS流量,可以限制捕获的数据包到。记住,DNS默认使用UDP和TCP端口53。在下面的例子中,我们可以看到网络卡读取的所有DNS查询。下面的终端显示了两个DNS查询:第一个查询请求 example.org 使用的IPv4地址,第二个请求与 example.org 关联的IPv6地址。port 53

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> <span style="color:#ffaf00">sudo</span> tcpdump <span style="color:#f8f8f2">-i</span> ens5 port <span style="color:#ffaf00">53</span> <span style="color:#f8f8f2">-n</span>
[sudo] password for strategos: 
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
17:26:33.591670 IP 192.168.139.132.47902 > 192.168.139.2.53: 47108+ A? example.org. (29)
17:26:33.591717 IP 192.168.139.132.47902 > 192.168.139.2.53: 5+ AAAA? example.org. (29)
17:26:33.593324 IP 192.168.139.2.53 > 192.168.139.132.47902: 47108 1/0/0 A 93.184.215.14 (45)
17:26:33.593325 IP 192.168.139.2.53 > 192.168.139.132.47902: 5 1/0/0 AAAA 2606:2800:21f:cb07:6820:80da:af6b:8b2c (57)
[...]
^C
12 packets captured
12 packets received by filter
0 packets dropped by kernel</code></span></span></span></span>

在上述示例中,我们捕获了所有发送到或从特定端口号发送的数据包。你可以分别使用和,将数据包限制为来自特定源端口号或特定目的端口号的数据包。src port PORT_NUMBERdst port PORT_NUMBER

按协议过滤

我们最后要讲的过滤类型是按协议过滤。你可以将数据包捕获限制在特定协议中;例如:、、、和。在下面的例子中,我们将数据包捕获限制在ICMP数据包内。我们可以看到ICMP回声请求和回复,这可能是有人在执行该命令的信号。还有一个ICMP时间超时;这可能是因为执行命令(如网络基础室所述)。ipip6udptcpicmppingtraceroute

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> <span style="color:#ffaf00">sudo</span> tcpdump <span style="color:#f8f8f2">-i</span> ens5 icmp <span style="color:#f8f8f2">-n</span>
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
18:11:00.624681 IP 192.168.139.132 > 93.184.215.14: ICMP echo request, id 47038, seq 1, length 64
18:11:00.781482 IP 93.184.215.14 > 192.168.139.132: ICMP echo reply, id 47038, seq 1, length 64
18:11:04.168792 IP 192.168.139.2 > 192.168.139.132: ICMP time exceeded in-transit, length 68
18:11:04.168815 IP 192.168.139.2 > 192.168.139.132: ICMP time exceeded in-transit, length 68
[...]
18:11:14.857188 IP 93.184.215.14 > 192.168.139.132: ICMP 93.184.215.14 udp port 33495 unreachable, length 68
^C
52 packets captured
52 packets received by filter
0 packets dropped by kernel</code></span></span></span></span>

逻辑算子

三个实用的逻辑算子:

  • and:捕获满足两个条件的数据包。例如,捕获流量。tcpdump host 1.1.1.1 and tcptcphost 1.1.1.1
  • or:当任一条件为真时捕获数据包。例如,捕获UDP或ICMP流量。tcpdump udp or icmp
  • not:当条件不成立时捕获数据包。例如,捕获除TCP分段外的所有数据包;我们预计在结果中会发现UDP、ICMP和ARP包。tcpdump not tcp

摘要与示例

下表总结了我们讨论的命令行选项。

指挥 解释
tcpdump host IPtcpdump host HOSTNAME 通过IP地址或主机名过滤数据包
tcpdump src host IP 通过特定源主机过滤数据包
tcpdump dst host IP 通过特定目的主机过滤数据包
tcpdump port PORT_NUMBER 按端口号过滤数据包
tcpdump src port PORT_NUMBER 通过指定的源端口号过滤数据包
tcpdump dst port PORT_NUMBER 通过指定的目的端口号过滤数据包
tcpdump PROTOCOL 按协议过滤数据包;示例包括 、 和ipip6icmp

请考虑以下例子:

  • tcpdump -i any tcp port 22在所有接口上监听,并捕获与 ,即 SSH 流量的数据包。tcpport 22
  • tcpdump -i wlo1 udp port 123通过WiFi网络卡监听并过滤流量,即网络时间协议(NTP)。udpport 123
  • tcpdump -i eth0 host example.com and tcp port 443 -w https.pcap将监听 ,有线以太网接口和与交换的过滤流量,使用和。换句话说,该命令是在过滤与 相关的 HTTPS 流量。eth0example.comtcpport 443example.com

对于本任务中的题目,我们将从文件中读取捕获的数据包。如前所述,我们用的是从数据包捕获文件读取数据。为了测试这个,试试;它应该会显示文件中的前五个数据包,而不查找IP地址。traffic.pcap-r FILEtcpdump -r traffic.pcap -c 5 -n

记住,你可以通过命令对输出进行管道数。在下面的终端中,我们可以看到有910个数据包,源IP地址设置为。请注意,我们补充说明是为了避免尝试解析IP地址时不必要的延迟。在下面的例子中,我们没有使用,因为从数据包捕获文件读取不需要权限。wc192.168.124.1-nsudoroot

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tcpdump <span style="color:#f8f8f2">-r</span> traffic.pcap src <span style="color:#ffaf00">host</span> <span style="color:#ffaf00">192.168</span>.124.1 <span style="color:#f8f8f2">-n</span> <span style="color:#f8f8f2">|</span> <span style="color:#ffaf00">wc</span>
reading from file traffic.pcap, link-type EN10MB (Ethernet)
    910   17415  140616</code></span></span></span></span>
任务四高级过滤

过滤数据包的方法还有很多。毕竟,在任何现实情况下,我们都需要过滤成千上万甚至数百万个数据包。能够准确表达要显示的数据包是不可或缺的。例如,我们可以限制显示的数据包,只显示大小于某个长度:

  • greater LENGTH: 过滤长度大于或等于指定长度的数据包
  • less LENGTH: 过滤长度小于或等于指定长度的数据包

我们建议您通过发送命令;不过,在本房间的讨论中,我们将重点介绍一个高级选项,允许你根据TCP标志过滤数据包。理解TCP标志将使我们更容易基于这些知识进行深入学习,掌握更高级的过滤技术。pcap-filterman pcap-filter

二进制运算

在继续之前,值得先了解一下二进制作。二进制运算适用于位,即零和一。一个作取一或两位,返回一位。让我们更深入地解释,并考虑以下三个二元运算:、、和。&|!

&(and) 取两位,除非两个输入都是 1,否则返回 0,如下表所示。

输入1 输入2 输入1 输入2&
0 0 0
0 1 0
1 0 0
1 1 1

|(或)取两位并返回1,除非两个输入均为0。这在下表中可见。

输入1 输入2 输入1 输入2|
0 0 0
0 1 1
1 0 1
1 1 1

!(not) 取一个位并反转它;输入为1时得到0,输入为0时得到1,如下表所示。

输入1 !输入1
0 1
1 0

头部字节

本节的目的是能够根据头部字节的内容过滤数据包。考虑以下协议:ARP、以太网、ICMP、IP、TCP 和 UDP。这些只是我们研究过的一些网络协议。我们如何告诉 Tcpdump 根据协议头字节的内容过滤数据包?(我们不会详细介绍每个协议的头部,因为这超出了本房间的范围;我们将重点讨论 TCP 标志。)

通过pcap-filter,Tcpdump允许你用以下语法引用头部中任意字节的内容,其中:proto[expr:size]

  • proto指的是协议。例如,, , , , 和 分别指 ARP、以太网、ICMP、IPv4、IPv6、TCP 和 UDParpethericmpipip6tcpudp
  • expr表示字节偏移量,其中表示第一个字节。0
  • size表示我们感兴趣的字节数,可以是一、二或四字节。它是可选的,默认是。

为了更好地理解这一点,可以参考pcap滤波器手册页面上的以下两个例子(如果你觉得难也别担心):

  • ether[0] & 1 != 0取以太网头部的第一个字节和十进制数字1(即二进制),并应用(And二进制作)。如果结果不等于数0(即,),则返回为真。该过滤器的目的是显示发送到组播地址的数据包。多播以太网地址是一种特定地址,用于识别一组旨在接收相同数据的设备。0000 0001&0000 0000
  • ip[0] & 0xf != 5取IP头部的第一个字节,并与十六进制数字F(即二进制)进行比较。如果结果不等于(十进制)5(即二进制),则返回为真。该过滤器的目的是捕获所有带有选项的IP数据包。0000 11110000 0101

如果你觉得上述两个例子复杂,也不必担心。我们把它们收录进去,是为了让你知道能实现什么;然而,完全理解上述例子并非完成此任务的必要条件。相反,我们将重点根据设置的TCP标志过滤TCP数据包。

你可以用来引用TCP标志字段。以下TCP标志可供比较:tcp[tcpflags]

  • tcp-syn TCPSYN(同步)
  • tcp-ack TCP确认(确认)
  • tcp-fin TCPFIN(终结)
  • tcp-rst TCPRST(重置)
  • tcp-push TCP

基于上述,我们可以写道:

  • 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数据包。
任务5显示数据包

Tcpdump 是一个丰富的程序,拥有多种选项来定制数据包的打印和显示方式。我们选择涵盖以下五个选项:

  • -q快速输出;打印简短的数据包信息
  • -e: 打印链路级头部
  • -A:以ASCII显示数据包数据
  • -xx: 以十六进制格式显示数据包数据,称为十六进制
  • -X: 显示数据包头部和数据,以十六进制和ASCII格式表示

为了演示上述选项如何作输出,我们将先展示两个捕获的数据包,且不使用任何额外参数。

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tcpdump <span style="color:#f8f8f2">-r</span> TwoPackets.pcap
reading from file TwoPackets.pcap, link-type EN10MB (Ethernet), snapshot length 262144
18:59:59.979771 IP 104.18.12.149.https > g5000.45248: Flags [P.], seq 2695955324:2695955349, ack 2856007037, win 16, options [nop,nop,TS val 412758285 ecr 3959057198], length 25
18:59:59.980574 IP g5000.45248 > 104.18.12.149.https: Flags [P.], seq 1:30, ack 25, win 2175, options [nop,nop,TS val 3959057384 ecr 412758285], length 29</code></span></span></span></span>

简要资料包信息

如果你喜欢较短的输出线路,可以选择带有 的“快速”输出。以下示例展示了时间戳,以及源和目的 IP 地址以及源端口号。-q

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tcpdump <span style="color:#f8f8f2">-r</span> TwoPackets.pcap <span style="color:#f8f8f2">-q</span>
reading from file TwoPackets.pcap, link-type EN10MB (Ethernet), snapshot length 262144
18:59:59.979771 IP 104.18.12.149.https > g5000.45248: tcp 25
18:59:59.980574 IP g5000.45248 > 104.18.12.149.https: tcp 29</code></span></span></span></span>

显示链路级头部

如果你在以太网或WiFi网络上,想在Tcpdump输出中包含MAC地址,只需添加。这在学习特定协议(如ARP和DHCP的工作原理)时非常方便。它还能帮助你追踪网络中异常数据包的来源。-e

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tcpdump <span style="color:#f8f8f2">-r</span> TwoPackets.pcap <span style="color:#f8f8f2">-e</span>
reading from file TwoPackets.pcap, link-type EN10MB (Ethernet), snapshot length 262144
18:59:59.979771 44:df:65:d8:fe:6c (oui Unknown) > 02:83:1e:40:5d:17 (oui Unknown), ethertype IPv4 (0x0800), length 91: 104.18.12.149.https > g5000.45248: Flags [P.], seq 2695955324:2695955349, ack 2856007037, win 16, options [nop,nop,TS val 412758285 ecr 3959057198], length 25
18:59:59.980574 02:83:1e:40:5d:17 (oui Unknown) > 44:df:65:d8:fe:6c (oui Unknown), ethertype IPv4 (0x0800), length 95: g5000.45248 > 104.18.12.149.https: Flags [P.], seq 1:30, ack 25, win 2175, options [nop,nop,TS val 3959057384 ecr 412758285], length 29</code></span></span></span></span>

以 ASCII 形式显示数据包

ASCII 代表美国信息交换标准代码;ASCII码代表文本。换句话说,你可以预期显示所有映射到英文字母、数字和符号的字节。-A

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tcpdump <span style="color:#f8f8f2">-r</span> TwoPackets.pcap <span style="color:#f8f8f2">-A</span>
reading from file TwoPackets.pcap, link-type EN10MB (Ethernet), snapshot length 262144
18:59:59.979771 IP 104.18.12.149.https > g5000.45248: Flags [P.], seq 2695955324:2695955349, ack 2856007037, win 16, options [nop,nop,TS val 412758285 ecr 3959057198], length 25
E..M..@.5..)h.....BY.......|.;5}...........
..1...k......j.3.2.....&9a.....-L
18:59:59.980574 IP g5000.45248 > 104.18.12.149.https: Flags [P.], seq 1:30, ack 25, win 2175, options [nop,nop,TS val 3959057384 ecr 412758285], length 29
E..Ql.@.@.VV..BYh........;5}...............
..k...1.......1.y.&VC<#._J$..z...D#.`</code></span></span></span></span>

以十六进制格式显示数据包

当数据包内容为纯文本英文时,ASCII格式表现良好。如果内容经过加密甚至压缩,它就无法使用。此外,对于不使用英语字母表的语言,它也无法使用。因此,我们需要另一种方式来显示包内容,无论格式如何。由于8位,任何八位元组都可以显示为两个十六进制数字。(每个十六进制数字代表4位。)为了以十六进制格式显示数据包,我们必须添加如下终端所示的 。-xx

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tcpdump <span style="color:#f8f8f2">-r</span> TwoPackets.pcap <span style="color:#f8f8f2">-xx</span>
reading from file TwoPackets.pcap, link-type EN10MB (Ethernet), snapshot length 262144
18:59:59.979771 IP 104.18.12.149.https > g5000.45248: Flags [P.], seq 2695955324:2695955349, ack 2856007037, win 16, options [nop,nop,TS val 412758285 ecr 3959057198], length 25
        0x0000:  0283 1e40 5d17 44df 65d8 fe6c 0800 4500
        0x0010:  004d fbd8 4000 3506 d229 6812 0c95 c0a8
        0x0020:  4259 01bb b0c0 a0b1 037c aa3b 357d 8018
        0x0030:  0010 f905 0000 0101 080a 189a 310d ebfa
        0x0040:  6b2e 1703 0300 146a 8f33 1832 e6a2 fb99
        0x0050:  eb26 3961 dad4 1611 152d 4c
18:59:59.980574 IP g5000.45248 > 104.18.12.149.https: Flags [P.], seq 1:30, ack 25, win 2175, options [nop,nop,TS val 3959057384 ecr 412758285], length 29
        0x0000:  44df 65d8 fe6c 0283 1e40 5d17 0800 4500
        0x0010:  0051 6ca8 4000 4006 5656 c0a8 4259 6812
        0x0020:  0c95 b0c0 01bb aa3b 357d a0b1 0395 8018
        0x0030:  087f 17e0 0000 0101 080a ebfa 6be8 189a
        0x0040:  310d 1703 0300 18f4 31fa 798d 2656 433c
        0x0050:  2389 5f4a 24c2 fa7a 1496 8444 238e 60</code></span></span></span></span>

加法可以让我们逐个八位元组查看数据包。在上述示例中,我们可以仔细检查 IP 和 TCP 头部,除了数据包内容外。-xx

两全其美

如果你想以十六进制和ASCII格式显示捕获的数据包,Tcpdump 提供了这个选项,非常方便。-X

航站楼
<span style="color:#151c2b"><span style="background-color:#ffffff"><span style="background-color:#282c33"><span style="color:#bac8d4"><code class="language-shell-session"><span style="color:#f8f8f2"><span style="color:#bac8d4">user@TryHackMe</span></span><span style="color:#fd971f"><strong>$</strong></span> tcpdump <span style="color:#f8f8f2">-r</span> TwoPackets.pcap <span style="color:#f8f8f2">-X</span>
reading from file TwoPackets.pcap, link-type EN10MB (Ethernet), snapshot length 262144
18:59:59.979771 IP 104.18.12.149.https > g5000.45248: Flags [P.], seq 2695955324:2695955349, ack 2856007037, win 16, options [nop,nop,TS val 412758285 ecr 3959057198], length 25
        0x0000:  4500 004d fbd8 4000 3506 d229 6812 0c95  E..M..@.5..)h...
        0x0010:  c0a8 4259 01bb b0c0 a0b1 037c aa3b 357d  ..BY.......|.;5}
        0x0020:  8018 0010 f905 0000 0101 080a 189a 310d  ..............1.
        0x0030:  ebfa 6b2e 1703 0300 146a 8f33 1832 e6a2  ..k......j.3.2..
        0x0040:  fb99 eb26 3961 dad4 1611 152d 4c         ...&9a.....-L
18:59:59.980574 IP g5000.45248 > 104.18.12.149.https: Flags [P.], seq 1:30, ack 25, win 2175, options [nop,nop,TS val 3959057384 ecr 412758285], length 29
        0x0000:  4500 0051 6ca8 4000 4006 5656 c0a8 4259  E..Ql.@.@.VV..BY
        0x0010:  6812 0c95 b0c0 01bb aa3b 357d a0b1 0395  h........;5}....
        0x0020:  8018 087f 17e0 0000 0101 080a ebfa 6be8  ..............k.
        0x0030:  189a 310d 1703 0300 18f4 31fa 798d 2656  ..1.......1.y.&V
        0x0040:  433c 2389 5f4a 24c2 fa7a 1496 8444 238e  C<#._J$..z...D#.
        0x0050:  60</code></span></span></span></span>

摘要与示例

下表总结了我们讨论的命令行选项。

指挥 解释
tcpdump -q 简短而安静:简要的信息包
tcpdump -e 包含MAC地址
tcpdump -A 打印数据包作为ASCII编码
tcpdump -xx 以十六进制格式显示数据包
tcpdump -X 显示十六进制和ASCII格式的数据包
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐