Netcat(nc)命令与示例
Netcat(或 nc
)是一个命令行实用程序,可使用TCP或UDP协议跨网络连接读取和写入数据。 它是网络和系统管理员兵工厂中最强大的工具之一,并且被视为瑞士网络工具的军刀。
Netcat是跨平台的,可用于Linux,macOS,Windows和BSD。 您可以使用Netcat调试和监视网络连接,扫描打开的端口,传输数据,作为代理等等。
Netcat软件包已预安装在macOS和流行的Linux发行版(如Ubuntu,Debian或CentOS)上。
Netcat语法#
Netcat实用程序的最基本语法采用以下形式:
nc [options] host port
在Ubuntu上,您可以使用 netcat
要么 nc
。 它们都是Netcat的openBSD版本的符号链接。
默认情况下,Netcat将尝试启动与指定主机和端口的TCP连接。 如果您想建立UDP连接,请使用 -u
选项:
nc -u host port
端口扫描
扫描端口是Netcat最常见的用途之一。 您可以扫描单个端口或端口范围。
例如,要扫描20-80范围内的开放端口,可以使用以下命令:
nc -z -v 10.10.8.8 20-80
的 -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查找服务器软件及其版本。 例如,如果您在默认的SSH端口22上向服务器发送“ EXIT”命令:
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请求
尽管有许多更好的HTTP请求工具,例如 curl
,您还可以使用Netcat将各种请求发送到远程服务器。
例如,要从OpenBSD网站检索Netcat手册页,请输入:
printf "GET /nc.1 HTTP/1.1rnHost: man.openbsd.orgrnrn" | nc man.openbsd.org 80
完整的响应(包括HTTP标头和HTML代码)将打印在终端中。
结论#
在本教程中,您学习了如何使用Netcat实用程序来建立和测试TCP和UDP连接。
有关更多信息,请访问Netcat手册页,并阅读有关Netcat命令的所有其他强大选项的信息。
如果您有任何疑问或意见,请在下面发表评论。
netcat终端