开发NetCat的功能 =============== NetCat小巧且功能强大,描述它的功能就是象描述瑞士军刀的功能一样。 如果没有提供命令行参数,NetCat会提示你从标准输入来输入命令参数, 然后NetCat会在内部解析输入。用这种办法输入命令式参数,可以用来防止借 助“ps”来查看你的命令行参数。 主机参数可以是一个名字或一个IP地址。如果-n出现,则它接受IP地址, 而不再对计算机的名字或域名进行解析。如果没有-n,但加上-v,则NetCat可 进行正/反向域名解析,并警告the all-too-common problem of mismatched name in DNS 。这会耗费稍多一点时间,但在某些情况下会有用处。如,你想 知道某个IP的主机名,NetCat可省却你手工查找的时间。 要建立对外的连接,必须提供一个端口号,可以是个数字,也可以 /etc/services列表中的端口服务名。当-n 出现时,则只有数字形式的端口可 以接收。 -v参数,可以将一些关于连接建立信息输出到标准错误。-v参数多出现几 次,则显示的信息会更多一些。如果-v参数没有出现,则NetCat将默默地工作, 至到出现错误为止。 -w参数后跟一个时间值,用以指定建立链接时的等待时间,-w如果多次出 现,则后面的值将取代前面的设置。-w还用来设置连接非活动时间,当标准输 入结束以后,如果等待指定的一段时间后仍没有数据返回,则NetCat会再试一 次,然后关闭连接并退出。 当-u参数出现时,用UDP建立连接。 用-o logfile参数,可以将连接上往来传输的数据以16进制的形式记录到 logfile中(每行的左半部分是16进制显示,右半部分为ascii显示)。其中, 每行的第一个字符为”<”或”>”,分别表示接收的数据或发送的数据。 NetCat用-s ip-addr或-s name来绑定本地网络资源地址,-p portarg 来 绑定本地端口。除了因权限限制或端口已经使用外,-p可以绑定任何端口。 Root用户可以绑定保留的1024以内的端口。如果不用-p指定端口,则使用系统 给定的未使用的端口。(-p功能在客户端状态也可以使用,-s功能并不是在所有 的平台上都可用) -l参数可以使NetCat以服务器状态运行。 ”nc -l -p 1234 [remote hostname] [remote port]”可以用来指定入连的主机 和端口,如果申请连接的主机或端口不符指定,则会断开连接。 当编译时置-DGAPING_SECURITY_HOLE,则-e参数被NetCat支持。-e后面跟 一可执行程序的名称,当一个连接(入或出)被建立时,这个程序被运行。尤 其当NetCat以服务器端运行时,-e参数使其有点象inetd了, 只是只能运行一 个进行而已。需要说明的是,-e后的程序不能从NetCat的命令行接收参数,如 果有参数要传递,可能需要一个脚本。 当编译时置-DTELNET,则-t参数被支持,此时NetCat可以登录到一个 telnetd服务器,并提供相关的握手应答,至到出现登录提示符。 NetCat用8k的读写,来尽可能高效将收到数据显示到标准输出上及将标准 输入写到连接上。-i参数,可以用来设置发送一行标准输入信息的间隔,以减 少发送速度。 端口扫描是一探测主机服务的流行方法。NetCat的命令行中,先是参数, 再是主机,最后是端口。端口可以是一些服务名、端口号,或者是一个端口范 围(形如N-M)。 ”nc -v -w 2 -z -i 1 20-30”用来扫描target主机的20-30(两端包含)端口, -z表示不发送任何数据到TCP连接或非常有限的数据到UDP连接。-i用以指明两 个端口建立连接的时间的间隔。-w用以指明连接不活动时间。通常情况下,扫 描按从高到低的顺序依次扫描指定的端口,-r参数可以让NetCat在指定的端口 范围内随机地扫描端口。(当-r被用于单个连接时,本地的端口在8192以上, 除非用-p指定) -g可以用来指定网关(最多可达8个),-G可以用来指定source-routing pointer。(这是原文,但我还是不明白。:(-g => Group hops Many people are interested in testing network connectivity using IP source routing, even if it's only to make sure their own firewalls are blocking source-routed packets. On systems that support it, the -g switch can be used multiple times [up to 8] to construct a loose-source-routed path for your connection, and the -G argument positions the ``hop pointer'' within the list. If your network allows source-routed traffic in and out, you can test connectivity to your own services via remote points in the internet. Note that although newer BSD-flavor telnets also have source-routing capability, it isn't clearly documented and the command syntax is somewhat clumsy. Netcat's handling of ``-g'' is modeled after ``traceroute''.) NetCat不是一个任意包发生器,但可以与raw socket通话,nit/bpf/dlpi 有时也能行( nit/bpf/dlpi may appear at some point).推荐Drren Reed的 ip_filter包,里面有一个工具能创建并发送raw packets.
root@mail etc #nc -h GNU netcat 0.7.0, a rewrite of the famous networking tool. Basic usages: connect to somewhere: nc [options] hostname port [port] ... listen for inbound: nc -l -p port [options] [hostname] [port] ... tunnel to somewhere: nc -L hostname:port -p port [options]
Mandatory arguments to long options are mandatory for short options too. Options: -c, --close close connection on EOF from stdin -e, --exec=PROGRAM program to exec after connect -g, --gateway=LIST source-routing hop point[s], up to 8 -G, --pointer=NUM source-routing pointer: 4, 8, 12, ... -h, --help display this help and exit -i, --interval=SECS delay interval for lines sent, ports scanned -l, --listen listen mode, for inbound connects -L, --tunnel=ADDRESS:PORT forward local port to remote address -n, --dont-resolve numeric-only IP addresses, no DNS -o, --output=FILE output hexdump traffic to FILE (implies -x) -p, --local-port=NUM local port number -r, --randomize randomize local and remote ports -s, --source=ADDRESS local source address (ip or hostname) -t, --tcp TCP mode (default) -T, --telnet answer using TELNET negotiation -u, --udp UDP mode -v, --verbose verbose (use twice to be more verbose) -V, --version output version information and exit -x, --hexdump hexdump incoming and outgoing traffic -w, --wait=SECS timeout for connects and final net reads -z, --zero zero-I/O mode (used for scanning)
Remote port number can also be specified as range. Example: '1-1024'
一.客户端 这是最简单的使用方式,nc nc www.apache.org 80 get / http/1.1 HTTP/1.1 400 Bad Request Date: Mon, 08 Dec 2003 06:23:31 GMT Server: Apache/2.0.48-dev (Unix) Content-Length: 310 Connection: close Content-Type: text/html; charset=iso-8859-1
400 Bad Request
Bad Request Your browser sent a request that this server could not understand.
Apache/2.0.48-dev (Unix) Server at www.apache.org Port 80
呵呵,看到了什么,我什么也没说哦:p
二.简单服务器 nc -l -p //这里-l参数表明nc处于监听模式,-p指定端口号. nc -l -p 1234[假设这台主机ip为192.168.0.1] 然后从客户端输入, nc 192.168.0.1 1234 然后你从任一端输入的数据就会显 示在另一端了.其实netcat的server和client的区别并不大,区别仅仅在于谁执 行了-l来监听端口,一旦连接建立以后,就没有什么区别了. 从这里我们也可以 了解netcat的工作原理了,通过网络链接读写数据.[It is a simple Unix utility which reads and writes data across network connections, using TCP or UDP protocol]--@stake主页是这么说的.