nc的用法
测试udp端口是否可用
如果是测试某个IP地址地址是否可以访问,通常会使用 ping
命令,执行之后如果可以到达就会得到数据反馈:
albert@home-pc:~$ ping 82.156.125.169
PING 82.156.125.169 (82.156.125.169) 56(84) bytes of data.
64 bytes from 82.156.125.169: icmp_seq=1 ttl=54 time=17.8 ms
64 bytes from 82.156.125.169: icmp_seq=2 ttl=54 time=39.9 ms
64 bytes from 82.156.125.169: icmp_seq=3 ttl=54 time=12.9 ms
64 bytes from 82.156.125.169: icmp_seq=4 ttl=54 time=6.81 ms
^C
--- 82.156.125.169 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3008ms
rtt min/avg/max/mdev = 6.816/19.397/39.961/12.502 ms
想要测试一个tcp端口是否可以访问,映入脑海的第一个命令应该是telnet,直接在IP后面加空格和端口就可以了:
albert@home-pc:~$ telnet 82.156.125.169 22
Trying 82.156.125.169...
Connected to 82.156.125.169.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
如果想测试UDP端口是否可达使用telnet就不行了,因为它是一种基于TCP的应用层协议,用来测试UDP端口会因为长时间没有反应而超时:
albert@home-pc:~$ telnet 82.156.125.169 666
Trying 82.156.125.169...
telnet: Unable to connect to remote host: Connection refused
这时用 nc
命令就可以解决了,命令格式为 nc -nvuz ip port
:
albert@home-pc:~$ nc -nvuz 82.156.125.169 666
Connection to 82.156.125.169 666 port [udp/*] succeeded!
端口扫描
这实际实际上是对上一个应用的扩展,使用 nc
命令可以指定一个端口范围,用来扫描多个端口是否可用:
albert@home-pc:~$ nc -nvz 82.156.125.169 20-24
nc: connect to 82.156.125.169 port 20 (tcp) failed: Connection refused
nc: connect to 82.156.125.169 port 21 (tcp) failed: Connection refused
Connection to 82.156.125.169 22 port [tcp/*] succeeded!
nc: connect to 82.156.125.169 port 23 (tcp) failed: Connection refused
nc: connect to 82.156.125.169 port 24 (tcp) failed: Connection refused
一对一聊天
使用 nc
命令可以监听一个端口作为服务器,然后在另一台机器上启动 nc
作为客户端发数据:
# 启动服务器
[root@VM-0-3-centos ~]# nc -l 1314
# 以下为接收到客户端发来的数据
12
client send msg
# 启动客户端
albert@home-pc:~$ nc 82.156.125.169 1314
# 以下为输入的数据
12
client send msg
传输文件
这个用法是对上一种用法的扩展,通过重定向将文件内容通过网络传输:
# 服务端将socket内容保存到w文件中
[root@VM-0-3-centos ~]# nc -l 1314 > w.txt
albert@home-pc:~$ cat w.txt
w
-
r
x
d
# 客户端将w.txt文件内容发送给服务器
albert@home-pc:~$ nc 82.156.125.169 1314 < w.txt
albert@home-pc:~$
客户端运行完 nc
命令之后就会退出,服务器端的 nc
命令也会结束,w.txt
文件的内容就传送过去了。
端口转发
这其实也是传输数据的命令的一个变种,使用 -c
参数可以完成数据转发:
[root@VM-0-3-centos ~]# nc -l 520 -c "nc 82.156.125.169 1314"
执行命令之后,发送到本机 520 端口的数据就会被转发到 IP 为82.156.125.169的1314端口上了。
总结
nc -nvuz ip port
可以检测指定IP的UDP端口能否访问,如果是TCP端口去掉 -u 选项就可以了
nc -l port
可以启动一个本地服务器,接受发往指定端口的数据,并打印到控制台
nc -l port > filename
可以启动一个本地服务器,接受发往指定端口的数据,并保存到名为 filename 的文件中
nc -l port -c "nc ip new_port"
可以启动一个本地服务器,接受发往指定端口的数据,并转发到ip:new_port的机器上