nc命令介绍

名字: 
nc - 连接、监听任意的TCP和UDP。 
概要: 
nc [-46DdhklnrStUuvzC] [-i 间隔] [-p 源端口] 
[-s 源IP地址] [-T 服务类型] [-w 超时时间] [-X 代理协议] 
[-x 代理地址[:端口]] [主机名] [端口[s]]

详细说明: 
nc(netcat)的功能使用是涉及到TCP或者UDP的时候。它可以打开TCP连接,发送UDP包,监听任意的TCP和UDP端口,扫描端口,处理IPv4和IPv6。nc脚本是非常好的,跟telnet(1)不一样,它把错误信息输出到标准错误输出上而不是输出到标准输出上(屏幕)。

常用的用法: 
* 简单的TCP代理 
* 基于http客户端和服务器端的shell 脚本 
* 测试网络上的守护进程 
选项如下:

  • -4 强制nc只能使用IPv4地址。
  • -6 强制nc只能使用IPv6地址。
  • -D 在socket上进行调试以排除故障。
  • -d 不尝试从标准输入读取。
  • -h 打印nc帮助信息。
  • -i 间隔 
    在发送和接收之间指定一个间隔时间。同时会引起连接多个接口时的延迟。
  • -k 当nc当前的连接完成时,强制nc监听其它的连接。必须同时使用- l选项。
  • -l 指定nc监听一个外来的连接,而不是向远程主机发起一个连接。不能同时使用 -p , -s, -z, -w选项。
  • -n 不在任何指定的地址、主机、端口查看DNS或者服务。
  • -p 源端口 
    指定nc应该使用的源端口,受到特权的限制和可用性。不能同时使用-l选项。
  • -r 指定源或目标端口使用随机的端口而不是一个范围序列或系统分配的顺序。
  • -S 使RFC 2385 TCP 的MD5签名可用。
  • -s 源IP地址 
    指定发送包的接口的IP。不能同时使用-l选项。
  • -T 服务类型 
    为连接指定IP报头的服务类型。有效值为”lowdelay”,”throughput”,”reliability”或者是8位的16进制值(16进制前缀0x)。
  • -C 发送CRLF作为一行的结束。
  • -t 引发nc发送RFC 854 DON’The WON’T响应给RFC 854 DO和WILL请求。这使得使用nc脚本化telnet会话成为可能。
  • -U 指定使用Unix Sockets 服务。
  • -u 使用UDP代替默认的TCP。
  • -v nc给出更详细的输出。
  • -w 超时时间 
    如果连接或输入停顿时间超过超时时间就关闭连接。-w选项不会影响到-l选项,也即,nc将会永久的监听一个连接,不管有没有-w选项。默认没有超时时间。
  • -X 代理版本 
    当与代理服务器会话是要求nc使用指定的代理协议。支持的协议有”4”(SOCKS v.4),”5”(SOCKS v.5),”connect”(HTTPS proxy).默认使用SOCKS v.5。
  • -x 代理地址[:端口] 
    要求nc使用一个有代理地址和端口的代理来连接主机名。如果没有指定,则使用熟知端口(SOCKS-1080,HTTPS-3128)。
  • -z 指定nc只扫描正在监听的守护进程,不发送任何数据。

    主机名可以是数字形式的IP或者是名字标志(除非使用了-h选项)。通常,主机名必须被指定,除非使用-l选项(这种情况下,本地主机正在使用)。

    端口可以是整数或一个范围(格式nn-mm)。通常,必须指定目标端口,除非使用-U选项(这种情况下,必须指定一个socket)。

客户端/服务器 模式: 
使用nc很容易建立一个很基本的客户端/服务器。在一个控制台,开启nc监听一个指定端口的连接。 
例如:

 $ nc -l 1234
nc正在监听在1234端口上的连接。在第二个控制台(或第二天机器),连接到正在被监听的主机的端口:
 $ nc 127.0.0.1 1234
现在在两个端口之间建立了连接。第二个控制台的任何类型将会连接到第一个,反之亦然。
当连接设置完成,nc不关心哪边是服务器哪边是客户端。使用EOF('^D')来结束连接。

数据传输: 
前面的例子已经详述了如何建立一个基本的数据传输模型。在连接的任何一端输入任何信息都会输出到另外一端,为了仿真文件传输,输入输出可以很容易的捕获。 
使用nc开启一个指定端口的监听,将输出捕获到一个文件中:

nc -l 1234 > filename.out
使用第二个机器,连接到nc正在监听的进程,将准备传输的文件传送到第一个主机nc正在监听的进程:
    $ nc host.example.com 1234 < filename.in
传输完成,连接自动关闭。

对话服务器: 
有时候手动与服务器对话比使用一个用户接口更有用。当可能有必要查证服务器响应给客户端命令时发送的数据,以帮助检修。例如,重新得到一个网站的主页:

    $ echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

注意到这里也显示了Web服务器发送的报头。如有必要,使用sed(1)可以过滤掉报头。
当使用者知道服务器请求命令的格式后可以进行更复杂的例子操作。
另一个例子,邮件可能被提交到一个SMTP服务器的用法:
    $ nc [-C] localhost 25 << EOF
    HELO host.example.com
    MAIL FROM: <user@host.example.com>
    RCPT TO : <user2@host.example.com>
    DATA
    Body of email .
    .
    QUIT
    EOF

端口扫描: 
可以知道目标主机上开启的端口和服务。-z选项告诉nc打印开启的端口而不是发起一个连接。例如:

    $ nc -z host.example.com 20-30
    Connection to host.example.com 22 port [tcp/ssh] succeeded!
    Connection to host.example.com 25 port [tcp/ssh] succeeded!
只搜索指定范围20-30的端口。
作为一种选择,它可以知道目标主机正在运行的软件和版本。这些纤细经常包含在问候的标语之中。
为了重新得到这些信息,必须首先建立一个连接,当重新得到标语之后就断开连接。
可以通过-w指定一个比较小的超时时间或者通过发送“QUIT"命令给服务器来完成:
    $ echo "QUIT" | nc host.example.com 20-30
    SSH-1.99-OpenSSH_3.6.1p2
    Protocol mismatch.
    220 host.example.com IMS SMTP Receiver Version 0.84 Ready

例子:

    $ nc -p 31337 -w 5 host.example.com 42
    $ nc -p 31337 -w 5 host.example.com 42

打开一个到host.example端口为53的UDP连接:

    $ nc -u host.example.com 53

使用10.1.2.3作为本地主机IP打开一个到host.example端口为42的TCP连接:

    $ nc -s 10.1.2.3 host.example.com 42

建立并监听一个Unix Socket 守护进程:

    $ nc -lU /var/tmp/dsocket

通过了一个IP为10.2.3.4的HTTP代理服务器的8080端口,连接到host.example.com的42端口。这个例子也可以使用ssh(1)来实现;更多信息可查看ssh_config(5)的ProxyCommand指令。

    $ nc -x10.2.3.4:8080 -Xconnect host.example.com 42
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值