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
来进行日常测试网络连通性,端口是否开放 还是比较方便的. 希望你可以学会这个小技巧。