Featured image of post 网络核心协议

网络核心协议

常见基础的网络核心协议

DNS:记住地址

您记得您最喜欢的网站的 IP 地址吗?除非是本地设备的私有 IP 地址,否则没有人需要担心记住 IP 地址。这部分是由于域名系统 (DNS) 负责将域名正确映射到 IP 地址。

DNS 在应用层(即 ISO OSI 模型的第 7 层)运行。DNS 流量默认使用 UDP 端口 53, 使用 TCP 端口 53 作为默认回退。DNS 记录有多种类型;但是,在本任务中,我们将重点介绍以下四个方面:

A record:A (Address) 记录将主机名映射到一个或多个 IPv4 地址。例如,您可以将 example.com 设置为 resolve 为 172.17.2.172

AAAA Record:AAAA 记录类似于 A 记录,但它适用于 IPv6。请记住,它是 AAAA(四 A),因为 AA 和 AAA 指的是电池尺寸;此外,AAA 是指 Authentication、Authorization 和 Accounting;两者都不属于 DNS。

CNAME Record:CNAME (Canonical Name) 记录将一个域名映射到另一个域名。例如,www.example.com 可以映射到 example.com 甚至 example.org

MX Record:MX (Mail Exchange) 记录指定负责处理域电子邮件的邮件服务器。

换句话说,当您在浏览器中键入 example.com 时,浏览器会尝试通过查询 DNS 服务器来查询 A 记录来解析此域名。但是,当您尝试向 test@example.com 发送电子邮件时,邮件服务器将查询 DNS 服务器以查找 MX 记录。

如果要从命令行查找域的 IP 地址,可以使用 nslookup 等工具。考虑下面终端中我们查找 example.com 的示例。

1
2
3
4
5
6
7
8
9
user@TryHackMe$ nslookup www.example.com
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   www.example.com
Address: 93.184.215.14
Name:   www.example.com
Address: 2606:2800:21f:cb07:6820:80da:af6b:8b2c

上面的查询导致了四个数据包。在下面的终端中,我们可以看到第一个和第三个数据包分别发送了 A 和 AAAA 记录的 DNS 查询。第二个和第四个数据包显示 DNS 查询响应。

1
2
3
4
5
user@TryHackMe$ tshark -r dns-query.pcapng -Nn
    1 0.000000000 192.168.66.89 → 192.168.66.1 DNS 86 Standard query 0x2e0f A www.example.com OPT
    2 0.059049584 192.168.66.1 → 192.168.66.89 DNS 102 Standard query response 0x2e0f A www.example.com A 93.184.215.14 OPT
    3 0.059721705 192.168.66.89 → 192.168.66.1 DNS 86 Standard query 0x96e1 AAAA www.example.com OPT
    4 0.101568276 192.168.66.1 → 192.168.66.89 DNS 114 Standard query response 0x96e1 AAAA www.example.com AAAA 2606:2800:21f:cb07:6820:80da:af6b:8b2c OPT

WHOIS

在上一个任务中,我们介绍了如何将域名解析为 IP 地址。但是,要实现此目的,需要有人有权为域设置 A、AAAA 和 MX 记录以及其他 DNS 记录。注册域名的人被授予此权力。因此,如果您注册 example.com,则可以为 example.com 设置任何有效的 DNS 记录。

