介绍
使用 Linux 的最大优势之一是它提供了大量有用的实用工具。程序内置的功能通常足以让大多数程序员完成他们的工作。这意味着在大多数情况下,您不需要下载外部程序和软件。内置工具将为您提供足够的实用性。在这些有用的功能中,就包括 netcat 实用工具。
在网络工具的世界里,netcat 堪称一件威力强大的武器。它是一个功能极其丰富的命令,您可以将其用于多种用途。例如,您可以使用这单个工具来监控、测试以及在系统连接之间传输各种文件和数据。在本指南中,我们将探讨如何在一台 VPS 上使用 netcat 执行所有这些操作.
寻找 Netcat
Netcat 通常在所有现代 Linux 发行版中都可用。这意味着您很可能已经拥有它,无需特意去安装。在我们的教程中,我们将使用 Ubuntu 12.04 VPS。您可以按照我们的教程安装您自己的 Ubuntu 服务器。Ubuntu 通常自带 BSD 变体的 netcat 实用工具。请记住,如果您使用的是其他版本,它的工作方式可能会略有不同。
了解基本语法
我们首先来学习 netcat 实用工具中的通用语法。您可以通过启动一个 TCP 连接来操作 netcat。该连接必须发起到远程主机。以下是 netcat 的基本语法:
|
1 |
netcat [options] host port |
此命令将尝试启动到远程主机的 TCP 连接。连接到哪个主机取决于您在命令中指定的端口号。该连接将是未加密的。如您所见,此命令的工作方式类似于 telnet 命令的工作方式。
另一方面,您也可以发起一个 UDP 连接。要发送 UDP 数据包而不是 TCP,您必须使用 -u 选项。它看起来像这样:
|
1 |
netcat -u host port |
如果您愿意,还可以指定一个端口范围。为此,您需要在第一个和最后一个端口之间放一个连字符。示例如下:
|
1 |
netcat host startport-endport |
您也可以为此添加更多标志。另一件需要注意的事情是,您可以交替使用 netcat 和 nc。它们会启动相同的命令,这意味着它们互为别名。
使用 Netcat 进行端口扫描
首先,让我们探索 netcat 最常见的用途之一。我们将了解如何将其用作端口扫描器。在大多数情况下,您最好使用像 nmap 这样的工具。但是,如果您只需要执行简单的端口扫描,那么 netcat 就很有用。它可以帮助您轻松识别开放的端口。
要将 netcat 用作端口扫描器,您需要指定端口范围。您将使用 -z 选项来执行此操作。因此,系统将扫描端口范围,而不是尝试建立连接。假设我们要扫描端口 1 到端口 1000:
|
1 |
netcat -z -v domain.com 1-1000 |
除了 -z 命令外,我们还使用了 -v 选项。后者使我们能够向命令提供更多信息。它允许我们输出更“详细”的信息。
您将获得如下输出作为回报:

