首页 > 解决方案 > "netcat -e" 执行脚本后重置连接

问题描述

我在这里发现了一个类似的问题,但没有答案。

我编写了这个名为 answer.sh 的脚本:

#!/bin/sh

echo "HTTP/1.1 200 OK

Hello World"

如果我跑

./answer.sh | nc -c -l -p 8797

然后浏览到 localhost:8797 我得到一个只有“Hello World”文本的网页(这正是我想要的)。

但如果我跑

nc -l -p 8797 -e ./answer.sh

浏览器说连接中断。所以我尝试

nc localhost 8797

看看会发生什么,我明白了:

HTTP/1.1 200 OK

Hello World
read(net): Connection reset by peer

我想了解正在发生的事情以及(技术上)工作方式与其他方式之间的区别。

提前致谢。

标签: shellscriptingshnetcat

解决方案


看起来这个问题的答案很慢。我无法进行测试nc -e,所以这不是一个完整的答案,但也许它会帮助开始对话......

Content-Length:我建议在 HTTP 响应中使用标头,例如

#!/bin/sh

echo "HTTP/1.1 200 OK
Content-Length: 11

Hello World"

当用于...

./answer.sh | nc -l -p 8797

...我发现它允许普通浏览器完成请求。没有它,浏览器不知道何时停止读取响应,并将等待服务器端关闭连接。

但是,当从nc localhost 8797客户端连接时,显然这没有什么区别。 nc对 HTTP 标头不感兴趣,只会继续阅读,直到服务器端断开连接。


推荐阅读