您可以注册任何可用的域名一年或多年。您需要支付年费,并且需要提供作为注册人的准确联系信息 。此信息是通过 WHOIS 记录提供的数据的一部分,并且是公开的。(虽然 WHOIS 是大写的,但它不是首字母缩略词;它的发音是 who。但是,如果您想在不公开透露联系信息的情况下注册域,请不要担心;您可以使用其中一种隐私服务,从 WHOIS 记录中隐藏您的所有信息。

您可以使用在线服务之一或通过命令行工具 whois 查找任何注册域名的 WHOIS 记录,该工具可在 Linux 系统上使用,等等。正如预期的那样,WHOIS 记录提供了有关注册域名的实体的信息,包括名称、电话号码、电子邮件和地址。在下面显示的屏幕截图中,您可以看到记录的首次创建时间和上次更新时间。此外,您可以找到注册人的姓名、地址、电话和电子邮件。

image-20250408013007754

在下面的终端输出中,我们使用了 whois 命令来查找其 WHOIS 记录受隐私保护保护的域。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
user@TryHackMe$ whois [REDACTED].com
[...]
Domain Name: [REDACTED].COM
Registry Domain ID: [REDACTED]
Registrar WHOIS Server: whois.godaddy.com
Registrar URL: https://www.godaddy.com
Updated Date: 2017-07-05T16:02:43Z
Creation Date: 1993-04-02T00:00:00Z
Registrar Registration Expiration Date: 2026-10-20T14:56:17Z
Registrar: GoDaddy.com, LLC
Registrar IANA ID: 146
Registrar Abuse Contact Email: abuse@godaddy.com
Registrar Abuse Contact Phone: +1.4806242505
[...]
Registrant Name: Registration Private
Registrant Organization: Domains By Proxy, LLC
Registrant Street: DomainsByProxy.com
[...]

HTTP(S):访问web

当您启动浏览器时,您主要使用 HTTP 和 HTTPS 协议。HTTP 代表超文本传输协议;HTTPS 中的 S 代表安全。此协议依赖于 TCP 并定义 Web 浏览器与 Web 服务器的通信方式。

您的 Web 浏览器通常向 Web 服务器发出的一些命令或方法是:

  • GET 从服务器检索数据,例如 HTML 文件或图像。
  • POST 允许我们向服务器提交新数据,例如提交表单或上传文件。
  • PUT 用于在服务器上创建新资源以及更新和覆盖现有信息。
  • DELETE,顾名思义,用于删除服务器上的指定文件或资源。

HTTP 和 HTTPS 通常分别使用 TCP 端口 80 和 443,其他端口(如 8080 和 8443)不太常用。

在以下示例中,我们使用 Firefox 浏览器访问 10.10.28.0 上的 Web 服务器。我们的浏览器获取网页并完美地显示它;但是,我们对幕后发生的事情感兴趣。

image-20250408013655738

使用 Wireshark,我们可以更仔细地检查 Firefox 浏览器和 Web 服务器之间的交换。下面来自 Wireshark 的屏幕截图以红色显示我们的浏览器发送的文本,以蓝色显示 Web 服务器响应。正如你所看到的,客户端和服务器之间交换了很多信息,这些信息没有呈现给用户。示例包括 Web 服务器版本和上次修改页面的时间。

image-20250408014341240

FTP:传输文件

与旨在检索网页的 HTTP 不同,文件传输协议 (FTP) 旨在传输文件。因此,FTP 对于文件传输非常有效,当所有条件都相同时,它可以实现比 HTTP 更高的速度。

FTP 协议定义的命令示例包括:

  • USER 用于输入用户名
  • PASS 输入密码
  • RETR (retrieve) 用于将文件从 FTP 服务器下载到客户端。
  • STOR(存储)用于将文件从客户端上传到 FTP 服务器。

FTP 服务器默认监听 TCP 端口 21;数据传输是通过从客户端到服务器的另一个连接进行的。

在下面的终端中,我们执行命令 ftp 10.10.28.0 以使用本地 ftp 客户端连接到远程 FTP 服务器。然后我们执行以下步骤:

  • 我们使用用户名 anonymous 登录
  • 我们不需要提供任何密码
  • 发出 ls 返回可供下载的文件列表
  • 键入 ASCII 切换到 ASCII 模式,因为这是一个文本文件
  • get coffee.txt 允许我们检索所需的文件

通过 FTP 客户端进行的命令交换显示在下面的终端中。

 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
user@TryHackMe$ ftp 10.10.28.0
Connected to 10.10.28.0 (10.10.28.0).
220 (vsFTPd 3.0.5)
Name (10.10.28.0:strategos): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,10,41,192,134,10).
150 Here comes the directory listing.
-rw-r--r--    1 0        0            1480 Jun 27 08:03 coffee.txt
-rw-r--r--    1 0        0              14 Jun 27 08:04 flag.txt
-rw-r--r--    1 0        0            1595 Jun 27 08:05 tea.txt
226 Directory send OK.
ftp> type ascii
200 Switching to ASCII mode.
ftp> get coffee.txt
local: coffee.txt remote: coffee.txt
227 Entering Passive Mode (10,10,41,192,57,100).
150 Opening BINARY mode data connection for coffee.txt (1480 bytes).
WARNING! 47 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 Transfer complete.
1480 bytes received in 8e-05 secs (18500.00 Kbytes/sec)
ftp> quit
221 Goodbye.

