如何使用netcat来一个VPS建立和测试TCP和UDP连接

netcat的是一种多用途的网络工具,可用于使用UPD或TCP连接的计算机进行交互。它可以作为一个简单的文件服务器,简单的web服务器,简单点至点聊天的实现,一个简单的端口扫描器和更多的功能。在本指南中,我们将向您介绍的netcat,以及如何用它来简化服务器之间的通信。

介绍


Linux是众所周知的,在大多数发行版中有大量成熟的,有用的命令行实用程序。 熟练的系统管理员可以使用内置工具完成大部分工作,而无需安装其他软件。

在本指南中,我们将讨论如何使用的netcat实用程序。 通常被称为瑞士军刀网络工具,这种多功能命令可以帮助您在网络连接上监视,测试和发送数据。

我们将在Ubuntu 12.04 VPS上探索这一点,但netcat几乎可以在任何现代Linux发行版上使用。 Ubuntu附带netcat的BSD变体,这是我们将在本指南中使用。 其他版本可能操作不同或提供其他选项。

通用语法


默认情况下,netcat通过启动到远程主机的TCP连接来运行。

最基本的语法是:

netcat [options] host port

这将尝试在指定的端口号上向定义的主机发起TCP。 这基本上是类似的功能到老的Linux telnet命令。 请记住,您的连接完全未加密。

如果您想发送一个UDP包,而不是发起TCP连接时,可以使用-u选项:

netcat -u host port

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

netcat host startport-endport

这通常与一些附加标志一起使用。

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

如何使用Netcat进行端口扫描


netcat最常见的用途之一是作为端口扫描器。

虽然netcat可能不是最复杂的工作(nmap在大多数情况下是更好的选择),它可以执行简单的端口扫描,以轻松识别开放端口。

我们通过指定范围的端口进行扫描的,象我们上面那样,与一起做-z来执行的,而不是试图发起的连接的扫描选项。

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

netcat -z -v domain.com 1-1000

随着-z选项,我们还指定了-v选项告诉netcat来提供更多的详细信息。

输出将如下所示:

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 111.111.111.111 1-1000

返回的消息是实际发送到标准错误(查看我们的I / O重定向文章获取更多信息)。 我们可以将标准错误消息发送到标准输出,这将允许我们更容易地过滤结果。

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

netcat -z -n -v 111.111.111.111 1-1000 2>&1 | grep succeeded

Connection to 111.111.111.111 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

它看起来好像没有发生什么。 但是,您现在可以在连接的任一侧发送消息,它们将在任一端看到。

键入消息,然后按ENTER键。 它将显示在本地和远程屏幕上。 这也在相反的方向工作。

完成传递邮件后,可以按CTRL-D关闭TCP连接。

如何通过Netcat发送文件


构建前面的例子,我们可以完成更有用的任务。

因为我们正在建立一个常规的TCP连接,我们可以通过该连接传输任何类型的信息。 它不限于由用户输入的聊天消息。 我们可以使用这个知识把netcat变成一个文件传输程序。

再次,我们需要选择连接的一端来监听连接。 然而,不像在上一个示例中那样将信息打印到屏幕上,而是将所有信息直接放入文件中:

netcat -l 4444 > received_file

在第二台计算机上,通过键入以下内容创建一个简单的文本文件:

echo "Hello, this is a file" > original_file

我们现在可以使用这个文件作为netcat连接的输入,我们将建立到监听计算机。 该文件将被传输,就像我们以交互方式键入:

netcat domain.com 4444 < original_file

我们可以在计算机上看到等待连接,我们现在有一个名为“received_file”的新文件,其中包含我们在其他计算机上键入的文件的内容:

cat received_file

Hello, this is a file

正如你可以看到的,通过管道的东西,我们可以很容易地利用这种连接转移各种各样的事情。

例如,我们可以通过动态创建未命名的tarball,将其传输到远程系统,并将其解包到远程目录中来传输整个目录的内容。

在接收端,我们可以预期一个文件将被过滤,需要通过键入以下内容来解压缩和解压缩:

netcat -l 4444 | tar xzvf -

结束短划线( - )意味着tar将对标准输入进行操作,当进行连接时,将通过网络从netcat进行管道传输。

在我们想要传输的目录内容一侧,我们可以将它们打包成tarball,然后通过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作为普通用户。

如果您只想投放一个网页,请检查其呈现方式,您可以输入以下内容:

netcat -l 8888 < index.html

现在,在浏览器中,您可以访问以下内容:

http://server_IP:8888

netcat页面服务

这将服务页面,然后netcat连接将关闭。 如果您尝试刷新页面,它将会消失:

netcat页面走了

我们可以让netcat通过在无限循环中包装最后一个命令来无限期地服务页面,像这样:

while true; do nc -l 8888 < index.html; done

这将允许它在第一个连接关闭后继续接收连接。

我们可以通过在服务器上键入CTRL-C来停止循环。

这允许您查看页面在浏览器中呈现的方式,但它不提供更多的功能。 您不应该将此用于服务实际网站。 没有安全和简单的东西,如链接甚至不能正常工作。

结论


你现在应该有一个很好的想法,netcat可以用于。 它是一个通用工具,可用于诊断问题,并验证基本功能是否与TCP / UDP连接正常工作。

使用netcat,你可以很容易地在不同的计算机之间进行通信,以便快速交互。 Netcat通过使形成连接的复杂性试图使计算机之间的网络交互透明。

作者:Justin Ellingwood