'\" te .\" Copyright (c) 1996 David Sacerdote.All rights reserved. .\" Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1.Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3.The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" Portions Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. .TH nc 1 "2012 年 6 月 6 日" "SunOS 5.11" "用户命令" .SH 名称 nc, netcat \- 任意 TCP 与 UDP 连接和侦听 .SH 用法概要 .LP .nf \fBnc\fR \fB-h\fR .fi .LP .nf \fBnc\fR [\fB-46dnrtuvz\fR] [\fB-i\fR \fIinterval\fR] [\fB-P\fR \fIproxy_username\fR] [\fB-p\fR \fIport\fR] [\fB-s\fR \fIsource_ip_address\fR] [\fB-T\fR \fIdspc\fR] [\fB-w\fR \fItimeout\fR] [\fB-X\fR \fIproxy_protocol\fR] [\fB-x\fR \fIproxy_address\fR[:\fIport\fR]][\fB-L\fR \fItimeout\fR] [\fB-e\fR \fIprogram\fR] [\fB-b\fR \fIbufsize\fR] [\fB-q\fR \fItimeout\fR] [\fB-m\fR \fIbytes\fR] [\fB-I\fR \fIbufsize\fR][\fB-O\fR \fIbufsize\fR] [\fB-S\fR \fIsla-prop\fR] \fIhostname\fR \fIport_list\fR .fi .LP .nf \fBnc\fR \fB-l\fR [\fB-46DdEFnrtuvzZ\fR] [\fB-i\fR \fIinterval\fR] [\fB-T\fR \fIdspc\fR] [\fB-e\fR \fIprogram\fR] [\fB-b\fR bufsize] [\fB-q\fR \fItimeout\fR] [\fB-R\fR \fIaddress\fR/\fIport\fR[/\fIproto\fR]] [\fB-m\fR \fIbytes\fR] [\fB-L\fR \fItimeout\fR] [\fB-I\fR \fIbufsize\fR] [\fB-O\fR \fIbufsize\fR] [\fB-S\fR \fIsla-prop\fR] [\fIhostname\fR] \fIport\fR .fi .LP .nf \fBnc\fR \fB-l\fR [\fB-46DEFdnrtuvzZ\fR] [\fB-i\fR \fIinterval\fR] [\fB-T\fR \fIdspc\fR] [\fB-e\fR \fIprogram\fR] [\fB-b\fR \fIbufsize\fR] [\fB-q\fR \fItimeout\fR] [\fB-R\fR \fIaddress\fR/\fIport\fR[/\fIproto\fR]] [\fB-m\fR \fIbytes\fR] [\fB-L\fR \fItimeout\fR] [\fB-I\fR \fIbufsize\fR] [\fB-O\fR \fIbufsize\fR] [\fB-S\fR \fIsla-prop\fR] \fB-p\fR \fIport\fR [\fIhostname\fR] .fi .LP .nf \fBnc\fR \fB-U\fR [\fB-Ddtvz\fR] [\fB-i\fR \fIinterval\fR] [\fB-w\fR \fItimeout\fR] [\fB-e\fR \fIprogram\fR] [\fB-b\fR \fIbufsize\fR] [\fB-q\fR \fItimeout\fR] [\fB-m\fR \fIbytes\fR] \fIpath\fR .fi .LP .nf \fBnc\fR \fB-Ul\fR [\fB-46DdktvZ\fR] [\fB-i\fR \fIinterval\fR] [\fB-e\fR \fIprogram\fR] [\fB-b\fR \fIbufsize\fR] [\fB-q\fR \fItimeout\fR] [\fB-R\fR \fIaddress\fR/\fIport\fR[/\fIproto\fR]] [\fB-m\fR \fIbytes\fR] \fIpath\fR .fi .SH 描述 .sp .LP \fBnc\fR(或 \fBnetcat\fR)实用程序可用于与 TCP 或 UDP 相关的各种任务。\fBnc\fR 可以打开 TCP 连接,发送 UDP 数据包,侦听任意 TCP 和 UDP 端口,执行端口扫描,以及处理 IPv4 和 IPv6。与 \fBtelnet\fR(1) 不同,\fBnc\fR 精细地编写脚本,并将错误消息分隔到标准错误中,而不是将错误消息发送到标准输出。 .sp .LP \fBnc\fR 命令通常用于以下任务: .RS +4 .TP .ie t \(bu .el o 简单 TCP 代理 .RE .RS +4 .TP .ie t \(bu .el o 基于 HTTP 客户机和服务器的 shell 脚本 .RE .RS +4 .TP .ie t \(bu .el o 网络守护进程测试 .RE .RS +4 .TP .ie t \(bu .el o 适用于 \fBssh\fR(1) 的 SOCKS 或 HTTP \fBProxyCommand\fR .RE .sp .LP \fBnc\fR 命令还可以作为 \fBnetcat\fR 运行(使用相同选项)。 .SH 选项 .sp .LP 支持以下选项: .sp .ne 2 .mk .na \fB\fB-4\fR\fR .ad .sp .6 .RS 4n 强制 \fBnc\fR 仅使用 IPv4 地址。 .RE .sp .ne 2 .mk .na \fB\fB-6\fR\fR .ad .sp .6 .RS 4n 强制 \fBnc\fR 仅使用 IPv6 地址。 .RE .sp .ne 2 .mk .na \fB\fB-b\fR \fIbufsize\fR\fR .ad .sp .6 .RS 4n 为读取操作指定缓冲区大小。 .sp 缺省值为 \fB1024\fR 字节。 .RE .sp .ne 2 .mk .na \fB\fB-D\fR\fR .ad .sp .6 .RS 4n 启用对套接字的调试。 .RE .sp .ne 2 .mk .na \fB\fB-d\fR\fR .ad .sp .6 .RS 4n 不尝试从 \fBstdin\fR 进行读取。 .RE .sp .ne 2 .mk .na \fB\fB-E\fR\fR .ad .sp .6 .RS 4n 使用独占绑定来侦听 TCP 或 UDP 套接字。 .sp 在没有 \fB-l\fR 选项的情况下单独使用此选项是错误的。 .sp 此选项与 \fB-U\fR 选项结合使用时,不会产生任何影响。 .RE .sp .ne 2 .mk .na \fB\fB-e\fR \fIprogram\fR\fR .ad .sp .6 .RS 4n 接受连接或建立连接之后执行外部程序。在执行之前,\fBstdin,stdout,stderr\fR 会重定向到网络描述符。仅有一个端口可供该选项使用。 .sp 此选项与 \fB-R\fR、\fB-k\fR 或 \fB-i\fR 选项结合使用是错误的。 .RE .sp .ne 2 .mk .na \fB\fB-F\fR\fR .ad .sp .6 .RS 4n 在 \fBstdin\fR 上看到 \fBEOF\fR 后,不要关闭网络套接字以进行写入。 .RE .sp .ne 2 .mk .na \fB\fB-h\fR\fR .ad .sp .6 .RS 4n 列显 \fBnc\fR 帮助。 .RE .sp .ne 2 .mk .na \fB\fB-I\fR \fIbufsize\fR\fR .ad .sp .6 .RS 4n 设置接收(输入)套接字缓冲区大小。 .sp 此选项与 \fB-U\fR 选项结合使用时,不会产生任何影响。 .RE .sp .ne 2 .mk .na \fB\fB-i\fR \fIinterval\fR\fR .ad .sp .6 .RS 4n 指定发送和接收的文本行之间的延迟时间 \fIinterval\fR。 .sp 以秒为单位指定时间间隔,可能包含小数。 .sp 此选项还会导致与多个端口的连接之间产生延迟时间,因而也会影响端口扫描模式。 .RE .sp .ne 2 .mk .na \fB\fB-k\fR\fR .ad .sp .6 .RS 4n 强制 \fBnc\fR 在其当前连接关闭后侦听另一连接。 .sp 在没有 \fB-l\fR 选项的情况下单独使用此选项是错误的。 .sp 此选项与 \fB-e\fR 选项结合使用是错误的。 .RE .sp .ne 2 .mk .na \fB\fB-L\fR \fItimeout\fR\fR .ad .sp .6 .RS 4n 在关闭时逗留 (Linger on close)-在网络描述符关闭后直到指定的超时时间(以秒为单位),等待消息发送。 .RE .sp .ne 2 .mk .na \fB\fB-l\fR\fR .ad .sp .6 .RS 4n 侦听传入连接,而不是启动到远程主机的连接。 .sp 此选项与 \fB-s\fR 或 \fB-z\fR 选项结合使用是错误的。 .sp 如果 \fB-l\fR 选项与通配符套接字(未指定任何 IP 地址或主机名)一起使用但不与 \fB-4\fR /\fB-6\fR 选项一起使用,则既可接受 IPv4 连接也可接受 IPv6 连接。 .RE .sp .ne 2 .mk .na \fB\fB-m\fR \fIbyte_count\fR\fR .ad .sp .6 .RS 4n 接收至少 \fBbyte_count\fR 字节后退出。当与 \fB-l\fR 选项结合使用时,\fBbyte_count\fR 会与从客户机接收的字节数进行比较。 .sp \fBbyte_count\fR 必须大于 \fB0\fR,而小于 \fBINT_MAX\fR。 .RE .sp .ne 2 .mk .na \fB\fB-N\fR \fIfile\fR\fR .ad .sp .6 .RS 4n 在 UDP 端口扫描模式下指定文件。此文件的内容用作每个发出的 UDP 包的有效载荷。 .sp 在没有 \fB-u\fR 和 \fB-z\fR 选项的情况下单独使用此选项是错误的。 .RE .sp .ne 2 .mk .na \fB\fB-n\fR\fR .ad .sp .6 .RS 4n 不对任何地址、主机名或端口执行任何命名或服务查找操作。 .sp 使用此选项意味着 \fIhostname\fR 和 \fIport\fR 参数被限制为数字值。 .sp 除了对参数施加限制外,与 \fB-v\fR 选项一起使用时,所有地址和端口都将以数字形式输出。此选项与 \fB-U\fR 选项结合使用时,不会产生任何影响。 .RE .sp .ne 2 .mk .na \fB\fB-O\fR \fIbufsize\fR\fR .ad .sp .6 .RS 4n 设置发送(输出)套接字缓冲区大小。 .sp 此选项与 \fB-U\fR 选项结合使用时,不会产生任何影响。 .RE .sp .ne 2 .mk .na \fB\fB-P\fR \fIproxy_username\fR\fR .ad .sp .6 .RS 4n 指定提供给要求验证的代理服务器的一个用户名 (\fIproxy_username\fR)。如果未指定 \fIproxy_username\fR,则不会尝试进行验证。目前仅 \fBHTTP CONNECT\fR 代理支持代理验证。 .sp 此选项与 \fB-l\fR 选项结合使用是错误的。 .RE .sp .ne 2 .mk .na \fB\fB-p\fR \fIport\fR\fR .ad .sp .6 .RS 4n 未与 \fB-l\fR 选项结合使用时,根据特权限制和可用性指定 \fBnc\fR 应使用的源端口。与 \fB-l\fR 选项结合使用时,设置侦听端口。 .sp 仅当未指定全局端口参数时,此选项可与 \fB-l\fR 选项结合使用。 .RE .sp .ne 2 .mk .na \fB\fB-q\fR \fItimeout\fR\fR .ad .sp .6 .RS 4n 在 \fBstdin\fR 上接收到 \fBEOF\fR 后,等待指定的秒数,然后退出。 .RE .sp .ne 2 .mk .na \fB\fB-R\fR \fIaddr\fR/\fIport\fR[/\fIproto\fR]\fI\fR\fR .ad .sp .6 .RS 4n 对指定的 \fIhost\fR 和 \fIport\fR 执行端口重定向。 .sp 接受连接后,\fBnc\fR 会连接到远程 \fIhost\fR/\fIport\fR,并在客户机与远程主机之间传递所有数据。重定向规范的 \fIproto\fR(协议)部分可以是 \fBtcp\fR 或 \fBudp\fR。如果未指定 \fIproto\fR,\fBredirector\fR 将使用与服务器相同的协议。 .sp 此选项与 \fB-z\fR 选项结合使用是错误的。 .RE .sp .ne 2 .mk .na \fB\fB-r\fR\fR .ad .sp .6 .RS 4n 在由 \fIport_list\fR 参数指定的所有端口中随机(而非按顺序)选择目标端口。 .sp 此选项与 \fB-l\fR 选项结合使用是错误的。 .RE .sp .ne 2 .mk .na \fB\fB-s\fR \fIsource_ip_address\fR\fR .ad .sp .6 .RS 4n 指定用于发送数据包的接口的 IP。 .sp 此选项与 \fB-l\fR 选项结合使用是错误的。 .RE .sp .ne 2 .mk .na \fB\fB-S\fR \fIsla-prop\fR\fR .ad .sp .6 .RS 4n 指定为套接字创建的 MAC 流的属性。\fIsla-prop\fR 以属性的 'name=value' 逗号分隔列表的形式提供。 .sp 当前支持的属性名称为 \fBmaxbw\fR、\fBpriority\fR 和 \fBinherit\fR。 .sp \fBmaxbw\fR 和 \fBpriority\fR 来自 flowadm(1M) 中定义的属性,表示流的最大带宽和优先级。\fBmaxbw\fR 的允许值为整数加上可选的后缀(缺省为 Mega)。\fBpriority\fR 的值可以为 'high'、'medium' 和 'low'。 .sp 在创建流时,必须至少指定 \fBmaxbw\fR 和 \fBpriority\fR 之一。 .sp \fBinherit\fR 的值可以为 'on' 和 'off',缺省值为 'off'。缺省情况下,接受的/新的套接字(由 accept(3C) 返回)不会继承侦听器套接字的属性。当将其设置为 'on' 时,新的套接字将继承侦听器套接字的属性。当需要对新套接字实施属性时,这对于 \fB-l\fR 选项很有用。 .sp 此选项需要 \fBSYS_FLOW_CONFIG\fR 特权。此选项还要求指定 IP 地址或主机名。 .RE .sp .ne 2 .mk .na \fB\fB-T\fR \fIdscp\fR\fR .ad .sp .6 .RS 4n 为连接指定区分服务代码点。 .sp 对于 IPv4,此选项指定 IP 服务类型 (Type of Service, ToS) IP 标题字段,参数的有效值为字符串标记 \fBlowdelay\fR、\fBthroughput\fR、\fBreliability\fR 或前面带有 \fB0x\fR 的 8 位十六进制值。 .sp 对于 IPv6(通信流量类),只能使用十六进制值。 .RE .sp .ne 2 .mk .na \fB\fB-t\fR\fR .ad .sp .6 .RS 4n 使 \fBnc\fR 将 \fIRFC 854\fR \fBDON'T\fR 和 \fBWON'T\fR 响应发送到 \fIRFC 854\fR \fBDO\fR 及 \fBWILL\fR 请求。这样就可以使用 \fBnc\fR 编写 \fBtelnet\fR 会话脚本。 .RE .sp .ne 2 .mk .na \fB\fB-U\fR\fR .ad .sp .6 .RS 4n 指定使用 Unix 域套接字。如果不与 \fB-l\fR、\fBnc\fR 一起指定此选项,则它将变成 \fBAF_UNIX\fR 客户机。如果与 \fB-l\fR 选项一起指定此选项,则会创建 \fBAF_UNIX\fR 服务器。 .sp 使用此选项要求必须向 \fBnc\fR 提供单个有效的 Unix 域路径参数,而不是提供主机名或端口。 .RE .sp .ne 2 .mk .na \fB\fB-u\fR\fR .ad .sp .6 .RS 4n 使用 UDP,而不是缺省选项 TCP。 .RE .sp .ne 2 .mk .na \fB\fB-v\fR\fR .ad .sp .6 .RS 4n 指定详细输出。 .RE .sp .ne 2 .mk .na \fB\fB-w\fR \fItimeout\fR\fR .ad .sp .6 .RS 4n 如果连接和 \fBstdin\fR 空闲超过了 \fItimeout\fR 秒,则无提示地关闭连接。 .sp 缺省设置是没有超时。 .sp 此选项对客户机模式下的连接建立阶段或服务器模式下的等待连接过程没有任何影响。 .RE .sp .ne 2 .mk .na \fB\fB-X\fR \fIproxy_protocol\fR\fR .ad .sp .6 .RS 4n 与代理服务器通信时,使用该指定协议。受支持的协议为 \fB4\fR (\fBSOCKS v.4\fR)、\fB5\fR (\fBSOCKS v.5\fR) 和 \fBconnect\fR(\fBHTTP\fR 代理)。如果未指定协议,则使用 \fBSOCKS v. 5\fR。 .sp 此选项与 \fB-l\fR 选项结合使用是错误的。 .RE .sp .ne 2 .mk .na \fB\fB-x\fR \fIproxy_address\fR[:\fIport\fR]\fR .ad .sp .6 .RS 4n 使用 \fIproxy_address\fR 和 \fIport\fR 上的代理请求到 \fIhostname\fR 的连接。如果未指定 \fIport\fR,则使用代理协议的已知端口(\fBSOCKS\fR 为 \fB1080\fR,\fBHTTP\fR 为 \fB3128\fR)。 .sp 此选项与 \fB-l\fR 选项结合使用是错误的。 .sp 此选项不适用于 IPv6 地址的数字表示形式。 .RE .sp .ne 2 .mk .na \fB\fB-Z\fR\fR .ad .sp .6 .RS 4n 在侦听模式下,使用 \fBSO_ALLZONES\fR 套接字选项绑定到所有区域中的地址/端口。 .sp 此选项需要 \fBSYS_NET_CONFIG\fR 特权。 .RE .sp .ne 2 .mk .na \fB\fB-z\fR\fR .ad .sp .6 .RS 4n 执行端口扫描。对于 TCP 端口(缺省),尝试在不发送数据的情况下执行连接扫描(完整三路信号握手)。对于 UDP (\fB-u\fR),缺省情况下会发送空 UDP 包。要指定 UDP 有效载荷,可以使用 \fB-N\fR 选项。 .sp UDP 扫描模式具有估计能力,如果它没有接收到否定响应("ICMP Destination Port Unreachable"(无法访问 ICMP 目标端口)消息),它会考虑打开一个端口。对于这种模式,使用 \fB-w\fR 选项设置的超时时间将用来等待来自远程节点的 ICMP 消息或数据。通过 \fB-v\fR,接收到的任何数据都会作为十六进制字节转储到 \fBstderr\fR。 .sp 由于大多数操作系统会限制发送 ICMP 消息(以响应输入包)的速率,所以有必要在执行 UDP 扫描时使用 \fB-i\fR,否则结果会不可靠。 .sp 此选项与 \fB-l\fR 选项结合使用是错误的。 .RE .SH 操作数 .sp .LP 支持下列操作数: .sp .ne 2 .mk .na \fB\fIhostname\fR\fR .ad .RS 13n .rt 指定主机名。 .sp \fIhostname\fR 可以是数字 IP 地址或者符号主机名(除非已指定 \fB-n\fR 选项)。 .sp 通常,除非已指定 \fB-l\fR 选项或者使用了 \fB-U\fR(在此情况下,参数是一个路径),否则必须指定 \fIhostname\fR。如果随 \fB-l\fR 选项指定了 \fIhostname\fR 参数,则还必须给定 \fIport\fR 参数,并且 \fBnc\fR 会尝试绑定到该地址和端口。如果没有随 \fB-l\fR 选项指定 \fIhostname\fR 参数,则 \fBnc\fR 会尝试在给定 \fIport\fR 的通配符套接字上侦听。 .RE .sp .ne 2 .mk .na \fB\fIpath\fR\fR .ad .RS 13n .rt 指定路径名。 .RE .sp .ne 2 .mk .na \fB\fIport\fR\fR .ad .br .na \fB\fIport_list\fR\fR .ad .RS 13n .rt 指定端口。 .sp \fIport_list\fR 可以指定为单个整数、范围或两者的组合。请以 \fInn-mm\fR 形式指定范围。\fIport_list\fR 至少必须有一个成员,但可以有多个以逗号分隔的端口/范围。 .sp 通常,除非已指定 \fB-U\fR 选项(在此情况下,必须指定 Unix 域套接字路径,而不指定 \fIhostname\fR),否则必须指定目标端口。 .sp 将包含多个端口的端口列表与 -e 选项结合使用是错误的。 .RE .SH 用法 .SS "客户机/服务器模型" .sp .LP 使用 \fBnc\fR 构建最基本的客户机/服务器模型非常简单。在一个控制台上,启动在特定端口上侦听连接的 \fBnc\fR。例如,命令: .sp .in +2 .nf $ nc -l 1234 .fi .in -2 .sp .sp .LP 在端口 \fB1234\fR 上侦听连接。在另一个控制台上(或另一台计算机上),连接到 \fBnc\fR 正在侦听的计算机和端口: .sp .in +2 .nf $ nc 127.0.0.1 1234 .fi .in -2 .sp .sp .LP 现在端口之间应当有一个连接。在第二个控制台上键入的任何内容都将串联到第一个控制台,反之亦然。在连接建立后,\fBnc\fR 不会真正关心哪一端用作\fB服务器\fR,哪一端用作\fB客户机\fR。可使用 \fBEOF\fR (Ctrl/d) 终止连接。 .SS "数据传输" .sp .LP 可以对上一部分中的示例进行扩展,以构建基本的数据传送模型。在连接的一端输入的任何信息都将输出到连接的另一端,并且可以轻松捕获输入和输出,以便模仿文件传送。 .sp .LP 通过使用 \fBnc\fR 启动在特定端口上的侦听,并将输出捕获到一个文件中: .sp .in +2 .nf $ nc -l 1234 > filename.out .fi .in -2 .sp .sp .LP 使用另一台计算机,连接到正在侦听的 \fBnc\fR 进程,向其馈送要传送的文件: .sp .in +2 .nf $ nc host.example.com 1234 < filename.in .fi .in -2 .sp .sp .LP 完成文件传送后,连接将自动关闭。 .SS "与服务器通信" .sp .LP 有时,通过\fB手工\fR(而不是通过用户界面)与服务器进行通信非常有用。当可能需要验证服务器正在发送什么数据来响应客户机发出的命令时,它可以帮助排除故障。 .sp .LP 例如,要检索某个 Web 站点的主页: .sp .in +2 .nf $ echo -n "GET / HTTP/1.0\er\en\er\en" | nc host.example.com 80 .fi .in -2 .sp .sp .LP 这也将显示 Web 服务器发送的标头。如果需要,可以使用 \fBsed\fR(1) 等工具过滤这些标头。 .sp .LP 如果用户了解服务器要求的请求格式,可以构造更为复杂的示例。再如,可使用以下方法将电子邮件提交到 SMTP 服务器: .sp .in +2 .nf $ nc localhost 25 << EOF HELO host.example.com MAIL FROM: > /etc/services wwwredir 8080/tcp # WWW redirect EOF # cat << EOF > /tmp/wwwredir.conf wwwredir stream tcp nowait nobody /usr/bin/nc /usr/bin/nc -w 3 realwww 80 EOF # inetconv -i /tmp/wwwredir.conf wwwredir -> /var/svc/manifest/network/wwwredir-tcp.xml Importing wwwredir-tcp.xml ...Done # inetadm -l wwwredir/tcp SCOPE NAME=VALUE name="wwwredir" endpoint_type="stream" proto="tcp" isrpc=FALSE wait=FALSE exec="/usr/bin/nc -w 3 realwww 80" arg0="/usr/bin/nc" user="nobody" default bind_addr="" default bind_fail_max=-1 default bind_fail_interval=-1 default max_con_rate=-1 default max_copies=-1 default con_rate_offline=-1 default failrate_cnt=40 default failrate_interval=60 default inherit_env=TRUE default tcp_trace=TRUE default tcp_wrappers=FALSE .fi .in -2 .sp .SS "特权" .sp .LP 要绑定到特权端口号,需要向 \fBnc\fR 授予 \fBnet_privaddr\fR 特权。如果配置了 Solaris Trusted Extensions,并且 \fBnc\fR 应侦听的端口被配置为多级别端口,则 \fBnc\fR 还需要具有 \fBnet_bindmlp\fR 特权。 .sp .LP 通过在 \fBuser_attr\fR(4) 中在帐户的缺省特权集中指定这些特权,可以直接将它们分配给用户或角色。但是,这意味着该用户或角色启动的所有应用程序都拥有这些附加特权。要仅在调用 \fBnc\fR 时授予 \fBprivileges\fR(5),建议创建并分配一个 \fBrbac\fR(5) 权限配置文件。有关其他信息,请参见\fB\fR“示例”部分。 .SH 示例 .LP \fB示例 1 \fR使用 \fBnc\fR .sp .LP 打开到 \fBhost.example.com\fR 的端口 \fB42\fR 的 TCP 连接,使用端口 \fB3141\fR 作为源端口,超时为 \fB5\fR 秒: .sp .in +2 .nf $ nc -p 3141 -w 5 host.example.com 42 .fi .in -2 .sp .sp .LP 打开到 \fBhost.example.com\fR 的端口 \fB7777\fR 的 TCP 连接,对套接字设置最大 50Mbps 的带宽: .sp .in +2 .nf $ nc -M maxbw=50M host.example.com 7777 .fi .in -2 .sp .sp .LP 打开到 \fBhost.example.com\fR 的端口 \fB53\fR 的 UDP 连接: .sp .in +2 .nf $ nc -u host.example.com 53 .fi .in -2 .sp .sp .LP 打开到 \fBhost.example.com\fR 的端口 42 的 TCP 连接,使用 \fB10.1.2.3\fR 作为连接的本地端的 IP: .sp .in +2 .nf $ nc -s 10.1.2.3 host.example.com 42 .fi .in -2 .sp .sp .LP 将一个包含端口和端口范围的列表用于针对各种端口的端口扫描: .sp .in +2 .nf $ nc -z host.example.com 21-25,53,80,110-120,443 .fi .in -2 .sp .sp .LP 在某个 Unix 域套接字上创建连接并侦听: .sp .in +2 .nf $ nc -lU /var/tmp/dsocket .fi .in -2 .sp .sp .LP 在关联端口为 \fB8888\fR 的 UDP 套接字上创建连接并侦听: .sp .in +2 .nf $ nc -u -l -p 8888 .fi .in -2 .sp .sp .LP 这等效于: .sp .in +2 .nf $ nc -u -l 8888 .fi .in -2 .sp .sp .LP 在关联端口为 \fB2222\fR 的 TCP 套接字上创建连接并侦听,并且只绑定到地址 \fB127.0.0.1\fR: .sp .in +2 .nf $ nc -l 127.0.0.1 2222 .fi .in -2 .sp .sp .LP 在关联端口 \fB2222\fR 上创建 TCP 套接字并进行侦听,并在侦听器和连接的套接字上创建高优先级的 MAC 流: .sp .in +2 .nf $ nc -l -M priority=high,inherit=on host.example.com 2222 .fi .in -2 .sp .sp .LP 通过将逗留 (linger) 选项和超时时间设置为 \fB0\fR,连接到 TCP 端口、发送一些数据然后终止与 TCP RST 段的连接(而不是传统的 TCP 关闭握手): .sp .in +2 .nf $ echo "foo" | nc -L 0 host.example.com 22 .fi .in -2 .sp .sp .LP 从本地端口 \fB4545\fR 对主机 \fBhost.example.com\fR 上的端口 \fB22\fR 执行端口重定向: .sp .in +2 .nf $ nc -R host.example.com/22 -l 4545 .fi .in -2 .sp .sp .LP 在这之后,应该可以运行 \fBssh\fR(1) 客户机并连接到 \fBhost.example.com\fR(使用运行上述命令的 \fBhost redir.example.com\fR): .sp .in +2 .nf $ ssh -oStrictHostKeyChecking=no -p 4545 redir.example.com .fi .in -2 .sp .sp .LP 还可以让 \fBnc\fR 侦听 TCP 端口并将 TCP 数据流转换为 UDP(反之亦然): .sp .in +2 .nf $ nc -R host.example.com/53/udp -l 4666 .fi .in -2 .sp .sp .LP 使用 \fB10.2.3.4\fR 的端口 \fB8080\fR 上的 HTTP 代理连接到 \fBhost.example.com\fR 的端口 \fB42\fR。\fBssh\fR(1)也可使用此示例。有关更多信息,请参见 \fBssh_config\fR(4) 中的 \fBProxyCommand\fR 指令。 .sp .in +2 .nf $ nc -x10.2.3.4:8080 -Xconnect host.example.com 42 .fi .in -2 .sp .sp .LP 还是同一示例,这一次如果代理要求验证,则使用用户名 \fBruser\fR 来支持代理验证: .sp .in +2 .nf $ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42 .fi .in -2 .sp .sp .LP 可以按类似如下方式有效地完成基本的 UDP 端口扫描: .sp .in +2 .nf $ nc -z -w 3 -u -i 0.5 host.example.com 11-100 .fi .in -2 .sp .sp .LP 在每 2 个端口之间,将暂停 0.5 秒(从而规避 ICMP 消息速率限制)并最多等待 3 秒以接收回复。如果没有接收到回复,端口可能会打开。 .sp .LP 要作为具有附加特权的用户或角色(例如缺省的 \fBroot\fR 帐户)使用最可能小的特权集运行 \fBnc\fR,还可以使用 \fBppriv\fR(1) 来调用它。例如,将其限制为仅以绑定到某个特权端口的特权运行: .sp .in +2 .nf $ ppriv -e -sA=basic,!file_link_any,!proc_exec,!proc_fork,\e !proc_info,!proc_session,net_privaddr nc -l 42 .fi .in -2 .sp .sp .LP 要允许用户或角色仅以 \fBnet_privaddr\fR 特权使用 \fBnc\fR,则需要创建一个权限配置文件。 .sp .in +2 .nf /etc/security/exec_attr Netcat privileged:solaris:cmd:::/usr/bin/nc:privs=net_privaddr /etc/security/prof_attr Netcat privileged:::Allow nc to bind to privileged ports:help=None.html .fi .in -2 .sp .sp .LP 使用 \fBuser_attr\fR(4) 分配该权限配置文件以允许用户或角色运行 \fBnc\fR,从而允许其在任何端口上侦听。要允许用户或角色使用 \fBnc\fR 仅在特定端口上侦听,则应在权限配置文件中指定一个包装脚本: .sp .in +2 .nf /etc/security/exec_attr Netcat restricted:solaris:cmd:::/usr/bin/nc-restricted:privs=net_privaddr /etc/security/prof_attr Netcat restricted:::Allow nc to bind to privileged ports:help=None.html .fi .in -2 .sp .sp .LP 并且编写一个用以限制许可选项的 shell 脚本,例如,编写一个只允许在 \fB42\fR 和 \fB64\fR 之间的端口(不含两者)上绑定的脚本: .sp .in +2 .nf /usr/bin/nc-restricted: #!/bin/sh [ $# -eq 1 ] && [ $1 -gt 42 -a $1 -lt 64 ] && /usr/bin/nc -l -p "$1" .fi .in -2 .sp .sp .LP 当用户或角色通过配置文件 shell 使用该包装脚本调用 \fBnc\fR 时,这将授予额外的特权。请参见 \fBpfsh\fR(1)、\fBpfksh\fR(1)、\fBpfcsh\fR(1) 和 \fBpfexec\fR(1)。 .sp .LP 直接调用 \fBnc\fR 时不会以附加特权运行它,在不使用 \fBpfexec\fR 或配置文件 shell 的情况下调用该脚本时也是如此。 .SH 属性 .sp .LP 有关下列属性的说明,请参见 \fBattributes\fR(5): .sp .sp .TS tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) . 属性类型属性值 _ 可用性network/netcat _ 接口稳定性请参见下文。 .TE .sp .LP 数据包名称是 "Committed"(已确定)。\fB-4\fR、\fB-6\fR、\fB-l\fR、\fB-n\fR、\fB-p\fR、\fB-u\fR 和 \fB-w\fR 选项及其参数(如果有),命令行语法是 "Committed"(已确定)。\fIname\fR 和 \fIport\fR 列表参数是 "Committed"(已确定)。端口范围语法是 "Uncommitted"(未确定)。所有其他命令行选项及其参数的接口稳定性级别是 "Uncommitted"(未确定)。 .SH 另请参见 .sp .LP \fBcat\fR(1)、\fBpfcsh\fR(1)、\fBpfexec\fR(1)、\fBpfksh\fR(1)、\fBpfsh\fR(1)、\fBppriv\fR(1)、\fBsed\fR(1)、\fBssh\fR(1)、\fBtelnet\fR(1)、\fBinetadm\fR(1M)、\fBinetconv\fR(1M)、\fBinetd\fR(1M)、\fBssh_config\fR(4)、\fBuser_attr\fR(4)、\fBattributes\fR(5)、\fBprivileges\fR(5)、\fBrbac\fR(5) .SH 作者 .sp .LP \fBnc\fR 的原始实现的作者是 Hobbit (\fBhobbit@avian.org\fR)。 .sp .LP Eric Jackson (\fBericj@monkey.org\fR) 重新编写了 \fBnc\fR,增加了对 IPv6 的支持。 .SH 附注 .sp .LP 如果 \fBnc\fR 的实例正在侦听通配符套接字(无论指定的地址族如何),仍可以将其他 \fBnc\fR 进程绑定到具体 IP 地址并接受与该地址的连接。例如,通过运行以下进程: .sp .in +2 .nf $ nc -4 -l 5656 .fi .in -2 .sp .sp .LP 可以运行另一个 \fBnc\fR 进程,对特定 IP 地址和同一端口进行侦听: .sp .in +2 .nf $ nc -4 -l 10.20.30.40 5656 .fi .in -2 .sp .sp .LP 后一个进程接受与地址 \fB10.20.30.40\fR 以及端口 \fB5656\fR 的 TCP 连接,而前一个进程接受与端口 \fB5656\fR 以及不同地址的所有 TCP 连接。 .sp .LP 此外,还可以通过绑定到 IPv4 通配符套接字从侦听通配符套接字(不指定地址族)的进程窃取 IPv4 连接。要禁止出现这种情况以及上述行为,可以使用 \fB-E\fR 选项。