运维工程师必备技能:nc命令详解

🍁博主简介
🏅云计算领域优质创作者
🏅2022年CSDN新星计划python赛道第一名

​ 🏅2022年CSDN原力计划优质作者
​ 🏅阿里云ACE认证高级工程师
​ 🏅阿里云开发者社区专家博主

💊交流社区CSDN云计算交流社区欢迎您的加入!

nc是一个简单、可靠的网络工具,被广泛应用于实现TCP/UDP端口的侦听、端口扫描、机器之间传输文件等多种网络任务。

nc全称netcat,又叫做瑞士军刀,是一款简单、可靠的网络工具

1、nc命令的作用

  1. 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
  2. 端口扫描,nc可以作为client发起TCP或UDP连接
  3. 机器之间传输文件
  4. 机器之间网络测速

2、安装nc命令

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

3、基本用法

nc命令的基本语法格式如下:

nc [options] hostname port

[options]代表命令的选项

hostname是目标主机的域名或IP地址

port是目标端口号。

4、常用参数选项

  • -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 的版本信息并退出

5、常见用法示例

  1. 测试远程主机指定TCP/UDP端口是否开放

    • TCP端口测试:
    nc -zv 8.8.8.8 53
    
    • UDP端口测试:`
    nc -uzv 8.8.8.8 53
    
  2. 打开一个TCP连接

    • 连接到远程主机的指定端口:
    nc example.com 80
    
    • 本地监听指定端口:
    nc -l -p 8080
    
  3. 文件传输

    • 从本地主机向远程主机发送文件:
    nc host port < file
    
    • 从远程主机向本地主机接收文件:
    nc -l -p port > file
    
  4. 端口扫描

    • 扫描指定范围的端口:
    nc -zv 192.168.1.1 20-1024
    
  5. 端口转发

    • 将本地端口的请求转发到远程端口:
    nc -l -p local_port -c 'nc remote_host remote_port'
    

6、注意事项

  • nc命令在不同的Linux发行版中可能有所不同,某些版本可能已经被ncat(netcat的增强版,来自nmap项目)所取代。
  • 在使用nc命令时,建议查看其帮助文档(nc -h)以了解所有可用的选项和用法。
  • 对于需要更高级功能的场景,如SSL/TLS加密、通过HTTP代理进行转发等,可以考虑使用ncat命令。

nc命令是一个功能强大的网络工具,通过合理使用其选项和参数,可以完成多种网络任务。

7、实战演练

7.1 网络连通性测试和端口扫描

测试主机的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
7.2 文件和目录的传输

传输文件

服务器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 
第一行
第二行
第三行
第四行
7.3 传输文件夹

利用tar来传输

经过我的测试管道后面最后必须是 - ,不能是其余自定义的文件名

启动服务器1上的接收服务

nc -l 60000 | tar xfvz -

启动服务器2上的发送命令

tar czf - ./nginx/* | nc 10.0.0.11 60000

./nginx/* 是指的相对路径,如果是 *则表示当前文件夹的所有文件和文件夹

具体过程就是

把当前目录的所有文件打包为 - ,然后使用nc发送给服务器2

然后这边收到了之后再解包
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹏linux

感谢老板,老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值