如何使用netcat发送不完整HTTP请求测试C语言单连接自研服务端
结论
完全可以通过发送不完整HTTP请求的方式实现测试目标,不需要额外安装第三方工具,只用终端自带的系统命令即可完成验证。
核心原理
你编写的单连接服务端默认会在收到完整的客户端请求、处理完成后才会断开当前连接,接纳下一个连接。只要你保持第一个连接不发送完整请求,服务端就会一直挂起等待请求内容,持续占用唯一的连接名额,此时第二个连接的接入结果就可以直接验证你的连接限制逻辑是否生效。
你提到的GET /HTTP/1.0存在格式问题,路径和HTTP版本之间缺少空格,实际测试时建议输入GET / HTTP/1.0且不后续回车换行,避免服务端因为请求格式错误直接返回响应、主动断开连接。
具体测试步骤
- 打开第一个终端窗口,使用默认预装的
nc(netcat)工具连接你的服务端,假设你的服务端监听地址是127.0.0.1、端口为8080,执行命令:
连接建立成功后,输入nc 127.0.0.1 8080GET / HTTP/1.0即可,不要按回车,也不要输入后续的请求头、空行等内容,保持当前窗口不关闭。 - 打开第二个终端窗口,再次执行相同的
nc命令尝试接入服务端:
如果你的单连接限制逻辑生效,第二个连接会直接被拒绝,或者长时间无响应无法建立连接。nc 127.0.0.1 8080 - 测试完成后,回到第一个终端按
Ctrl+C断开连接即可释放服务端资源。
替代方案
如果你的服务端是在TCP层就做了单连接限制,不需要到HTTP层处理逻辑,直接用系统自带的telnet工具也可以完成测试,操作逻辑和nc完全一致:第一个终端保持telnet连接不关闭,第二个终端再发起连接即可验证限制效果。
注意事项
- 不要输入完整的HTTP请求,也就是不要在输入
GET / HTTP/1.0后连续按两次回车,否则服务端会判定请求接收完成,处理完后主动断开连接,无法持续占用连接名额。 - 少数精简系统如果没有预装
nc,直接用telnet替代即可,不需要额外安装软件。
内容的提问来源于stack exchange,提问作者Shisui
相关产品推荐
相关产品推荐