我们使用 Wireshark 更仔细地检查交换的消息。客户端的消息为红色 ,而服务器的响应为蓝色 。请注意客户端和服务器之间的各种命令有何不同。例如,当您在客户端上键入 ls 时,客户端会将 LIST 发送到服务器。最后要注意的一点是,目录列表和我们下载的文件都是通过单独的连接发送的。

image-20250408015001388

SMTP:发送电子邮件

与浏览 Web 和下载文件一样,发送电子邮件需要自己的协议。Simple Mail Transfer Protocol (SMTP) 定义邮件客户端如何与邮件服务器通信,以及邮件服务器如何与另一个邮件服务器通信。

SMTP 协议的类比是当您去当地邮局发送包裹时。您向员工打招呼,告诉他们您想将包裹寄往何处,并在将包裹交给他们之前提供发件人的信息。根据您所在的国家/地区,系统可能会要求您出示身份证。此过程与 SMTP 会话没有太大区别。

让我们介绍一下您的邮件客户端在将电子邮件传输到 SMTP 服务器时使用的一些命令:

  • HELOEHLO 启动 SMTP 会话
  • MAIL FROM 指定发件人的电子邮件地址
  • RCPT TO 指定收件人的电子邮件地址
  • DATA 表示客户端将开始发送电子邮件内容
  • . 单独在一行上发送,以指示电子邮件消息的结尾

下面的终端显示了通过 telnet 发送的电子邮件示例。 默认情况下,SMTP 服务器侦听 TCP 端口 25。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
user@TryHackMe$ telnet 10.10.28.0 25
Trying 10.10.28.0...
Connected to 10.10.28.0.
Escape character is '^]'.
220 example.thm ESMTP Exim 4.95 Ubuntu Thu, 27 Jun 2024 16:18:09 +0000
HELO client.thm
250 example.thm Hello client.thm [10.11.81.126]
MAIL FROM: <user@client.thm>
250 OK
RCPT TO: <strategos@server.thm>
250 Accepted
DATA
354 Enter message, ending with "." on a line by itself
From: user@client.thm
To: strategos@server.thm
Subject: Telnet email

Hello. I am using telnet to send you an email!
.
250 OK id=1sMrpq-0001Ah-UT
QUIT
221 example.thm closing connection
Connection closed by foreign host.

显然,使用 telnet 发送电子邮件非常麻烦;但是,它可以帮助您更好地了解电子邮件客户端在后台发出的命令。Wireshark 捕获以颜色显示交换;客户端的消息为红色,而服务器的响应为蓝色。

image-20250408015332773

POP3:接收电子邮件

您收到了一封电子邮件,并希望将其下载到本地邮件客户端。邮局协议版本 3 (POP3) 旨在允许客户端与邮件服务器通信并检索电子邮件消息。

无需深入的技术细节,电子邮件客户端依靠 SMTP 发送其消息,并使用 POP3 检索它们。SMTP 类似于将信封或包裹交给邮局, 而 POP3 类似于检查本地邮箱是否有新的信件或包裹。

image-20250408015500912

一些常见的 POP3 命令包括:

  • USER <username> 标识用户
  • PASS <password> 提供用户的密码
  • STAT 请求消息数和总大小
  • LIST 列出所有邮件及其大小
  • RETR <message_number> 检索指定的消息
  • DELE <message_number> 将邮件标记为删除
  • QUIT 结束 POP3 会话,应用更改,例如删除

在下面的终端中,我们可以看到一个通过 telnet 的 POP3 会话。由于 POP3 服务器默认监听 TCP 端口 110,因此连接到 TELNET 端口的命令是 telnet 10.10.28.0 110。下面的 exchange 检索在上一个任务中发送的电子邮件。

 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
user@TryHackMe$ telnet 10.10.28.0 110
Trying 10.10.28.0...
Connected to 10.10.28.0.
Escape character is '^]'.
+OK [XCLIENT] Dovecot (Ubuntu) ready.
AUTH
+OK
PLAIN
.
USER strategos
+OK
PASS 
+OK Logged in.
STAT
+OK 3 1264
LIST
+OK 3 messages:
1 407
2 412
3 445
.
RETR 3
+OK 445 octets
Return-path: <user@client.thm>
Envelope-to: strategos@server.thm
Delivery-date: Thu, 27 Jun 2024 16:19:35 +0000
Received: from [10.11.81.126] (helo=client.thm)
        by example.thm with smtp (Exim 4.95)
        (envelope-from <user@client.thm>)
        id 1sMrpq-0001Ah-UT
        for strategos@server.thm;
        Thu, 27 Jun 2024 16:19:35 +0000
