nc是一个功能强大的网络工具,它可以用于端口扫描,模拟TCP/UDP数据传输,代理端口等。ubuntu14.04默认自带nc工具,windows下需自行下载,一般防病毒软件会认为它有害。下面主要介绍它在linux下的用法。
一.nc扫描某台主机监听的端口
下面是扫描主机39.156.66.10监听的端口,对端可能设置了防火墙,扫描时通过timeout方式验证端口是否监听,比较慢且对端一般有超时机制长时间扫描会拒绝该连接的访问最好配合timeout和脚本一个个轮询遍历,对于开放的端口如80,可以快速验证,如下截图所示。
nc -zv 39.156.66.10 1-80
二.nc做tcp client端
使用命令连接39.156.66.10服务器,连接后,服务器会有一个交互超时机制,如果没有数据交互,一段时间后,就退出。因为一直39.156.66.10是一个HTTP服务器,发送数据"GET / HTTP/1.1"去获取一个网页,返回结果400的应答,请求错误,可以通过浏览器配合Wireshark抓包,查看具体要发什么指令才能获取正确的网页。
nc -v 39.156.66.10 80
三.nc做udp client端
下面我们通过自建的UDP服务器模拟测试,主机192.168.1.153监听UDP:3333端口,如下图1所示,使用nc连接UDP:3333主机,并发送接收数据数据。
nc -u 192.168.1.153 3333
四.nc做简单的代理
4.1 nc创建简单的UDP代理
UDP的代理,将主机192.168.1.153上UDP:3333代理到本机的8080端口,指令如下
nc -u -l -p 8080 | nc -u 192.168.1.153 3333
下图1是服务器及其代理的主机情况,下图2是对应的测试端
测试端通过连接nc所在主机192.168.1.15代理的8080端口,访问实际的数据192.168.1.153:3333.但是这个无法接收3333主机发送的数据。
4.2 nc创建简单的tcp代理做简单的代理服务器
TCP代理,将主机192.168.1.153的TCP:3333通过nc代理到tcp:8080端口,指令如下:
nc -l -p 8080 | nc 192.168.1.153 3333
执行指令后,nc对应主机与TCP服务器建立了一个连接,客户通过nc主机192.168.1.15的TCP:8080端口访问,发送数据3333服务器可以收到,但是3333发送的数据只能到nc主机。
4.3 基于TCP的双向代理
在开发过程中可能可以用到,这里我们一台云端服务器代理到nc主机的8080端口,用户通过"nc主机:8080"访问云端的服务器,从而隐藏云端服务器的信息。
指令如下:
mkfifo /tmp/fifo
nc -vv -l -p 8899 < /tmp/fifo | nc -vv 47.121.220.84 11022 > /tmp/fifo
测试:
云端模拟的tcp服务器,监听端口为11022。这里使用nc工具模拟服务器,指令如下:
nc -vv -l -p 11022
-vv 输出更多连接和数据传输信息
-l 处于监听模式
-p 后面接监听的端口号
nc代理的指令
本地客户端的访问,本地客户端并不知道是与云端服务器在交互数据:
UDP服务器,加-u参数,同理。