nc用法小记
Posted 刘英皓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nc用法小记相关的知识,希望对你有一定的参考价值。
By francis_hao Jun 30,2017
ncat:连接和重定向套接字
概要
ncat [OPTIONS...] [hostname] [port]
描述
ncat 是一个集成的网络工具包,从命令行通过网络读写数据。它被设计成一个提供即时连接到其他应用和用户的可靠性后端工具,ncat不仅仅工作于IPv4和IPv6,它提供给用户一个近乎无限数量的潜在用途。
ncat提供了以下特性:重定向TCP、UDP和SCTP端口到其他站点,支持SSL,通过SOCKS4或HTTP的代理连接等。
ncat 操作处于两种模式中的一种:连接模式和监听模式。其他模式,像HTTP代理服务器,处于这两种模式的特殊情形。在连接模式,ncat类似一个客户端,在监听模式,ncat类似一个服务器。
在连接模式下,hostname和port参数指明应该连接到哪,hostname是需要的,它可能是一个域名或ip地址。如果有port,它一定是一个十进制的端口号。如果省略,默认是31337。
在监听模式下,hostname和port指定服务器要绑定的地址。这两个参数都是可选的,如果省略了hostname,默认监听所有可获取的IPv4和IPv6地址。如果省略了port,默认为31337。
选项
选项 | 说明 |
协议选项 | |
-4 | 仅使用IPv4 |
-6 | 仅使用IPv6 |
-U, --unixsock | 使用Unix domain sockets而不是network sockets(见下文Unix domain sockets描述) |
-u, --udp | 使用UDP连接(默认是TCP) |
--sctp | 使用SCTP连接(默认是TCP) |
连接模式选项 | |
-g hop1[,hop2,…] | 为IPv4设置宽松源路由的下一跳,你可以使用一个-g带以逗号分隔的路由表,或者使用多个-g,每个-g带一个路由。或者这两者混合使用,hop可以是域名或者ip地址。 |
-G ptr | Set source routing pointer |
-p port, --source-port port | 设置要绑定的端口号 |
-s host, --source host | 设置要绑定的地址 |
监听模式选项 | |
-l, --listen | 进入监听模式 |
-m numconns, --max-conns numconns | ncat接受的最大的同时连接数。默认是100 |
-k, --keep-open | 通常监听服务器只接收一个连接然后当连接关闭时退出。此选项可以使它同时接收多个连接,并且在这些连接关闭后继续监听其他连接。 此选项必须和-l同时使用。 在此模式下,ncat没办法知道网络输入什么时候终止,因此它会保持运行直到被打断,这也意味着它不会关闭它的输出流,因此任何读取ncat并等待EOF的程序都将会挂起。 |
--broker | 允许多个分布的客户端连接到ncat服务器,并且和彼此通讯,ncat可以在不能直接连接(例如NAT下)的系统中进行中继通讯。 此选项和-l选项同时使用,使监听端口使能中继功能。 |
--chat | 使能对话功能,可以在多个用户间交换数据。此模式下,中继功能被打开。 ncat 在每条消息前加上唯一的ID,以区分不同的客户端发送的不同的内容。 另外,不可打印字符(例如控制字符)被避开,以防影响终端 此选项的用法: 服务器:nc -l –chat 客户端1:nc server_ip 客户端2:nc server_ip 其中,服务器发消息时,客户端1、2均能收到,客户端1发消息时只有客户端2能收到,服务器不接收消息。 |
SSL选项 | |
--ssl | 在连接模式,此选项显式的和SSL服务器协商会话以加密连接,这对和使能了SSL的HTTP服务器传输提供了便利。 在服务器模式,此选项监听连入的SSL连接,而不是看起来乱糟糟的数据。 |
--ssl-verify | 在客户端模式,--ssl-verify类似--ssl,但是它还需要验证服务器的证书。 ncat带有一个默认的信任证书列表,在文件ca-bundle.crt里。--ssl-trustfile可以用以指定自定义的信任列表,使用-v一次或多次了解验证失败详情。 ncat不验证吊销的证书。 此选项对于服务器模式无意义。 |
--ssl-cert certfile.pem | 此选项指定一个PEM编码的证书文件,用于认证服务器(监听模式)或客户端(连接模式)。一般和--ssl-key结合使用 |
--ssl-key keyfile.pem | 指定用--ssl-cert指定的证书文件对应的私钥 |
--ssl-trustfile cert.pem | 此选项设置一系列受信任的证书,若不指定--ssl-verify,则此选项无效,PEM文件里包含了受信任的证书,使用此选项后,ncat就不会使用默认的证书。 |
代理选项 | |
--proxy host[:port] | 通过host:port指定请求的代理,使用的协议由--proxy-type指定 如果没有指定的端口号,那么代理协议的众所周知端口将被使用(SOCKS的1080和HTTP的3128)。但是,当使用IP地址而不是主机名指定IPv6的HTTP代理服务时,端口号必须同时被指定,如果代理需要认证,那么使用--proxy-auth选项。 |
--proxy-type proto | 在连接模式,这个选项使用协议proto连接到用—proxy指定的主机,在监听模式,用此指定的协议用作代理服务器。 连接模式当前可使用的协议是http(CONNECT)和socks4(SOCKSv4)。作为服务器当前仅支持http。如果此项未使用,默认的协议是http |
--proxy-auth user[:pass] | 在连接模式,指定在连接服务器时会用到的身份验证信息。 在监听模式,指定客户端在连接时需要提供的身份验证信息。 若使用--proxy-type http,验证信息应该是user:pass,若使用--proxy-type socks4,验证信息只需要提供username。 |
命令执行选项 | |
-e command, --exec command | 当连接已建立时执行指定的命令,命令必须以全路径名被指定,远端客户端所有的输入将被发送给该应用,并且回应会通过套接字返回给远端客户端,因此,让你的命令行应用通过套接字可交互。 结合--keep-open选项,Ncat可以同时处理多个连接到你指定的端口/应用。 Ncat只接受一个可定义的最大同时连接数(通过-m指定),默认这被设置未100。 |
-c command, --sh-exec command | 类似-e,但是它会尝试通过/bin/sh执行命令,这意味着你不必为命令指定全路径,而且,shell相关的因子,例如环境变量是可获取的。 |
--lua-exec file | 当连接建立时运行指定的作为lua脚本的文件,脚本的标准输入和标准输出都被重定向到连接的数据流。 |
权限控制选项 | |
--allow host[,host,...] | 只允许指定的host列表连接到Ncat程序,所有其余的连接都会被拒绝。 为防止--allow和--deny指定的host产生冲突,使用--allow选项优先。 |
--allowfile file | 类似--allow,只不过被允许的host列表放在了以回车分割的文件里。 |
--deny host[,host,...] | 拒绝主机列表 |
--denyfile file | 主角主机列表文件 |
时间选项 | |
-d time, --delay time | 设置发送行的延时间隔,这对特定时间段内发送数据量有作用,可用于低带宽的站点。 默认时间单位是s,但是也可以显式的指明时间单位,例如ms,s,m和h。 |
-i time, --idle-timeout time | 设置空闲超时时间,如果空闲超时时间到了,连接会被终止。 |
-w time, --wait time | 设置尝试连接的超时时间 |
输出选项 | |
-o file, --output file | 转储会话数据到文件 |
-x file, --hex-dump file | 转储会话数据作为十六进制到文件 |
--append-output | 当使用-o或-x选项并指定-append-ouput选项时,它将追加结果到文件而不是截短所指定的输出文件 |
-v, --verbose | 进入"啰嗦模式",这将会显示很多有用的信息。使用多个(-vv,-vvv…)进入更"啰嗦"的模式。 |
杂项 | |
-C, --crlf | 此选项使Ncat在和标准输入会话时,转换LF(Line-Feed,换行)到CRLF(Carriage-Return& Line-Feed,回车换行),这对一些严格的服务器来说很有用,因为它们只接受CRLF作为行尾。 |
-h, --help | 显示帮助信息并退出 |
--recv-only | 若指定此选项,Ncat将只接收数据而不会尝试去发送任何数据。 |
--send-only | 只发送数据并忽略所有接收到的数据,此选项也会使得从标准输入接收到EOF时关闭连接并终止。 |
-t, --telnet | 处理Telnet协商DO/DONT WILL/WONT,这使得Telnet会话脚本化。 |
--version | 显示Ncat版本并退出。 |
UNIX域套接字
Unix域套接字作为文件系统项,你必须给要连接或监听的套接字指定一个名字。例如,准备一个连接:
ncat -U ~/unixsock
监听一个套接字
ncat -l -U ~/unixsock
如果套接字不存在,监听模式将会创建一个套接字。套接字将会继续存在,即使程序已结束。
示例
Connect to example.org on TCP port 8080.
ncat example.org 8080
Listen for connections on TCP port 8080.
ncat -l 8080
Redirect TCP port 8080 on the local machine to host on port 80.
ncat --sh-exec "ncat example.org 80" -l 8080
--keep-open
Bind to TCP port 8081 and attach /bin/bash for the world to access freely.
ncat --exec "/bin/bash" -l 8081
--keep-open
Bind a shell to TCP port 8081, limit access to hosts on a local network, and limit the maximum number of simultaneous connections to 3.
ncat --exec "/bin/bash"
--max-conns 3
--allow 192.168.0.0/24 -l 8081
--keep-open
Connect to smtphost:25 through a SOCKS4 server on port 1080.
ncat --proxy socks4host --proxy-type socks4 --proxy-auth user smtphost 25
Create an HTTP proxy server on localhost port 8888.
ncat -l --proxy-type http localhost 8888
Send a file over TCP port 9899 from host2 (client) to host1 (server).
HOST1$ ncat -l 9899
> outputfile
HOST2$ ncat HOST1 9899
< inputfile
Transfer in the other direction, turning Ncat into a "one file" server.
HOST1$ ncat -l 9899
< inputfile
HOST2$ ncat HOST1 9899
> outputfile
本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自: http://www.cnblogs.com/yinghao1991/p/7100663.html
参考
【1】 man nc
以上是关于nc用法小记的主要内容,如果未能解决你的问题,请参考以下文章