【发布时间】:2017-09-19 10:35:12
【问题描述】:
我使用 netcat 通过 bash 运行一个小型开发网络服务器,它能够一次处理一个连接。
Netcat 启动如下(-k 使其在多个连接中存活):
nc -kl 3000
一个 bash 脚本处理 netcat 接收到的浏览器请求,并构建响应,然后通过同一个 netcat 实例将响应发送回浏览器。
一切都按预期工作,但有时浏览器无法获取它请求的文件。我的怀疑:如果在完全发送响应之前关闭连接,则响应的其余部分将作为对以下请求的响应发送(当然,它不属于)。
证明
- 终端 1(服务器):
nc -kl 3000 - 终端 2(模拟浏览器):
nc localhost 3000 - 在终端 1 中输入
hello\n。 - 2 号航站楼打印
hello\n。 - 在终端 2 中执行 Ctrl+C 以结束连接。
- 在终端 1 中输入
world\n。 - 再次在终端 2 中运行
nc localhost 3000(新连接)。 - 终端 2 立即显示
world\n,即使在不存在连接时实际发送了world\n,这意味着作为第一个连接中的第二个响应行。
必需的行为:如果不存在连接,则忽略传递给 netcat 的所有字节。
可以使用netcat吗? (我更喜欢 netcat 这样的工具,因为它预装在所有机器上。)
【问题讨论】:
-
您能否详细说明您是如何在 netcat 和您的脚本之间进行交互的?
-
我问这个问题是因为 cf 我的编辑(行后)
-
您需要让您的 http 服务器程序生成您要运行的脚本,以便在断开连接时,当脚本将执行返回给父级时,输出将被丢弃。我相信nmap的ncat可以做到。或者您可以write your own webserver 控制 fds,并确保在客户端断开连接时刷新所有输出。
-
好吧,在 ubuntu 上默认安装了 python,并且您提供了一个极简的 Web 服务器实现,例如,为了提供文件,您只需执行
python -m SimpleHTTPServer <port>(变为http.serverin python 3.x),这相当 @ 987654324@. -
这点很好,谢谢。我正在玩
ncat,如果它不起作用,我将使用Python的简单HTTP服务器。