- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。
在Linux网络运维和故障排查中,nc(netcat)被誉为"网络工具中的瑞士军刀"。这个简单的命令行工具虽然体积小巧,却能完成端口扫描、文件传输、网络调试、代理转发等多种任务。本文将深入探讨nc的进阶使用技巧,特别是它在网络诊断和安全测试中的实际应用。
· 客户端模式:主动连接到服务器
· 监听模式:作为服务器等待连接
nc [选项] [主机名] [端口]
常用选项:
· -l:监听模式,作为服务器
· -p:指定本地端口
· -n:直接使用IP地址,不进行DNS解析
· -v:详细输出,-vv更详细
· -z:端口扫描模式,不发送数据
· -w:设置超时时间(秒)
· -k:监听模式下保持连接,接受多个连接
# 测试TCP端口(默认)
nc -zv example.com 80
# 测试UDP端口
nc -zvu example.com 53
# 带详细输出的测试
nc -vvz example.com 22
# 批量测试端口范围
for port in {20,21,22,80,443}; do
nc -zv example.com $port 2>&1 | grep -E "succeeded|open"
done
输出示例:
Connection to example.com 80 port [tcp/http] succeeded!
# 1. 直接发送HTTP GET请求
printf "GET / HTTP/1.1\\r\\nHost: example.com\\r\\nConnection: close\\r\\n\\r\\n" | nc example.com 80
# 2. 交互式发送HTTP请求(按Ctrl+D结束)
nc example.com 80 << EOF
GET / HTTP/1.1
Host: example.com
User-Agent: Netcat-Test
Connection: close
EOF
# 3. 保存响应到文件
printf "GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n" | nc example.com 80 > response.txt
# 扫描指定端口范围
nc -zv example.com 1-1000 2>&1 | grep -E "succeeded|open"
# 扫描多个主机的特定端口
for host in 192.168.1.{1..10}; do
echo -n "Scanning $host: "
nc -z -w1 $host 22 && echo "SSH open" || echo "SSH closed"
done
# 接收端(监听模式,保存文件)
nc -l -p 8888 > received_file.tar.gz
# 发送端(客户端模式,发送文件)
nc -w3 receiver_ip 8888 < file_to_send.tar.gz
说明:先启动接收端,再启动发送端。文件传输完成后连接自动关闭。
# 发送整个目录
tar -czf - /path/to/directory | nc -l -p 8888
# 接收并解压
nc sender_ip 8888 | tar -xzf - -C /target/directory
# 目标服务器(反向连接回管理机)
bash -i >& /dev/tcp/manager_ip/9999 0>&1
# 管理机(监听等待连接)
nc -lvnp 9999
这是运维中常用的技术,可以让管理机连接位于NAT或防火墙后的服务器。
# 将本地8888端口的流量转发到远程主机的80端口
nc -l -p 8888 -c "nc remote_host 80"
# 更稳定的方式(使用命名管道)
mkfifo /tmp/fifo
cat /tmp/fifo | nc remote_host 80 | nc -l -p 8888 > /tmp/fifo
# 创建HTTP响应文件
cat > index.html << EOF
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 45
EOF # 启动简单的HTTP服务器(单次响应) while true; do cat index.html | nc -l -p 8080 -q 1 done # 或者使用更简洁的版本 while true; do echo -e "HTTP/1.1 200 OK\\n\\n$(date)" | nc -l -p 8080 done # 连接到SMTP服务器并发送测试邮件 nc -C smtp.example.com 25 << EOF HELO client.example.com MAIL FROM: RCPT TO: DATA Subject: Test Email from Netcat From: sender@example.com To: recipient@example.com This is a test email sent using netcat. . QUIT EOF # 服务器端(端口9999) nc -l -p 9999 # 客户端1 nc server_ip 9999 # 客户端2 nc server_ip 9999 多个客户端可以连接到同一个服务器,但nc默认不支持多用户聊天,需要额外的脚本处理。 端口敲击是一种隐蔽的服务器访问技术,通过按顺序连接特定端口来触发防火墙规则变更。 # 客户端执行端口敲击序列 for port in 1000 2000 3000; do nc -z server_ip $port sleep 1 done # 服务器端可使用knockd等工具监听这些端口序列 # 并在收到正确序列后打开SSH端口 # 使用nc和pv测量网络吞吐量 # 接收端 nc -l -p 9999 > /dev/null # 发送端(生成100MB数据) dd if=/dev/zero bs=1M count=100 | pv | nc receiver_ip 9999 观察pv命令的输出可以了解实际传输速度。 # 使用ncat(netcat的增强版)测试SSL连接 ncat --ssl -v example.com 443 # 发送HTTPS请求 echo -e "GET / HTTP/1.1\\r\\nHost: example.com\\r\\n\\r\\n" | ncat --ssl example.com 443 # 测试本地端口是否被防火墙允许(从远程主机测试) # 在本地监听端口 nc -l -p 2222 # 从远程主机尝试连接 nc -zv local_host_ip 2222 · OpenBSD netcat:功能最全,支持-k(保持监听)和-C(CRLF行结束符) · GNU netcat:传统版本,功能较少 · Nmap ncat:功能最强,支持SSL、代理、连接重定向等 # Ubuntu/Debian安装OpenBSD版本 sudo apt install netcat-openbsd # 安装Nmap ncat sudo apt install ncat # CentOS/RHEL安装(通常是nmap-ncat) sudo yum install nmap-ncat # 使用ncat建立加密连接 # 服务器端 ncat -l --ssl 8888 # 客户端 ncat --ssl server_ip 8888 # ncat作为代理 ncat -l --proxy-type http 3128 8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。 更多技术知识,8455线路检测中心期待与你一起探索。 Netcat HTTP Server
2. SMTP邮件服务器测试
3. 聊天服务器
五、高级技巧与安全应用
1. 端口敲击(Port Knocking)
2. 网络延迟测量
3. SSL/TLS连接测试
4. 检测防火墙规则
六、nc的不同版本与替代品
1. 常见版本差异
2. 安装不同版本
3. ncat的增强功能示例
售前咨询
售后咨询
备案咨询
二维码

TOP