8 Netcat(nc)命令及其示例
Netcat(简称nc)是一个简单但功能强大的网络命令行工具,用于在 Linux 中执行与TCP、UDP或UNIX域套接字相关的任何操作。
Netcat可用于端口扫描、端口重定向、作为端口监听器(用于传入连接);它还可用于打开远程连接和许多其他操作。此外,您还可以将其用作后门来访问目标服务器。
在本文中,我们将通过示例解释Netcat使用命令。
如何在 Linux 中安装和使用 Netcat
要在系统上安装netcat 包,请使用 Linux 发行版的默认包管理器。
$ yum install nc [On CentOS/RHEL] $ dnf install nc [On Fedora 22+ and RHEL 8] $ sudo apt-get install Netcat [On Debian/Ubuntu]
一旦安装了netcat 包,您可以继续在以下示例中学习netcat 命令的用法。
端口扫描
Netcat可用于端口扫描:了解目标机器上哪些端口是开放的并且正在运行服务。它可以扫描单个、多个或一系列开放端口。
以下是示例,该-z
选项将nc设置为仅扫描监听守护进程,而不向它们实际发送任何数据。该-v
选项启用详细模式并-w
指定无法建立连接的超时时间。
$ nc -v -w 2 z 192.168.56.1 22 #scan a single port OR $ nc -v -w 2 z 192.168.56.1 22 80 #scan multiple ports OR $ nc -v -w 2 z 192.168.56.1 20-25 #scan range of ports
在 Linux 服务器之间传输文件
Netcat允许您在两台 Linux 计算机或服务器之间传输文件,并且这两个系统都必须安装nc。
例如,要将 ISO 映像文件从一台计算机复制到另一台计算机并监控传输进度(使用pv 实用程序),请在发送方/服务器计算机(ISO文件所在的计算机)上运行以下命令。
这将在端口3000上以监听模式(标志)运行nc。-l
$ tar -zcf - debian-10.0.0-amd64-xfce-CD-1.iso | pv | nc -l -p 3000 -q 5
并在接收方/客户端计算机上运行以下命令来获取该文件。
$ nc 192.168.1.4 3000 | pv | tar -zxf -
创建命令行聊天服务器
您还可以使用Netcat立即创建一个简单的命令行消息服务器。与前面的使用示例一样,必须在用于聊天室的两个系统上安装nc 。
在一个系统上,运行以下命令来创建监听端口5000的聊天服务器。
$ nc -l -vv -p 5000
在另一个系统上,运行以下命令来与正在运行消息传递服务器的机器启动聊天会话。
$ nc 192.168.56.1 5000
创建一个基本的Web服务器
-l
使用nc 命令选项创建一个基本的、不安全的 Web 服务器,用于提供静态 Web 文件以供学习。为了演示这一点,请创建一个.html
如下所示的文件。
$ vim index.html
在文件中添加以下 HTML 行。
<html> <head> <title>Test Page</title> </head> <body> <p>Serving this file using Netcat Basic HTTP server!</p> </body> </html>
保存文件中的更改并退出。
然后通过运行以下命令通过 HTTP 提供上述文件,这将使 HTTP 服务器能够持续运行。
$ while : ; do ( echo -ne "HTTP/1.1 200 OK\r\n" ; cat index.html; ) | nc -l -p 8080 ; done
然后打开网络浏览器并可以使用以下地址访问内容。
http://localhost:8080 OR http://SERVER_IP:8080
请注意,您可以按 来停止Netcat HTTP 服务器[Ctrl+ C]
。
解决 Linux 服务器连接问题
Netcat的另一个有用用途是解决服务器连接问题。在这里,您可以使用Netcat来验证服务器响应客户端发出的命令发送了哪些数据。
以下命令检索example.com的主页。
$ printf "GET / HTTP/1.0\r\n\r\n" | nc text.example.com 80
上述命令的输出包括 Web 服务器发送的标头,可用于故障排除目的。
查找端口上运行的服务
您还可以使用Netcat获取端口标志。在这种情况下,它会告诉您在某个端口后面运行什么服务。例如,要了解特定服务器上端口22后面运行什么类型的服务,请运行以下命令(将192.168.56.110替换为目标服务器的 IP 地址)。该-n
标志表示禁用 DNS 或服务查找。
$ nc -v -n 192.168.56.110 80
创建流套接字
Netcat还支持创建 UNIX 域流套接字。以下命令将创建并监听 UNIX 域流套接字。
$ nc -lU /var/tmp/mysocket & $ ss -lpn | grep "/var/tmp/"
创建后门
您也可以将Netcat作为后门运行。但是,这需要更多工作。如果目标服务器上安装了Netcat,您可以使用它来创建后门,以获取远程命令提示符。
要充当后门,您需要Netcat监听目标服务器上选定的端口(例如端口3001),然后您可以按如下方式从您的机器连接到该端口。
这是在远程服务器上运行的命令,其中-d
选项禁用从标准输入读取,并-e
指定在目标系统上运行的命令。
$ nc -L -p 3001 -d -e cmd.exe
最后但同样重要的是,Netcat可以用作不同服务/协议的代理,包括 HTTP、SSH 等等。有关更多信息,请参阅其手册页。
$ man nc
在本文中,我们解释了 8 个实用的Netcat 命令使用示例。如果您知道任何其他实际用例,请通过下面的反馈表与我们分享。您也可以提出问题。