5 分钟带你领略号称瑞士军刀的网络工具神器 Netcat

Posted by Mike on 2020-05-23

Netcat(或 NC )是一个命令行实用程序,它使用 TCP 或 UDP 协议跨网络连接读取和写入数据。它是网络和系统管理员中最强大的工具之一,被视为网络工具的瑞士军刀。

Netcat 是跨平台的,可用于 LinuxmacOSWindowsBSD。你可以使用 Netcat 调试和监视网络连接、扫描打开的端口、传输数据、作为代理等等。Netcat 软件包已预安装在 macOS 和大多数 Linux 发行版(如:Ubuntu)上。

Netcat 语法

Netcat 命令的最基本语法采用以下形式:

1
nc [options] host port

在 Ubuntu 上,您可以使用 netcat 或 nc。它们都是 Netcat 的 openBSD 版本的符号链接。

默认情况下,Netcat 将尝试启动与指定主机和端口的 TCP 连接。如果要建立 UDP 连接,请使用以下 -u 选项:

1
$ nc -u host port

端口扫描

扫描端口是 Netcat 最常见的用途之一。您可以扫描单个端口或端口范围。

例如,要扫描范围为 20-80 的开放端口,可以使用以下命令:

1
$ nc -z -v 10.10.8.8 20-80

-z 选项将告诉 nc 你仅扫描打开的端口,而不向其发送任何数据,并使用 -v 提供更多详细信息。

输出将如下所示:

1
2
3
4
5
6
7
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

如果只想打印带有开放端口的行,则可以使用 grep 命令过滤结果。

1
2
3
$ nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

你也可以使用 Netcat 查找服务器软件及其版本。例如,如果你在默认的 SSH 端口 22 上向服务器发送 EXIT 命令:

1
$ echo "EXIT" | nc 10.10.8.8 22

将输出如下所示:

1
2
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

要扫描 UDP 端口,只需将 -u 选项添加到命令中,如下所示:

1
$ nc -z -v -u 10.10.8.8 20-80

在大多数情况下,对于复杂的端口扫描,Nmap 是比 Netcat 更好的工具。

通过 Netcat 发送文件

通过创建基本的客户端/服务器模型,可以使用 Netcat 将数据从一台主机传输到另一台主机。

通过将 Netcat 在接收主机上的特定端口上监听(使用 -l 选项),然后与其他主机建立常规 TCP 连接并通过该主机发送文件。

在接收时,运行以下命令,它将打开端口 5555 进行传入连接,并将输出重定向到文件:

1
$ nc -l 5555 > file_name

从发送主机连接到接收主机并发送文件:

1
$ nc receiving.host.com 5555 < file_name

如果要传输目录,可以使用 tar 在源主机上归档目录,并在目标主机上提取归档。

在接收主机上,设置 Netcat 工具以监听端口 5555 上的传入连接。传入数据通过管道传递到 tar 命令,该命令将提取存档:

1
$ nc -l 5555 | tar xzvf -

在发送主机上的目录通过连接到 nc 接收主机上的监听进程来发送数据:

1
$ tar czvf - /path/to/dir | nc receiving.host.com 5555

您可以在两端观察传输进度。完成后,键入 CTRL+C 以关闭连接。

创建一个简单的聊天服务器

在两个或多个主机之间创建在线聊天的过程与传输文件的方法是基本相同的。

在第一台主机上启动一个 Netcat 进程以侦听端口 5555:

1
$ nc -l 5555

在第二台主机上,运行以下命令以连接到侦听端口:

1
$ nc first.host.com 5555

现在,如果你键入一条消息并按回车,它将同时显示在两台主机上。

要关闭连接,请键入 CTRL+C

执行 HTTP 请求

尽管有许多更好的 HTTP 请求工具,例如:curl,你也可以使用 Netcat 将各种请求发送到远程服务器。

例如,要从 OpenBSD 网站检索 Netcat 的手册页,请输入:

1
$ printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

请求完成后,包括 HTTP 标头和 HTML 代码的完整响应将在终端中打印。

结论

在本教程中,你学习了如何使用 Netcat 实用程序建立和测试 TCP 和 UDP 连接。如果你需要更多信息,请访问 Netcat 手册页,并阅读有关 Netcat 命令的所有其他强大选项的信息。

来源:myfreax

原文:https://url.cn/5MTjaKh

题图:来自谷歌图片搜索

版权:本文版权归原作者所有

投稿:欢迎投稿,邮箱: editor@hi-linux.com