首页 > 代码库 > nc用法小记

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类似一个服务器。

在连接模式下,hostnameport参数指明应该连接到哪,hostname是需要的,它可能是一个域名或ip地址。如果有port,它一定是一个十进制的端口号。如果省略,默认是31337。

在监听模式下,hostnameport指定服务器要绑定的地址。这两个参数都是可选的,如果省略了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用法小记