输出显示了每个单独端口的大量信息。您可以了解每个端口的连接状态。另一方面,如果您知道 IP 地址,则可以使用它来代替域名。这会使过程快得多。示例如下:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 |
我们使用 -n 标志来指示系统不需要使用 DNS 来解析 IP 地址。
通常,返回的消息会被发送到标准错误。为了更快地过滤结果,您可以将它们重定向到标准输出。我们将使用 2>&1 bash 语法来执行此操作。随后,我们将使用 grep 过滤结果。让我们将此应用到我们的示例中:
|
1 |
netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep succeeded |
输出将类似于以下内容:
![]()
输出显示在给定范围内只有端口 22 开放连接。端口 22 恰好是传统的 SSH 端口。
通过 Netcat 进行通信:它是如何工作的?
接下来,我们将了解如何使用 netcat 发送 TCP 和 UDP 数据包。不仅如此,它还可以在各种端口上接收数据包。由于具备这种能力,您可以使用两个 netcat 实例来创建客户端-服务器关系。首先,您将确定客户端和服务器。在初始配置之后,两个客户端都可以在任一方向发送和接收数据包。
自然地,您必须在一个系统上配置 netcat 以监听某个端口上的连接。为此,您必须使用 -l 参数。通过它,您可以像这样选择您想要的端口:
|
1 |
netcat -l 4444 |
现在,这台机器上的 TCP 将监听端口 4444 上的连接。需要注意的一点是,如果您是非 root 用户或普通用户,您将无法访问 1000 以下的端口。
接下来,您必须配置第二台机器以建立连接。您将使用相同的端口号并指定一个特定的域名,如下所示:
|
1 |
netcat domain.com 4444 |
运行此命令不会给您任何输出。但是,它将建立连接。这意味着您可以开始从任一服务器向另一台服务器发送消息。为此,您只需输入消息,然后按回车键(ENTER)。消息将显示在两个屏幕上。
完成后,您可以通过按 CTRL+D 关闭 TCP 连接。
您可以使用 Netcat 发送文件吗?
接下来,我们将向您展示如何通过 netcat 发送文件。通过 TCP 连接,您可以发送消息以及其他类型的数据。首先,您必须选择一台机器来监听连接。但是,我们不会在命令中输入信息,而是将其放在一个文件中,如下所示:
|
1 |
netcat -l 4444 > received_file |
在另一台机器上,您必须创建一个新的文本文件。以下是要使用的命令:
|
1 |
echo "Hello, this is a file" > original_file |
要传输文件,您将使用它作为正在监听的计算机上连接的输入:
|
1 |
netcat domain.com 4444 < original_file |
另一台计算机将显示一个名为“received_file”的新文件。它将包含我们输入的所有信息:
|
1 |
cat received_file |
您可以使用此实用程序并将其转换为文件传输程序。假设您要传输目录的内容。我们将通过制作一个未命名的 tar 包来实现,然后将其传输到系统并解压到远程目录中。在另一台机器上,我们需要准备好接收文件。我们知道我们需要解压并提取它。为此,请发出以下命令:
|
1 |
netcat -l 4444 | tar xzvf - |
减号(-)表示 tar 将对标准输入进行操作。这来自我们建立初始连接时初始服务器上的 netcat。
最后,我们可以将整个目录的内容放入一个 tar 包中,并通过 netcat 发送,如下所示:
|
1 |
tar -czf - * | netcat domain.com 4444 |
tar 命令中的减号(-)表示我们正在指示系统对目录内容进行打包和压缩。它还指示系统将结果写入标准输出。该文件将通过 TCP 连接传输到另一端。接收服务器将对其进行解压并保存到当前的远程目录中。
就像这样,您也可以通过 netcat 传输其他类型的数据。许多人使用 dd 命令来制作磁盘镜像并进行传输。有关传输数据和文件的另一种方法,请查看我们的 关于如何在使用 SFTP 传输文件时确保安全的教程.
将 Netcat 用作 Web 服务器
netcat 的另一个有用功能是您可以使用它来测试您的页面。假设我们正在使用服务器制作一个像这样的 HTML 文件:
|
1 |
nano index.html |
这是该文件包含的 HTML 代码:
|
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <title>测试页面</title> </head> <body> <h1>一级标题</h1> <h2>副标题</h2> <p>此处为普通文本</p> </body> </html> |
将此内容输入到文件中,然后保存并关闭它。通常,端口 80 是默认的 Web 端口。作为普通的非 root 用户,我们将选择端口 8888。假设您只想提供并检查一次该页面,您应该使用以下命令:
|
1 |
printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888 |
为了查看文件的内容,请打开您的浏览器。访问以下地址:
|
1 |
http://server_IP:8888 |
您将能够看到您用 HTML 文件编写的页面:

一旦您获取了该页面,netcat 连接就会关闭。这意味着刷新页面将显示错误,而不是内容。这是因为我们将其配置为仅提供一次页面。如果您想继续接收连接以无限期地查看该页面,您将使用不同的代码:
|
1 |
while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done |
在这里,我们将上一个命令包装在一个无限循环中。如果您想停止循环,只需按 CTRL-C 即可。现在,即使在第一次连接关闭后,您也可以继续查看您的页面及其渲染效果。然而,这是您将 netcat 工具用作 Web 服务器所能获得的最高功能。请勿尝试使用它来提供实际的网站,因为它不提供任何安全性。相反,您可以查看我们关于如何安装 Nginx 等 Web 服务器软件 或 Apache.
结论
在本教程中,我们介绍了 netcat 工具,并探讨了它作为 Ubuntu 上的多功能性。正如我们在上述章节中所介绍的,您可以使用它进行通信、数据传输和页面提供。它非常适合通过 TCP/UDP 连接在服务器之间进行快速交互。对于许多基础级功能和诊断来说,这是一个非常有用的功能。
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。