tryhackme-Cyber Security 101-Networking-Tcpdump: The Basics(tcpdump:基础知识)

了解如何使用 Tcpdump 保存、筛选和显示数据包。

任务1:介绍

研究网络协议时的主要挑战是,我们没有机会看到正在进行的协议 “对话”。所有技术复杂性都隐藏在友好而优雅的用户界面后面。您访问本地网络上的资源,但从未看到 ARP 查询。同样,您将访问 Internet 服务多年,但看不到一次三次握手,直到您查看网络书籍或检查网络流量捕获。最好的学习辅助工具是捕获网络流量并仔细研究各种协议;这有助于我们更好地了解网络的工作原理。

这个房间介绍了一些使用 Tcpdump 的基本命令行参数。Tcpdump 工具及其库是用 C 和 C++ 编写的,并于 1980 年代末或 1990 年代初针对类 Unix 系统发布。因此,它们非常稳定并提供最佳速度。该库是当今各种其他网络工具的基础。此外,它被移植到 MS Windows 上。libpcaplibpcapwinpcap

学习目标

这个房间旨在为您提供必要的基础知识 使用 .特别是,您将学习如何:tcpdump

  • 捕获数据包并将其保存到文件中
  • 对捕获的数据包设置过滤器
  • 控制捕获数据包的显示方式

会议室先决条件

我们建议用户熟悉 TCP/IP 模型、其相关概念及其各种协议。以下房间提供必要的知识,以充分利用这个房间:

点击 Start Machine 按钮,等待它启动,然后继续操作。一个终端将显示在您的浏览器中。

它使用以下 SSH 凭证,以备不时之需:

  • 用户名:user
  • 密码:THM123

任务2:基本数据包捕获

您可以在不提供任何参数的情况下运行;但是,这仅对测试您是否安装了它有用!在任何实际场景中,我们都必须明确要监听什么、在哪里写入以及如何显示数据包。tcpdump

指定网络接口

首先要决定的是要监听哪个网络接口。您可以选择使用 -i INTERFACE ;或者,您可以指定要侦听的接口-i any,例如 -i eth0.

诸如 (或仅 ip a s ) 之类的命令将列出可用的网络接口。在下面的终端中,除了环回地址外,我们还看到一个网卡ens5 sens5

保存捕获的数据包

在许多情况下,您应该稍后再次检查捕获的数据包。这可以通过使用-w FILE 存储到文件来实现。文件扩展名通常设置为.pcap.以后可以使用其他程序(如 Wireshark)检查保存的数据包。选择-w option该选项时,您不会看到数据包滚动。

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

您可以使用 Tcpdump(-r FILE) 从文件中读取数据包。这对于了解协议行为非常有用。您可以在适当的时间范围内捕获网络流量以检查特定协议,然后在应用过滤器以显示您感兴趣的数据包的同时读取捕获的文件。此外,它可能是一个包含已发生的网络攻击的数据包捕获文件,您可以检查它以分析攻击。

限制捕获的数据包数量

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

不解析 IP 地址和端口号

Tcpdump 将尽可能解析 IP 地址并打印友好域名。为避免进行此类 DNS 查找,您可以使用 -n .同样,如果您不希望解析端口号-nn(例如解析为 80),则可以使用 停止 DNS 和端口号查找。请考虑下面终端中显示的以下示例。我们捕获并显示 5 个数据包,但没有解析 IP 地址。

生成 (更多) 详细输出

如果要打印有关数据包的更多详细信息,可以使用 来生成稍微详细的输出。根据 Tcpdump 手册页 (),添加 将打印 “the time to live, identification, total length and options in an IP packet” 以及其他检查。这将产生更详细的输出;将提供更多的冗长;有关详细信息,请查看手册页。

总结和示例

下表提供了我们介绍的命令行选项的摘要。

命令解释
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捕获所有接口上的数据包,并在屏幕上显示,无需域名或协议解析。

任务3:筛选表达式

尽管您可以在不提供任何筛选表达式的情况下运行,但这没有用。就像在社交聚会中一样,你不要试图同时倾听每个人的声音;您宁愿将注意力放在特定的人或对话上。考虑到我们网卡看到的数据包数量,不可能一次看到所有内容;我们需要具体并捕捉我们有兴趣检查的内容。tcpdump

按主机筛选

假设您只对与网络打印机或特定游戏服务器交换的 IP 数据包感兴趣。您可以使用 或 轻松地将捕获的数据包限制到此主机。在下面的终端中,我们捕获所有 交换的数据包并将其保存到http.pcap 。请务必注意,捕获数据包需要您以 sudo执行

sudo tcpdump host example.com -w http.pcap

如果要将数据包限制为来自特定源 IP 地址或主机名的数据包,则必须使用 src host IP or src host HOSTNAME. 。同样,您可以使用 dst host IP or dst host HOSTNAME 将数据包限制为发送到特定目标的数据包。

按端口筛选

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

sudo tcpdump -i ens5 port 53 -n

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

按协议筛选

我们将介绍的最后一种过滤类型是按协议过滤。您可以将数据包捕获限制为特定协议;示例包括: ipip6udptcp, icmp。在下面的示例中,我们将数据包捕获限制为 ICMP 数据包。我们可以看到 ICMP 回显请求和回复,这可能表明有人正在运行该命令。还超过了 ICMP 时间;这可能是由于运行了该命令(如 Networking Essentials 会议室中所述)。

