Netcat或nc是一个命令行程序,它使用TCP或UDP协议通过网络连接读取和写入数据。

它是网络和系统管理员中最强大的工具之一,被视为网络工具的瑞士军刀。

Netcat是跨平台的,可用于Linux,macOS,Windows和BSD。您可以使用Netcat调试和监视网络连接,扫描打开的端口,传输数据,作为代理等等。

Netcat软件包已预安装在macOS和流行的Linux发行版,如Ubuntu,Debian,CentOS,Fedora等。

Netcat命令的最基本语法形式是nc [options] host porthost可以是u远程主机的域名,主机名或者是IP地址。port是端口。

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

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

nc host port
nc -u host port

端口扫描

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

但扫描端口也是Netcat最常见的用途之一。您可以扫描单个端口或端口范围。例如要扫描范围为20-80的端口,请运行命令nc -z -v 10.10.8.8 20-80

nc命令的-z选项将不会不向其发送任何数据,而仅扫描开放的端口,如果你需要更多相信的信息请添加-v选项。

如果只是想打印开放端口的行,则可以使用grep命令过滤结果,在每一行输出的记录中succeeded表示可以成功连接的端口。

nc命令默认仅扫描TCP端口,如果你需要扫描UDP端口,只需将-u选项添加到nc命令。

nc -z -v 10.10.8.8 20-80
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
nc -z -v -u 10.10.8.8 20-80
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!

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

echo "EXIT" | nc 10.10.8.8 22
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

结论

至此,你已经知道如何在Linux运行nc命令进行端口扫描以及如何检测服务的版本。如果您有任何疑问或意见,请在下面发表评论。