网络猫(或nc
) 是一个命令行实用程序,它使用 TCP 或 UDP 协议跨网络连接读取和写入数据。它是网络和系统管理员武器库中最强大的工具之一,被视为网络工具中的瑞士军刀。
Netcat 是跨平台的,可用于 Linux、macOS、Windows 和 BSD。您可以使用 Netcat 来调试和监视网络连接、扫描开放端口、传输数据、作为代理等等。
Netcat 软件包预安装在 macOS 和流行的 Linux 发行版(如 Ubuntu、Debian 或 CentOS)上。
Netcat语法#
Netcat 实用程序最基本的语法采用以下形式:
在 Ubuntu 上,您可以使用netcat
or nc
。他们都symlinks到 Netcat 的 openBSD 版本。
默认情况下,Netcat 将尝试启动到指定主机和端口的 TCP 连接。如果您想建立 UDP 连接,请使用-u
option:
端口扫描#
扫描端口是 Netcat 最常见的用途之一。您可以扫描单个端口或端口范围。
例如,要扫描 20-80 范围内的开放端口,您可以使用以下命令:
nc -z -v 10.10.8.8 20-80
The -z
选项会告诉你nc
仅扫描开放端口,而不向它们发送任何数据-v
提供更详细信息的选项。
输出将如下所示:
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命令。
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 查找服务器软件及其版本。例如,如果您在默认情况下向服务器发送“EXIT”命令SSH 端口 22
:
echo "EXIT" | nc 10.10.8.8 22
输出将如下所示:
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.
要扫描 UDP 端口,只需添加-u
该命令的选项如下所示:
nc -z -v -u 10.10.8.8 20-80
通常,Nmap是比Netcat更好的复杂端口扫描工具。
通过Netcat发送文件#
通过创建基本的客户端/服务器模型,Netcat 可用于将数据从一台主机传输到另一台主机。
这是通过将 Netcat 设置为侦听特定端口(使用-l
选项),然后在接收主机上建立常规 TCP 连接并通过其发送文件。
在接收端运行以下命令,该命令将为传入连接打开端口 5555 并将输出重定向到文件:
nc -l 5555 > file_name
从发送主机连接到接收主机并发送文件:
nc receiving.host.com 5555 < file_name
要传输目录,您可以使用tar
在源主机上归档目录并在目标主机上提取归档文件。
在接收主机上,将 Netcat 工具设置为侦听端口 5555 上的传入连接。传入数据通过管道传输到tar命令,这将提取存档:
nc -l 5555 | tar xzvf -
在发送主机上打包目录并通过连接监听发送数据nc
接收主机上的进程:
tar czvf - /path/to/dir | nc receiving.host.com 5555
您可以在两端查看传输进度。完成后,输入CTRL+C
关闭连接。
创建一个简单的聊天服务器#
在两个或多个主机之间创建在线聊天的过程与传输文件时相同。
在第一台主机上启动 Netcat 进程来侦听端口 5555:
nc -l 5555
从第二台主机运行以下命令连接到侦听端口:
nc first.host.com 5555
现在,如果您键入消息并按ENTER
它将显示在两台主机上。
要关闭连接,请输入CTRL+C
.
尽管有更好的 HTTP 请求工具,例如curl,还可以使用Netcat向远程服务器发送各种请求。
例如,要从 OpenBSD 网站检索 Netcat 手册页,您可以输入:
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 命令的所有其他强大选项。
如果您有任何疑问或意见,请在下面留言。