netcat被称为网络工具中的瑞士×××,最初由Hobbit <hobbit@avian.org>开发,并且在多年来一直被认为是网络安全领域最有用工具的前几名。

它利用其丰富的参数成为一个方便的网络调试和探测工具,通过TCP 或者UDP 在网络上读写数据。并且易于直接被其他程序和脚本使用,包装成开发者需要的网络工具。
 
测试环境
下面的简单测试均在两台内网的机器之间进行,操作系统类型和IP 地址如下:

A (BackTrack 5, 10.200.21.232)

B (CentOS release 5.5, 10.200.21.235)

 

帮助与参数详解

root@bt:~# netcat -h

[v1.10-38]

connect to somewhere:   nc [-options] hostname port[s] [ports] ...

listen for inbound:     nc -l -p port [-options] [hostname] [port]

options:

        -c shell commands       as `-e'; use /bin/sh to exec [dangerous!!]

        -e filename             program to exec after connect [dangerous!!]

        -b                      allow broadcasts

        -g gateway              source-routing hop point[s], up to 8

        -G num                  source-routing pointer: 4, 8, 12, ...

        -h                      this cruft

        -i secs                 delay interval for lines sent, ports scanned

        -k                      set keepalive option on socket

        -l                      listen mode, for inbound connects

        -n                      numeric-only IP addresses, no DNS

        -o file                 hex dump of traffic
        -p port                 local port number

        -r                     randomize local and remote ports

        -q secs                 quit after EOF on stdin and delay of secs

        -s addr                 local source address
        -T tos                  set Type Of Service
        -t                      answer TELNET negotiation
        -u                      UDP mode

        -v                      verbose [use twice to be more verbose]

        -w secs                 timeout for connects and final net reads

        -z                      zero-I/O mode [used for scanning]

port numbers can be individual or ranges: lo-hi [inclusive];

hyphens in port names must be backslash escaped (e.g. 'ftp\-data').

 
参数详解:
 
-v参数:
        可以将一些关于连接建立信息输出到标准错误。-v 参数多出现几次,则显示的信息会更多一些。如果-v 参数没有出现,则netcat 将默默地工作,至到出现错误为止。
例1 :用-v 连接

root@bt:~# nc -v 10.200.21.235 21

10.200.21.235: inverse host lookup failed: Unknown server error : Connection timed out

(UNKNOWN) [10.200.21.235] 21 (ftp) open

220 (vsFTPd 2.0.5)

 
-z参数:
        表示不发送任何数据到TCP 连接或非常有限的数据到UDP 连接( 实际上对于UDP 协议,-z 选项意义不大) 。
 
例1 :TCP 的情况
1) A 用 nc 连接B 的80 端口,不带-z 参数 。nc 提示符将等用户输入数据。次数输入两个回车符,然后用CTRL+C 结束nc 进程。

root@bt:~# nc 10.200.21.235 80

回车
回车
^C
root@bt:~#
从下面的tcpdump 抓包来看,在标准的TCP 三次握手建立以后,从A 到B 有两个标志位为PSH 的数据包,这就是用户两次输入的回车符。
[root@centOS ~]#tcpdump port 80

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

06:04:12.633407 IP 10.200.21.232.33987 > 10.200.21.235.http: S 4117132960:4117132960(0) win 14600 <mss 1460,sackOK,timestamp 155677271 0,nop,wscale 6>

06:04:12.746654 IP 10.200.21.235.http > 10.200.21.232.33987: S 757606161:757606161(0) ack 4117132961 win 5792 <mss 1460,sackOK,timestamp 610759967 155677271,nop,wscale 7>

06:04:12.634408 IP 10.200.21.232.33987 > 10.200.21.235.http: . ack 1 win 229 <nop,nop,timestamp 155677275 610759967>

06:0