🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[netcat][2]是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。 `netcat`所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个`服务器`,`传输文件`,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。 ## 安装 ### linux ~~~ yum install -y netcat apt-get install netcat ~~~ ### windows [下载][1] ### mac ~~~ brew install netcat ~~~ ## 选项 ~~~ -m, --max-conns <n> # 最大并发数 -o, --output <filename> # 导出到文件 -x, --hex-dump <filename> # 导出到文件 -l, --listen # 监听端口等待连接 -k, --keep-open # 保持不退出 -w, --wait <time> # 超时时间 --allow # 允许的客户端,可以使网段 192.168.0.0/24 ~~~ ## 实例 ### 端口扫描 端口扫描经常被系统管理员和黑客用来发现在一些机器上开放端口,帮助他们识别系统中的漏洞。 ~~~ nc -z -v -n 172.31.100.7 21-25 ~~~ 可以运行在TCP或者UDP模式,默认是TCP,-u参数调整为udp. z 参数告诉netcat使用0 IO,指的是一旦连接关闭,不进行数据交换 v 参数指使用冗余选项(译者注:即详细输出) n 参数告诉netcat 不要使用DNS反向查询IP地址的域名 这个命令会打印21到25 所有开放的端口。Banner是一个文本,Banner是一个你连接的服务发送给你的文本信息。当你试图鉴别漏洞或者服务的类型和版本的时候,Banner信息是非常有用的。但是,并不是所有的服务都会发送banner。 一旦你发现开放的端口,你可以容易的使用netcat 连接服务抓取他们的banner。 ### Chat Server 假如你想和你的朋友聊聊,有很多的软件和信息服务可以供你使用。但是,如果你没有这么奢侈的配置,比如你在计算机实验室,所有的对外的连接都是被限制的,你怎样和整天坐在隔壁房间的朋友沟通那?不要郁闷了,netcat提供了这样一种方法,你只需要创建一个Chat服务器,一个预先确定好的端口,这样子他就可以联系到你了。 Server ~~~ $nc -l 1567 ~~~ netcat 命令在1567端口启动了一个tcp 服务器,所有的标准输出和输入会输出到该端口。输出和输入都在此shell中展示。 Client ~~~ $nc 172.31.100.7 1567 ~~~ 不管你在机器B上键入什么都会出现在机器A上。 ### 文件传输 当你只是需要临时或者一次传输文件,假设,你想要传一个文件file.txt 从A 到B。A或者B都可以作为服务器或者客户端,以下,让A作为服务器,B为客户端。 ~~~ # 服务端A HOST1$ ncat -l 9899 > outputfile # 客户端B HOST2$ ncat HOST1 9899 < inputfile ~~~ 这里我们创建了一个服务器在A上并且重定向netcat的输入为文件file.txt,那么当任何成功连接到该端口,netcat会发送file的文件内容。 没有必要创建文件源作为Server,我们也可以相反的方法使用。像下面的我们发送文件从B到A,但是服务器创建在A上,这次我们仅需要重定向netcat的输出并且重定向B的输入文件。 ~~~ # 服务端 HOST1$ ncat -l 9899 < inputfile # 客户端 HOST2$ ncat HOST1 9899 > outputfile ~~~ ### 加密通过网络发送的数据 如果你担心你在网络上发送数据的安全,你可以在发送你的数据之前用如mcrypt的工具加密。 服务端 ~~~ nc localhost 20000 | mcrypt --flush --bare -F -q -d -m ecb ~~~ 使用mcrypt工具加密数据。 客户端 ~~~ mcrypt --flush --bare -F -q -m ecb | nc -l 20000 ~~~ 使用mcrypt工具解密数据。以上两个命令会提示需要密码,确保两端使用相同的密码。 ### 流视频 虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用netcat,我们仍然有希望做成这件事。 服务端 ~~~ $cat video.avi | nc -l 1567 ~~~ 这里我们只是从一个视频文件中读入并重定向输出到netcat客户端 ~~~ $nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 - ~~~ 这里我们从socket中读入数据并重定向到mplayer。 ### 克隆一个设备 如果你已经安装配置一台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.等等。 ### 指定源地址 假设你的机器有多个地址,希望明确指定使用哪个地址用于外部数据通讯。我们可以在netcat中使用-s选项指定ip地址。 服务器端 ~~~ $nc -u -l 1567 < file.txt ~~~ 客户端 ~~~ $nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt ~~~ 该命令将绑定地址172.31.100.5。 ### socket ~~~ # 服务端 ncat -U ~/unixsock # 客户端 ncat -l -U ~/unixsock ~~~ ### 加密所有流量 首先NCAT并不是Linux自带的一款工具,Ncat包含于nmap工具中,用来弥补nc明文连接传输通道的不足! A:kali 192.168.14.23 B:ubuntu 192.168.14.20 A:kali作为服务器端进行侦听端口,allow参数即是允许那个ip连接,-ssl进行管道传输加密! ~~~ ncat -c bash --allow 192.168.14.20 -vnl 333 --ssl B端作为接收端: B:ubuntu ncat -nv 192.168.14.23 333 --ssl ~~~ 通过ncat建立的远程连接与nc建立的远程连接是有本质区别的,ncat建立一起已经进行了秘钥的交换,并且在此后的传输通道也是经过加密的哦!此时即是有人来嗅探也是无济于事的ssl还是挺有保障的!nc所能实现的所有功能在ncat上都能实现! [1]:https://joncraton.org/files/nc111nt_safe.zip [2]:http://netcat.sourceforge.net/