sudo tcpdump -i ens5 icmp -n

逻辑运算符

三个可能很方便的逻辑运算符:

  • and:捕获两个条件都为 true 的数据包。例如,使用 捕获流量。tcpdump host 1.1.1.1 and tcptcphost 1.1.1.1
  • or:当任一条件为 true 时捕获数据包。例如,捕获 UDP 或 ICMP 流量。tcpdump udp or icmp
  • not:当条件不为 true 时捕获数据包。例如,捕获除 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

tcpdump -r traffic.pcap src host 192.168.124.1 -n | wc

任务4:高级筛选

还有更多方法可以过滤数据包。毕竟,在任何现实生活中,我们都需要过滤成千上万甚至数百万个数据包。能够表达要显示的确切数据包是必不可少的。例如,我们可以将显示的数据包限制为小于或大于特定长度的数据包:

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

我们建议您通过发出命令来检查手册页;但是,对于此房间,我们将重点介绍一个高级选项,该选项允许您根据 TCP 标志筛选数据包。了解 TCP 标志将很容易建立这些知识并掌握更高级的过滤技术。pcap-filterman pcap-filter

二进制操作

在继续之前,值得访问二元运算。二进制运算适用于位,即 0 和 1。操作采用 1 或 2 位并返回 1 位。让我们更深入地解释并考虑以下三个二进制运算:、 和 。&|!

&(And) 采用 2 位并返回 0,除非两个输入均为 1,如下表所示。

输入 1输入 2输入 1 输入 2&
000
010
100
111

|(Or) 采用两位并返回 1,除非两个输入均为 0。这如下表所示。

输入 1输入 2输入 1 输入 2|
000
011
101
111

!(Not) 取一个 bit 并反转它;输入 1 表示 0,输入 0 表示 1,如下表所示。

输入 1!输入 1
01
10

标头字节数

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

使用 pcap-filter,Tcpdump 允许您使用以下语法引用标头中任何字节的内容,其中:proto[expr:size]

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

为了更好地理解这一点,请考虑 pcap-filter 手册页中的以下两个示例(如果您觉得它们很难,请不要担心):

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

如果您发现上述两个示例很复杂,请不要担心。我们将它们包括在内,以便您知道您可以使用它来实现什么;但是,完全理解上述示例并不是完成此任务的必要条件。相反,我们将专注于根据设置的 TCP 标志过滤 TCP 数据包。

可用于引用 TCP flags 字段。以下 TCP 标志可用于比较:tcp[tcpflags]

  • tcp-syn TCP 协议SYN (同步)
  • tcp-ack TCP 协议ACK (确认)
  • tcp-fin TCP 协议FIN (完成)
  • tcp-rst TCP 协议RST (重置)
  • tcp-push TCP 协议

基于以上,我们可以写成:

  • tcpdump "tcp[tcpflags] == tcp-syn"捕获设置了 SYN (Synchronize) 标志的 TCP 数据包,而所有其他标志均未设置。
  • tcpdump "tcp[tcpflags] & tcp-syn != 0"捕获至少设置了 SYN (Synchronize) 标志的 TCP 数据包。
  • tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"捕获至少设置了 SYN (Synchronize)  ACK (Acknowledge) 标志的 TCP 数据包。

您可以根据要查找的内容编写自己的过滤器。

 tcpdump -r traffic.pcap "tcp[tcpflags]==tcp-rst" | wc -l

tcpdump -r traffic.pcap greater 15000 -n -c 1

任务5:显示数据包

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

  • -q:快速输出;打印 Brief 数据包信息
  • -e:打印链接级标题
  • -A:以 ASCII 格式显示数据包数据
  • -xx:以十六进制格式显示数据包数据,称为十六进制
  • -X:以十六进制和 ASCII 格式显示数据包标头和数据

为了演示上述选项如何操作输出,我们将首先显示两个捕获的数据包,而不使用任何其他参数。

终端

简要数据包信息

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

终端

显示链接级标头

如果您使用的是以太网或 WiFi 网络,并且希望在 Tcpdump 输出中包含 MAC 地址,则只需添加 .当您学习特定协议(如 ARP 和 DHCP)的工作原理时,这很方便。它还可以帮助您跟踪网络上任何异常数据包的来源。-e

终端

将数据包显示为 ASCII

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

终端

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

当数据包内容为纯文本英文时,ASCII 格式效果很好。如果内容经过加密甚至压缩,它将不起作用。此外,它不适用于不使用英文字母的语言。因此,我们需要另一种方法来显示数据包内容,而不管格式如何。由于 8 位,任何八位字节都可以显示为两个十六进制数字。(每个十六进制数字代表 4 位。要以十六进制格式显示数据包,我们必须添加,如下面的终端所示。-xx

终端

添加后,我们可以逐个查看数据包八位字节。在上面的示例中,除了数据包内容之外,我们还可以仔细检查 IP 和 TCP 报头。-xx

两全其美

如果您想以十六进制和 ASCII 格式显示捕获的数据包,Tcpdump 可以通过该选项轻松实现。-X

终端

总结和示例

下表提供了我们介绍的命令行选项的摘要。

命令解释
tcpdump -q快速而安静:简短的数据包信息
tcpdump -e包括 MAC 地址
tcpdump -A将数据包打印为 ASCII 编码
tcpdump -xx以十六进制格式显示数据包
tcpdump -X以十六进制和 ASCII 格式显示数据包

用-e参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值