netcat是一个基于命令行的网络调试和开发工具。对于windows和linux操作系统中都有适配的程序包,程序文件短小精悍。在网络编程的世界里,有 “瑞士军刀” 的美誉。
既能够模拟客户端的行为进行数据包的发送,也能够模拟服务端的行为进行数据包的接收,
只需启动两个netcat进程,就能同时扮演客户端和服务器的角色。
比如端口连通性测试,我们通常可以使用 telnet 命令来测试目标服务器的端口是否开启,当然我们也可以使用netcat来完成。
另外使用netcat结合重定向输入输出还能够实现文件传输。
下图中是windows系统中netcat-1.11版本程序包解压之后的目录
![在这里插入图片描述](https://img-blog.csdnimg.cn/5f8148b7aa23417198da60982e65c647.png)
其中包含nc.exe和nc64.exe,分别表示32位系统和64位系统下的可执行程序
readme.txt 文件包含 netcat基本命令的使用介绍
![在这里插入图片描述](https://img-blog.csdnimg.cn/a4dca3787f2a45ee859d74e8affbdebe.png)
访问百度首页,可以使用如下命令
nc www.baidu.com 80
程序启动后,在控制台输入
GET /index.html HTTP/1.1
然后按下两个换行并等待控制台的输出
可以看到来自百度服务器的响应头和响应体。
比如侦听23端口 可以使用命令 nc -l -p 23
-l 表示listen,-p表示端口
nc -l -p 23
运行命令后,控制台处于等待状态
此时,可以使用PostMan作为客户端发送测试HTTP请求
发送请求后,发送按钮的文字变成"Sending… ",也就是发送中等待服务端响应报文
查看nc控制台输出,可以看到PostMan发送的请求头和请求体
在控制台输入以下响应报文然后按回车
HTTP/1.1 200 OK
Content-Length: 12
Hello,World!
然后切换到PostMan主界面,可以看到PostMan显示了响应体
这样netcat和postman就共同完成了一次完整的http请求
要进行文件传输,需要同时开启两个netcat进程,一个作为发送端一个作为接收端
先启动接收端,再启动发送端
接收端命令
nc -l -p 23 > test\nc.exe
发送端命令
nc localhost 23 < nc.exe
值得注意的是发送端在文件发送完之后不会断开连接,可以在发送端 控制台按下ctrl+c组合键
运行test\nc.exe,测试接收文件的完整性
可以看到正常执行,说明没有丢包
在不使用控制台输入输出重定向的情况下,在控制台发送数据包需要按下回车进行逐行发送。
发送文件相对有局限性,启动单个进程后只能发送单个文件。
1.程序包短小精悍,既能作为客户端又能作为服务端,减少了不必要的第三方引入。
2.使用netcat能够看到tcp连接数据包的完整性,方便使用者找出字符串拼接一类的错误,具有实用性。
3.发送的数据包格式较为基础,能够提高对各种协议数据包格式的认识,对理解上层应用有好处。