nc基本使用
nc(netcat)命令短小精干、功能强大,有着“瑞士军刀”的美誉。它主要被用来快速构建网络连接。我们可以让它以服务器方式运行,监听某个端口并接受客户连接,因此它可用来调试客户端程序。我们也可以使之以客户端方式运行,向服务器发起连接并接受发数据,因此它可以用来调试服务器程序,此时它有点像telnet程序。
nc命令常用来的选项包括:
- -i,设置数据包传送的时间间隔。
- -l,以服务器方式运行,监听指定的端口。nc命令默认以服务器方式运行。
- -k,重复接受并处理某个端口上的所有连接,必须与-l选项一起使用。
- -n,使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称。
- -p,当nc命令以客户端方式运行时,强制其使用指定的端口号。
- -s,设置本地主机发送出的数据包的IP地址。
- -C,将CR和LF两个字符作为行结束符。
- -U,使用UNIX本地域协议通信。
- -u,使用UDP协议。nc命令默认使用传输层协议是TCP。
- -w,如果nc哭护短在指定的时间内未检测到任何输入,则退出。
- -x,指定目标代理服务器的IP地址和端口号。
- -z,扫描目标机器上的某个或某些服务是否开启(端口扫描)。比如,要扫描机器ernest-laptop上端口号在20~50之间的服务,可以使用如下命令:
$ nc -z ernest-laptop 20-50
举例来说,我们可以使用如下方式来连接websrv服务器并向它发送数据:
$ nc -C 127.0.0.1 13579(服务器监听端口13579)
GET http://localhost/a.html HTTP/1.1(回车)
Host:localhost(回车)
(回车)
HTTP/1.1 404 Not Found
Content-Length: 49
Connection: close
The requested file was not found on this server.
这里我们使用了-C选项,这样每次我们按下回车键向服务器发送一行数据时,nc客户端程序都会给服务器额外发送一个,而这正是websrv服务器期望的HTTP行结束符。发送完第三行数据之后,我们得到了服务器的响应,内容正是我们期望的:服务器没有找到被请求的资源文件a.html。可见,nc命令是一个很方便的快速测试工具,通过它我们能很快找出服务器的逻辑错误。