Netcat是一种用于创建、连接网络连接的计算机网络工具。Netcat也缩写为nc。Netcat工具支持TCP和UDP协议。即使它并不复杂,它也是系统管理员、网络管理员和安全专业人员使用的非常强大的工具。netcat工具是一个跨平台的工具,它在Linux、macOS、Windows、BSD等平台上得到支持和提供。
安装Netcat/nc
Netcat是与大多数Linux发行版一起预装的。但有时,如果netcat已卸载或默认情况下未安装,则可能需要安装netcat。
安装Ubuntu、Debian、Mint、Kali:
sudo apt install netcat
安装Fedora、CentOS、RHEL:
sudo yum install netcat
显示帮助信息
Netcat命令作为nc执行。有关Netcat工具的帮助信息可以使用 -小时 选项。
nc -h
帮助输出包含选项及其描述。
OpenBSD netcat (Debian patchlevel 1.217-2ubuntu1) usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl] [-m minttl] [-O length] [-P proxy_username] [-p source_port] [-q seconds] [-s sourceaddr] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout] [-X proxy_protocol] [-x proxy_address[:port]] [destination] [port] Command Summary: -4 Use IPv4 -6 Use IPv6 -b Allow broadcast -C Send CRLF as line-ending -D Enable the debug socket option -d Detach from stdin -F Pass socket fd -h This help text -I length TCP receive buffer length -i interval Delay interval for lines sent, ports scanned -k Keep inbound sockets open for multiple connects -l Listen mode, for inbound connects -M ttl Outgoing TTL / Hop Limit -m minttl Minimum incoming TTL / Hop Limit -N Shutdown the network socket after EOF on stdin -n Suppress name/port resolutions -O length TCP send buffer length -P proxyuser Username for proxy authentication -p port Specify local port for remote connects -q secs quit after EOF on stdin and delay of secs -r Randomize remote ports -S Enable the TCP MD5 signature option -s sourceaddr Local source address -T keyword TOS value -t Answer TELNET negotiation -U Use UNIX domain socket -u UDP mode -V rtable Specify alternate routing table -v Verbose -W recvlimit Terminate after receiving a number of packets -w timeout Timeout for connects and final net reads -X proto Proxy protocol: "4", "5" (SOCKS) or "connect" -x addr[:port] Specify proxy address and port -Z DCCP mode -z Zero-I/O mode [used for scanning] Port numbers can be individual or ranges: lo-hi [inclusive]
或者,Linux和BSD系统提供netcat工具的手册页,其中包含以下命令。手册页提供了有关nc命令的更多详细信息和说明。
man nc
Netcat/nc命令语法
netcat工具或nc命令的语法非常简单。作为一种基于网络的工具,它主要用于主机和端口信息。
nc OPTIONS HOST PORT
- 选项 用于提供不同的选项。这是可选的。
- 主持人 用于指定IP地址。一般用于连接远程系统。这是可选的。
- 港口 用于指定本地或远程端口。这是必需的。
相关文章: 如何在HTTPS中使用Curl命令?
扫描TCP端口
netcat命令最有趣和流行的特性之一是网络或端口扫描。但是正如您所期望的那样,netcat没有提供与nmap类似的体验。netcat命令只扫描一个主机,这个主机是用它的IP地址和我们要扫描的端口范围指定的。在下面的示例中,我们将扫描远程主机192.168.252.134。
nc -z -v 192.168.253.134 20-800
这个端口扫描创建了很多输出,每个端口的结果都被打印到终端上,如下所示。
...nc: connect to 192.168.253.134 port 73 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 74 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 75 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 76 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 77 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 78 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 79 (tcp) failed: Connection refusedConnection to 192.168.253.134 80 port [tcp/http] succeeded!nc: connect to 192.168.253.134 port 81 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 82 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 83 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 84 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 85 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 86 (tcp) failed: Connection refusednc: connect to 192.168.253.134 port 87 (tcp) failed: Connection refused...
默认情况下,无论端口结果是打开还是关闭,netcat工具都会打印所有端口结果。我们可以通过只打印opne端口来提高输出的可读性。使用grep命令只能列出打开的端口。我们将只过滤包含“succeeded”的行,这意味着端口已打开。
nc -z -v 192.168.253.134 20-800 2>&1 | grep succeeded
只有开放的端口如下所示,因为我们可以看到只有2个端口是开放的。
Connection to 192.168.253.134 22 port [tcp/ssh] succeeded!Connection to 192.168.253.134 80 port [tcp/http] succeeded!
扫描UDP端口
即使不像TCP那样流行,netcat也可以用类似于TCP扫描的方式来扫描UDP端口。为了扫描UDP端口,nc命令提供了-u选项。其他选项与提供主机名和端口范围的TCP扫描相同。在下面的示例中,我们将扫描192.168.253.134中的UDP端口范围100-200。
nc -z -u -v 192.168.253.134 100-200
向远程主机发送数据/文本
作为一个简单的工具,netcat可以用于简单的操作,比如向远程系统发送一些数据。也可以将一些文本发送到远程系统指定的端口。在下面的示例中,我们将数据或消息“HELO”发送到远程端口25,默认情况下,该端口是SMTP端口。
echo "HELO" | nc 192.168.10.10 25
将文件发送到远程主机
netcat工具的另一个有用特性是能够通过网络将文件发送到远程系统。只需将提供的文件像简单的二进制拷贝和粘贴一样传输到远程主机。由于有两个部分,远程系统应该列出一个端口,以便从本地主机接收数据。使用以下命令,远程系统开始监听3333端口,并将所有传入的数据写入myfile。
nc -l 3333 myfile
现在远程系统正在侦听3333端口。在本地系统中,我们将读取要传输的文件,并使用nc命令将其传输到远程系统。远程系统IP地址为192.168.1.10。我们将把名为myfile的本地文件重定向到nc命令中,如下所示。
nc 192.168.1.10 3333 < myfile
创建聊天服务器
有趣的是,nc命令可以用来创建聊天服务器,多个用户可以在其中连接和发送消息。创建聊天服务器的方法与文件传输相同。在这种情况下,简单文本在本地和远程系统之间传输。首先,我们将创建一个侦听端口,在本例中为4444。
nc -l 4444
另一方面,我们将通过提供聊天服务器的IP地址和端口号(4444)来连接聊天服务器。
nc 192.168.253.134 4444
![图片[1]-Netcat(nc)命令教程-yiteyi-C++库](https://www.yiteyi.com/wp-content/uploads/2021/01/linuxtect_image-21.png)
发出HTTP请求
nc命令可用于向远程web服务器发出HTTP请求。甚至还有更有用的工具nc提供了关于发出HTTP请求的基本用法。HTTP请求文本被重定向到nc命令中,其中nc命令使用指定的远程web服务器IP地址/主机名和端口号。
printf "GET / HTTP/1.1" | nc google.com 80
或者,HTTP请求的多行可以使用“行尾。
printf "GET / HTTP/1.1
Host:google.com
" | nc google.com 80