Linux nc 命令详解

发布于:2025-02-24 ⋅ 阅读:(14) ⋅ 点赞:(0)

Linux nc 命令详解

nc(netcat)是一个网络工具,它通过TCP或UDP协议读写数据。它可以用于创建几乎任何类型的网络连接,包括端口扫描、传输文件、设置后门等。由于其多功能性,nc有时被称为“网络瑞士军刀”。

以下是 nc 命令的一些常用用法和选项:

基本用法

  • 监听模式:作为服务器监听一个特定的端口。

    nc -l -p 12345
    

    或者在较新的版本中使用:

    nc -l 12345
    
  • 客户端模式:连接到指定的IP地址和端口。

    nc 192.168.1.1 12345
    

选项

  • -l--listen:用于指定 nc 应该监听传入的连接,而不是尝试发起连接。这使得 nc 可以作为一个简单的TCP/UDP服务器。
  • -p PORT--source-port=PORT:指定本地源端口。
  • -u:使用UDP而非默认的TCP。
  • -v--verbose:启用详细模式,显示更多关于连接的信息。
  • -n:不进行DNS或服务名称解析,直接使用IP地址和端口号。
  • -z:扫描模式,只报告连接是否成功建立,而不发送数据。
  • -w TIMEOUT--timeout=TIMEOUT:设置连接超时时间,单位是秒 -w 3

高级用法

  • 文件传输:可以用来传输文件。

    • 服务器端(接收文件):

      nc -l -p 12345 > received_file
      
    • 客户端(发送文件):

      nc 192.168.1.1 12345 < file_to_send
      
  • 端口扫描:可以用来扫描端口。

    nc -z -v 192.168.1.1 1-1024
    
  • 远程shell:可以用来建立一个简单的远程shell。

    • 服务器端(监听并执行命令):

      nc -l -p 12345 -e /bin/bash
      
    • 客户端(连接并获得shell):

      nc 192.168.1.1 12345
      

    注意:-e 选项在一些现代的 nc 版本中可能被移除,因为它存在安全风险。在这种情况下,你可以使用其他方法来实现类似的功能,例如通过管道将命令输出重定向到 nc

  • 代理连接:可以用来作为HTTP代理。

    nc -l -p 8080
    
  • 聊天:两个用户可以通过 nc 实现实时聊天。

    • 一方监听:

      nc -l -p 12345
      
    • 另一方连接:

      nc 192.168.1.1 12345
      

请记住,在使用 nc 时要遵循网络安全和隐私的最佳实践,确保你有合法权限去访问或监听相关的网络资源。此外,某些用法可能会受到防火墙规则或网络配置的限制。


样例1 测试端口的开放和监听状态

# 测试端口的开放和监听状态 
nc -zv 45.xxx.100.253  12300
Connection to 45.xxx.100.253 port 12300 [tcp/linogridengine] succeeded!

  • succeeded!:这是最关键的信息,它表示 nc 成功建立了到指定端口的TCP连接。只有当目标端口上有服务在监听,并且该服务接受了连接请求时,才会返回这个成功的消息。
  • [tcp/linogridengine]:这是基于 /etc/services 文件中的服务名称映射。如果你的系统上没有这个特定的服务条目,或者端口被不同的服务使用,这个名称可能不准确。重要的是连接是否成功,而不是服务名称。

样例2 测试 端口 是否开放 ,网络是否可达

nc -zv r-uxxxxxxxxxxxxxxx1.redis.rds.aliyuncs.com 16379
r-uxxxxxxxxxxxxxxx1.redis.rds.aliyuncs.com (172.19.80.10:16379) open

网络可达:从你的位置可以成功地建立到目标主机的网络连接。
端口在监听状态:目标主机上的指定端口确实有服务在监听传入的连接请求。

因此,当 nc 返回 “open” 时,它表明不仅网络路径是可达的,而且目标主机的16379端口上有一个服务正在监听并接受连接。如果端口没有服务监听,或者防火墙阻止了连接,你将不会看到 “open” 的消息,而是会得到连接被拒绝或超时的错误信息。

样例3

-w 这个命令有时候 不能生效

time nc -w 1 -zv 47.100.182.253 22301

nc: connectx to 47.100.182.253 port 22301 (tcp) failed: Operation timed out
nc -w 1 -zv 47.100.182.253 12301  0.00s user 0.00s system 0% cpu 1:15.05 total
 ✘ edy  ~  
nc -w 1 -zv 47.100.182.253 22301  0.00s user 0.00s system 0% cpu 1:15.05 total

详细解释:

  • 0.00s user:表示用户空间(即应用程序)花费的时间为 0 秒。
  • 0.00s system:表示内核空间(即操作系统)花费的时间为 0 秒。
  • 0% cpu:表示整个过程中 CPU 使用率为 0%,意味着 nc 在大部分时间内处于等待状态,而不是在执行计算任务。
  • 1:15.05 total:这是最关键的部分,表示整个命令的总执行时间为 1 分 15 秒 5 毫秒。这远远超过了你设置的 -w 1 的 1 秒超时时间。

样例4 测试 udp 端口

使用 -u参数 表示 udp 协议

~/ nc  -z -v  -u 139.xxx.xxx.235 53  
Connection to 139.xxx.xxx.235 port 53 [udp/domain] succeeded!

总结

使用nc来进行日常测试网络连通性,端口是否开放 还是比较方便的. 希望你可以学会这个小技巧。

分享快乐,留住感动. '2025-02-23 10:32:52' --frank