如何使用 Netcat 创建和测试 TCP 和 UDP 连接

0 股票
0
0
0
0

介绍

Linux 以其在大多数发行版中拥有大量成熟且实用的命令行工具而闻名。通常,系统管理员可以使用内置工具完成许多任务,而无需安装额外的软件。在本指南中,我们将讨论如何使用 netcat 工具。这个功能强大的命令可以帮助您监控、测试网络连接以及通过网络连接发送数据。几乎所有现代 Linux 发行版都预装了 netcat。Ubuntu 自带 BSD 版本的 netcat,本指南将使用该版本。其他版本可能工作方式不同或提供其他选项。.

一般说明

默认情况下,netcat 通过与远程主机建立 TCP 连接来工作。.

最基本的命令是:

netcat [options] host port

此命令尝试通过指定的端口号与指定主机建立 TCP 连接。这类似于旧版的 Linux telnet 命令。请注意,您的连接并未完全加密。.

如果你想发送UDP数据包而不是建立TCP连接,可以使用-u选项:

netcat -u host port

您可以通过在第一个端口和最后一个端口之间添加短横线来指定端口范围:

netcat host startport-endport

这通常会与一些额外的标志一起使用。.

在大多数系统中,我们可以互换使用netcat或nc。它们是同一个命令的别名。.

使用 Netcat 进行端口扫描的命令

netcat 最常见的用途之一是作为端口扫描器。虽然 netcat 可能不是执行此任务的最佳工具(在大多数情况下,nmap 是更好的选择),但它可以执行简单的端口扫描,轻松识别开放端口。我们可以通过指定要扫描的端口范围来实现这一点,就像上面那样,并使用 -z 选项来执行扫描而不是尝试建立连接。.

例如,我们可以通过发出以下命令扫描所有端口(最大到 1000):

netcat -z -v domain.com 1-1000

除了 -z 选项之外,我们还指定了 -v 选项,以告诉 netcat 提供更详细的信息。.

输出结果如下:

Output
nc: connect to domain.com port 1 (tcp) failed: Connection refused
nc: connect to domain.com port 2 (tcp) failed: Connection refused
nc: connect to domain.com port 3 (tcp) failed: Connection refused
nc: connect to domain.com port 4 (tcp) failed: Connection refused
nc: connect to domain.com port 5 (tcp) failed: Connection refused
nc: connect to domain.com port 6 (tcp) failed: Connection refused
nc: connect to domain.com port 7 (tcp) failed: Connection refused
. . .
Connection to domain.com 22 port [tcp/ssh] succeeded!
. . .

如您所见,这里提供了大量信息,并告知您每个端口的扫描是否成功。如果您确实使用了域名,则应使用此表单。.

但是,如果您知道所需的 IP 地址,扫描速度会快得多。您可以使用 -n 标志来指定不需要使用 DNS 解析 IP 地址:

netcat -z -n -v 198.51.100.0 1-1000

返回的消息实际上会发送到标准错误输出(更多信息请参阅我们的 I/O 重定向文章)。我们可以将标准错误消息发送到标准输出,这样可以更轻松地筛选结果。.

我们使用 bash 语法 2>&1 将标准错误重定向到标准输出。然后我们使用 grep 过滤结果:

netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep succeeded
Output
Connection to 198.51.100.0 22 port [tcp/*] succeeded!

在这里,我们可以看到远程计算机上 1 到 1000 范围内唯一开放的端口是端口 22,即传统的 SSH 端口。.

如何通过 NetCat 进行通信

Netcat 的功能不仅限于发送 TCP 和 UDP 数据包,它还可以监听端口上的连接和数据包。这使得我们可以将两个 Netcat 实例连接起来,构建客户端-服务器关系。.

哪台计算机是服务器,哪台是客户端,这种区别仅在初始配置时才有意义。连接建立后,双向通信完全相同。.

在机器上,你可以让 netcat 监听特定端口上的连接。我们可以通过提供 -l 参数并选择一个端口来实现这一点:

netcat -l 4444

这会指示 Netcat 监听 4444 端口上的 TCP 连接。作为普通(非 root)用户,出于安全考虑,您无法打开 1000 以下的端口。.

在第二台服务器上,我们可以通过之前选择的端口号连接到第一台机器。连接方式与之前相同:

netcat domain.com 4444

表面上看起来好像什么都没发生。但是,现在你可以在连接的任意一端发送消息,而且消息在双方都能看到。.

输入消息并按回车键。消息将显示在本地和远程屏幕上。反向操作也同样有效。.

发送完消息后,您可以按 CTRL-D 关闭 TCP 连接。.

如何通过 Netcat 发送文件

以前面的例子为例,我们可以做更多有用的事情。由于我们创建的是标准的 TCP 连接,因此几乎可以通过该连接传输任何类型的数据,而不仅限于用户输入的聊天消息。我们可以利用这一特性,将 netcat 改造成一个文件传输程序。.

我们需要再次选择一个连接端点来监听连接。但是,与之前的示例不同,这次我们不会将信息打印到屏幕上,而是将所有信息直接写入一个文件:

netcat -l 4444 > received_file

> 此命令将所有 netcat 输出重定向到指定的文件名。.

在第二台电脑上,输入以下命令创建一个简单的文本文件:

echo "Hello, this is a file" > original_file

现在我们可以将此文件用作与监听计算机建立的 netcat 连接的输入。文件将按照我们交互式输入的方式传输:

netcat domain.com 4444 < original_file

我们可以看到,在等待连接的计算机上,现在有一个名为 receive_file 的新文件,其中包含了我们在另一台计算机上输入的文件的内容:

cat received_file
Output
Hello, this is a file

如您所见,通过链接对象,我们可以轻松地利用这种连接传输各种文件。例如,我们可以创建一个未命名的 tar 包,将其传输到远程系统,然后在远程目录中解压,从而传输整个目录的内容。.

下载完成后,应该会得到一个需要解压缩并打开的文件,方法是输入:

netcat -l 4444 | tar xzvf -

末尾的破折号 (-) 表示 tar 操作标准输入,当从 netcat 建立连接时,标准输入会通过网络传输。.

我们可以把要传输的目录内容打包成一个 tar 包,然后通过 netcat 发送到远程计算机:

tar -czf - * | netcat domain.com 4444

这次,tar 命令中的短横线表示将当前目录(如 * 所示)的内容打包成 tar 和 zip 文件,并将结果写入标准输出。然后,文件会直接通过 TCP 连接写入,到达远程计算机后,会被接收并解压缩到远程计算机的当前目录中。这只是计算机间更复杂的数据传输方式的一个例子。另一种常见的方法是使用 dd 命令将磁盘镜像复制到远程计算机。不过,我们这里就不深入探讨这种方法了。.

如何将 Netcat 用作简单的 Web 服务器

我们已配置 netcat 监听连接,以便进行通信和文件传输。我们可以利用相同的概念,将 netcat 用作一个非常简单的 Web 服务器。这对于测试您创建的页面非常有用。.

首先,让我们在服务器上创建一个简单的HTML文件:

nano index.html

以下是一些简单的HTML代码,您可以在文件中使用的:

<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Level 1 header</h1>
<h2>Subheading</h2>
<p>Normal text here</p>
</body>
</html>

保存并关闭文件。.

如果没有 root 权限,您无法在默认的 web 端口 80 上提供此文件。我们可以以普通用户身份选择端口 8888。.

如果您只想加载一次此页面以检查其渲染效果,可以运行以下命令:

printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888

现在,您可以通过浏览器访问以下链接来查看内容:

http://server_IP:8888

这样会加载页面,然后 netcat 连接就会关闭。如果您尝试重新加载页面,内容将会丢失。


我们可以通过将最后一个命令放入无限循环中,使 netcat 无限期地渲染页面,如下所示:

while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done

这样一来,即使第一个连接关闭,它也能继续接受新的连接。我们可以通过在服务器上按下 CTRL-C 来停止这个循环。这可以让你看到页面在浏览器中的渲染效果,但性能提升并不明显。你绝对不应该用这种方法来渲染实际的网站。它没有任何安全隐患,甚至连链接这样简单的功能都无法正常工作。.

结果

现在你应该对 netcat 的用途有了大致的了解。它是一款功能强大的工具,可用于诊断问题并验证 TCP/UDP 连接的基本功能是否正常工作。使用 netcat,你可以轻松地在不同的计算机之间建立连接,从而实现快速交互。netcat 致力于简化连接建立过程,使计算机之间的网络交互更加透明。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢

VPN自动断开连接软件

什么是 VPN 自动断开连接软件?VPN 自动断开连接软件是一种高级安全措施,它可以……