【linux命令学习】— nc 命令学习

nc 全称netcat,使用nc可以直接监听某个端口,也可以往其他服务器的端口发送数据。

Centos 上没有nc命令可以通过yum install -y nc来安装。其他发行版请读者自己百度如何安装。

一、命令介绍

1. 临时监听 tcp 端口

# 监听8089端口
# 只会开启一个连接,有连接进来就会立刻中断监听
nc -l 8089

2. 永久监听 tcp 端口

# 监听8089端口
# 会一直监听下去,除非用户中断程序
nc -lk 8089

3. 监听 udp 端口

# 加上参数 u 表示是udp
nc -lu 8089

4. 连接某个端口

# 连接8089端口,连接上后,可以开始输入消息,然后按回车发送
nc 127.0.0.1 8089
# 直接把 test.txt的内容发送过去
nc 127.0.0.1 8089 < test.txt
# 发送一串内容
ehco "hello" | nc 127.0.0.1 8089
# -v 表示连接时输出一些详细的连接信息
nc -v 127.0.0.1 8089
# -z 表示只是扫描端口,不发送任何数据
nc -z 127.0.0.1 8089
# -G 5 表示尝试连接该端口,超过5秒没连接上就判定超时
nc -G 5 127.0.0.1 8089
# -p 表示 以指定的端口去连接,下面指定用8888端口去连接目标端口
nc -p 8888 127.0.0.1 8090
# -s 表示以指定的 ip作为sourceIp去连接,该ip要是自己网卡的某个ip,不然会立刻返回
nc -s 172.20.56.33 -p 8888 127.0.0.1 8090

二、nc 实用小技巧

1. 使用 nc 扫描端口

# 扫描百度 8000-9000 区间的端口。加上-G是因为百度的端口如果不可用不会立即返回,而是阻塞在那里,所以带上超时条件
nc -zv -G 1 www.baidu.com 8000-9000
# nc 好像只能指定端口区间段,不过我们可以写个简单的shell脚本来实现指定扫描某些端口的功能
# 下面的shell 脚本会依次扫描 80 443 8080 9000 端口
ports=(80 443 8080 9000)
for port in ${ports[@]}
do
    nc -zv -G 1 www.baidu.com $port
done

2. 使用 nc 传输文件或者目录

# 开启8090 端口监听,之后把接收到的内容输出到test.txt 文件中
nc -l 8090 > test.txt
# 另一边发送一个 send.txt 文件
# 127.0.0.1 可以改成目标服务器的地址
nc 127.0.0.1 8090 < send.txt

使用 tar 来压缩数据,加快数据传输速度

# 监听8090端口,收到数据后通过 tar 解压
nc -l 8090 | tar xfvz -
# 另一个服务器把要发送的内容通过tar压缩后发过来
# * 可以是任何文件
tar cfz - * | nc 127.0.0.1 9995
# 甚至可以发送目录
tar cfz - test/ | nc 127.0.0.1 9995

你可能感兴趣的:(【linux命令学习】— nc 命令学习)