Netcat或nc是一个命令行程序,它使用TCP或UDP协议通过网络连接读取和写入数据。
它是网络和系统管理员中最强大的工具之一,被视为网络工具的瑞士军刀。
Netcat是跨平台的,可用于Linux,macOS,Windows和BSD。您可以使用Netcat调试和监视网络连接,扫描打开的端口,传输数据,作为代理等等。
Netcat软件包已预安装在macOS和流行的Linux发行版,如Ubuntu,Debian,CentOS,Fedora等。
Netcat命令的最基本语法形式是nc [options] host port
。host
可以是u远程主机的域名,主机名或者是IP地址。port
是端口。
在Ubuntu,您可以使用netcat
或nc
。它们都是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.
Netcat 发送文件
通过创建基本的客户端/服务器模型,可以使用Netcat将数据从一台主机传输到另一台主机。
使用-l
选项运行nc命令在接收的主机监听指定端口,然后在另一台远程主机建立TCP连接并且此主机发送文件。
请在接收端的计算机,运行命令nc -l 5555 > file_name
,它将打开端口5555并接收来自远程计算机的数据,然后将接收的数据重定向到文件file_name
。
要在发送端的计算机建立与接收端计算机的TCP连接,请运行命令nc receiving.host.com 5555 < file_name
。
当两个计算机之间的连接建立时,命令将会开始发送file_name的文件内容到接收端的主机。
nc -l 5555 > file_name #run on receivce of computer
nc receiving.host.com 5555 < file_name #run on send of computer
Netcat 发送目录
如果要递归发送目录数据,可以使用tar命令在发送端的计算机创建归档文件,然后在接收端的计算机提取存档文件。
在接收端的计算机运行命令nc -l 5555 | tar xzvf -
设置Netcat监听端口5555并接收数据。
然后将接收到的数据通过管道传递到tar命令,tar命令的xzvf
选项表示提取存档.tar.gz
文件。
在发送端的计算机运行命令tar czvf - /path/to/dir | nc receiving.host.com 5555
,建立与接收端计算机的连接,然后发送由tar
命令创建存档文件数据。
您可以在两端观察传输进度。完成后,键入CTRL+C
关闭连接。
nc -l 5555 | tar xzvf - #run on receivce of computer
tar czvf - /path/to/dir | nc receiving.host.com 5555 #run on send of computer
创建聊天服务器
在两个或多个主机之间创建在线聊天的过程与传输文件时相同。
首先在第一台主机运行命令nc -l 5555
设置Netcat监听5555端口,在第二台主机上,运行命令nc first.host.com 5555
连接到第一台主机的5555端口。
现在,如果您键入一条消息并按ENTER
,它将同时显示在两台主机上。要关闭连接,请键入CTRL+C
。
nc -l 5555 #run on receivce of computer
nc first.host.com 5555 #run on send of computer
Netcat HTTP请求
尽管有许多更好的HTTP请求工具,例如curl,您也可以使用Netcat将各种请求发送到远程计算机。
例如,要从OpenBSD网站检索Netcat手册页,请运行以下命令。命令在终端将会打印HTTP header和HTML代码的完整响应。
printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80
结论
在本教程中,您学习如何使用Netcat命令建立和测试TCP和UDP连接。如果您有任何疑问或意见,请在下面发表评论。