From: user@client.thm
To: strategos@server.thm
Subject: Telnet email

Hello. I am using telnet to send you an email!
.
QUIT
+OK Logging out.
Connection closed by foreign host.

捕获网络数据包的人将能够拦截交换的流量。根据之前的 Wireshark 捕获,红色的命令由客户端发送,蓝色的行是服务器的命令。同样明显的是,捕获流量的人可以读取密码。

image-20250408015643633

IMAP:同步电子邮件

POP3协议适用于单一设备场景(如您个人电脑上的常用邮件客户端)。然而,若您需要从办公室台式机、笔记本电脑或智能手机等多台设备访问邮箱,POP3的局限性便显现出来——它在客户端下载邮件后默认删除服务器上的副本,导致其他设备无法获取已下载的邮件。此时,您需改用支持多设备同步的协议,例如IMAP(互联网邮件访问协议)。IMAP会将邮件保留在服务器,并同步各设备的操作(如已读/删除标记),确保所有终端保持一致的邮箱状态。

IMAP 允许同步已读、已移动和已删除的邮件。当您通过多个客户端查看电子邮件时,IMAP 非常方便。 与 POP3 不同,POP3 在从远程服务器下载和删除电子邮件时往往会最大限度地减少服务器存储空间,而 IMAP 往往会使用更多存储空间,因为电子邮件保存在服务器上并在电子邮件客户端之间同步。

IMAP 协议命令比 POP3 协议命令更复杂。我们在下面列出了几个示例:

  • LOGIN <username> <password> 验证用户身份
  • SELECT <mailbox> 选择要使用的邮箱文件夹
  • FETCH <mail_number> <data_item_name> 示例 fetch 3 body[] 来获取消息编号 3、标头和正文。
  • MOVE <sequence_set> <mailbox> 将指定的邮件移动到另一个邮箱
  • COPY <sequence_set> <data_item_name> 将指定的邮件复制到另一个邮箱
  • LOGOUT 注销

知道 IMAP 服务器默认监听 TCP 端口 143,我们将使用 telnet 连接到 10.10.28.0 的端口 143 并获取我们在之前任务中发送的消息。

 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
user@TryHackMe$ telnet 10.10.41.192 143
Trying 10.10.41.192...
Connected to 10.10.41.192.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN] Dovecot (Ubuntu) ready.
A LOGIN strategos
A OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LITERAL+ NOTIFY SPECIAL-USE] Logged in
B SELECT inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 4 EXISTS
* 0 RECENT
* OK [UNSEEN 2] First unseen.
* OK [UIDVALIDITY 1719824692] UIDs valid
* OK [UIDNEXT 5] Predicted next UID
B OK [READ-WRITE] Select completed (0.001 + 0.000 secs).
C FETCH 3 body[]
* 3 FETCH (BODY[] {445}
Return-path: <user@client.thm>
Envelope-to: strategos@server.thm
Delivery-date: Thu, 27 Jun 2024 16:19:35 +0000
Received: from [10.11.81.126] (helo=client.thm)
        by example.thm with smtp (Exim 4.95)
        (envelope-from <user@client.thm>)
        id 1sMrpq-0001Ah-UT
        for strategos@server.thm;
        Thu, 27 Jun 2024 16:19:35 +0000
From: user@client.thm
To: strategos@server.thm
Subject: Telnet email

Hello. I am using telnet to send you an email!
)
C OK Fetch completed (0.001 + 0.000 secs).
D LOGOUT
* BYE Logging out
D OK Logout completed (0.001 + 0.000 secs).
Connection closed by foreign host.

下面的屏幕截图显示了从 Wireshark 中看到的客户端和服务器之间交换的消息。客户端只需要发送四个命令,以红色显示,“长”服务器响应以蓝色显示。

image-20250408020556204

总结

协议 传输协议 默认端口号
TELNET TCP 23
DNS UDP 或 TCP 53
HTTP TCP 80
HTTPS TCP 443
FTP TCP 21
SMTP TCP 25
POP3 TCP 110
IMAP TCP 143
使用 Hugo 构建
主题 StackJimmy 设计