"netcat -e" 执行脚本后重置连接
"netcat -e" resetting connection after executing script
我发现了一个类似的问题here但是没有答案。
我写了这个名为 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
我想了解正在发生的事情以及工作方式与其他工作方式之间(技术上)的区别。
提前致谢。
这个问题的答案似乎进展缓慢。我无法用 nc -e
进行测试,所以这不是完整的答案,但也许它会有助于开始对话...
我建议在 HTTP 响应中使用 Content-Length:
header,例如
#!/bin/sh
echo "HTTP/1.1 200 OK
Content-Length: 11
Hello World"
用于...
./answer.sh | nc -l -p 8797
...我发现它允许普通浏览器完成请求。没有它浏览器不知道什么时候停止读取响应,并会等待服务器端关闭连接。
当作为客户端从 nc localhost 8797
连接时,显然这没有区别。 nc
对 HTTP header 不感兴趣,只会继续阅读,直到服务器端断开连接。
我发现了一个类似的问题here但是没有答案。
我写了这个名为 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
我想了解正在发生的事情以及工作方式与其他工作方式之间(技术上)的区别。
提前致谢。
这个问题的答案似乎进展缓慢。我无法用 nc -e
进行测试,所以这不是完整的答案,但也许它会有助于开始对话...
我建议在 HTTP 响应中使用 Content-Length:
header,例如
#!/bin/sh
echo "HTTP/1.1 200 OK
Content-Length: 11
Hello World"
用于...
./answer.sh | nc -l -p 8797
...我发现它允许普通浏览器完成请求。没有它浏览器不知道什么时候停止读取响应,并会等待服务器端关闭连接。
当作为客户端从 nc localhost 8797
连接时,显然这没有区别。 nc
对 HTTP header 不感兴趣,只会继续阅读,直到服务器端断开连接。