网络界的瑞士军刀,号称最强大的网络工具
nc命令全称netcat,是一款功能强大的网络工具,可以用来在网络上读、写和重定向数据。它可以打开TCP或UDP连接,发送或接收数据包,监听任意端口,进行端口扫描,支持IPv4和IPv6。它被称为网络界的瑞士军刀,因为它可以完成很多网络相关的任务,如聊天、文件传输、代理、后门、端口转发等。nc命令也可以用来编写脚本或其他程序调用的可靠的后端工具。
nc命令在大多数Linux发行版中都是默认可用的,或者可以通过包管理器安装。不过不同的发行版可能提供不同的版本或变体,如ncat、netcat、netcat-openbsd、netcat-traditional等。这些版本或变体可能有不同的选项或功能,所以在使用之前需要查看手册页或帮助信息来确定具体的用法。如果需要安装nc命令,可以根据不同的发行版使用不同的包管理器,如:
# 安装netcat-openbsd
sudo apt-get install netcat-openbsd
# 安装netcat-traditional
sudo apt-get install netcat-traditional
# 使用yum命令
sudo yum install nmap-ncat
# 使用dnf命令(CentOS 8/RHEL 8)
sudo dnf install nmap-ncat
# 安装nmap-ncat
sudo dnf install nmap-ncat
# 安装netcat
sudo dnf install netcat
# 安装gnu-netcat
sudo pacman -S gnu-netcat
# 安装openbsd-netcat
sudo pacman -S openbsd-netcat
nc [options] hostname port [port] ...
选项 | 说明 |
---|---|
-4 | 强制使用IPv4 |
-6 | 强制使用IPv6 |
-c | 执行指定的shell命令,并将其输出发送到网络 |
-e | 将指定的程序与网络连接关联 |
-g | 设置路由器跃程通信网关(最多8个) |
-G | 设置来源路由指针(必须是4的倍数) |
-h | 显示帮助信息 |
-i | 设置时间间隔(秒),用于发送数据和扫描端口 |
-k | 保持监听状态,并接受多个连接 |
-l | 使用监听模式,等待传入连接 |
-n | 不进行域名解析 |
-o | 将传输数据以16进制格式保存到指定文件 |
-p | 指定本地端口号 |
-r | 随机选择本地和远程端口号 |
-s | 指定本地IP地址 |
-u | 使用UDP协议 |
-v | 显示详细信息 |
-w | 设置超时时间(秒) |
-z | 使用零输入/输出模式,仅用于扫描端口 |
# 扫描单个端口,-v显示详细过程,-w 10表示等待超时最大时长为10s,-z表示使用端口扫描模式
$ nc -v -w 10 -z 127.0.0.1 7891
Connection to 127.0.0.1 7891 port [tcp/*] succeeded!
# 范围扫描,扫描1到1000的端口
$ nc -v -w 10 -z 127.0.0.1 1—1000
# 监听tcp端口
$ nc -l 8080
# 监听udp端口
$ nc -l -u 1234
# 连接远程系统
$ nc 192.168.1.100 80
# 测试某个远程主机 UDP 端口的连通性
$ nc -v -u 192.168.1.100 80
# HOST1运行
$ nc -l 8080
# HOST2运行
$ nc HOST1 8080
之后开始发送消息,这些消息会在服务器终端上显示出来。
# 从 HOST1(Client) 发送文件到 HOST2(Server) 的 TCP 9899 端口
# HOST2:
$ nc -l 9899 > outputfile
# HOST1:
$ nc HOST2 9899 < inputfile
# HOST1上执行
$ nc -l 10000 -e /bin/bash
# HOST2上执行
$ nc HOST1 10000
这样可以在HOST2上通过HOST1的10000端口,通过bash获取我们系统的完整访问权限,常用于黑客后门攻击。
# 所有连接到 80 端口的连接都会转发到 8080 端口
$ nc -u -l 80 -c 'ncat -u -l 8080'
# 在本机 8888 端口创建 HTTP 代理
$ nc -l --proxy-type http localhost 8888 --proxy-auth username:password
# 测试 HTTP 代理服务器(支持隧道模式)
$ curl -x 'http://username:password@localhost:8888' httpbin.org/anything
# 通过 SOCKS5 1080 端口,连接 smtphost:25
$ nc --proxy socks5host --proxy-type socks5 --proxy-auth proxyusername:password smtphost 25
# SSH 通过 Ncat 指定代理,通过代理访问
$ ssh -o ProxyCommand="ncat --proxy-type http/socks4/socks5 --proxy proxy.net:端口 %h %p" user@server.net