nc(netcat)网络诊断命令详解

简介

nc(netcat)被称为 “网络瑞士军刀”,是一个用于读写 TCP/UDP 网络连接的命令行工具。适用于端口扫描、连接测试、数据传递等场景。

命令解析:nc -zv -w 3 172.20.0.7 53

命令分解

nc -zv -w 3 172.20.0.7 53

参数含义说明
nc程序名netcat
-zZero-I/O 模式只检测端口是否开放,不发送任何数据
-vVerbose 输出显示详细的连接结果信息
-w 3超时时间(秒)超过 3 秒无响应则判定为超时
172.20.0.7目标 IP被检测的主机地址
53目标端口检测的端口号(这里是 DNS 服务端口)

整体含义

以零 I/O 模式连接 172.20.0.753 端口,超时设为 3 秒,输出详细结果。

典型输出:

# 端口开放
Connection to 172.20.0.7 53 port [tcp/domain] succeeded!
 
# 端口关闭 / 超时
nc: connect to 172.20.0.7 port 53 (tcp) timed out: Operation now in progress
nc: connect to 172.20.0.7 port 53 (tcp) failed: Connection refused

参数详解

-z — Zero-I/O 模式(端口扫描)

  • 只建立连接,不发送任何数据,连接成功即断开
  • 非常适合批量端口存活检测
  • 搭配 -v 可同时输出成功/失败信息

-v — 详细输出

  • 显示连接结果(成功或失败)
  • 可重复使用 -vv 获取更详细的信息

-w — 超时控制

  • 格式:-w <秒数>
  • 设置连接超时时间
  • 默认情况下 nc 会一直等待,设置超时可避免长时间阻塞

常见使用场景

1. 端口存活检测(最常用)

# 检测单个端口(TCP)
nc -zv -w 3 172.20.0.7 53
 
# 检测多个端口
nc -zv -w 3 172.20.0.7 22 80 443 3306
 
# 检测端口范围
nc -zv -w 3 172.20.0.7 1-1000
 
# 使用 UDP 模式
nc -zuv -w 3 172.20.0.7 53

TCP vs UDP

nc 默认使用 TCP 协议。检测 UDP 端口需加 -u 参数。UDP 是无连接协议,-z 模式在 UDP 下无法可靠判断端口是否开放。

2. 简易聊天/数据传输

# 服务端监听(A 机器)
nc -l 9999
 
# 客户端连接(B 机器)
nc 192.168.1.10 9999

3. 文件传输

# 接收端
nc -l 9999 > received_file.tar.gz
 
# 发送端
cat file.tar.gz | nc 192.168.1.10 9999

4. Banner 抓取(服务版本探测)

# 连接后发送一个换行触发响应
echo "" | nc -w 3 172.20.0.7 22
 
# 使用 -v 查看连接 banner
nc -v -w 3 172.20.0.7 22

5. 端口转发 / 代理

# 将本地 8080 的流量转发到远程 80
nc -l -p 8080 -c "nc remote-host 80"

与其他工具的对比

工具适用场景优缺点
nc快速端口检测、连接测试轻量、快;功能相对单一
telnet手动测试 TCP 服务需要服务端支持 telnet 协议;逐渐被淘汰
nmap全面端口扫描功能强大但较重;部分环境未预装
tcpdump抓包分析被动监听,不发起连接;适合深层次分析
curlHTTP 协议测试应用层工具,不适用于裸端口检测

注意事项

  1. 部分系统(如 CentOS/RHEL 最小安装)未预装 nc,需安装 nmap-ncatnetcat-openbsd
    # CentOS/RHEL
    yum install nc -y
    # Ubuntu/Debian
    apt install netcat-openbsd -y
  2. 无加密nc 传输数据为明文,涉及敏感信息请用 ncat(带 SSL 支持)或 ssh
  3. UDP 检测不可靠:nc -zuv 在 UDP 模式下无法准确区分端口开放与防火墙静默丢弃
  4. -z 模式下 nc 建立连接后立即断开,不会留下连接记录(适合隐蔽探测)

关联笔记