socat假http服务器 - 使用文件作为服务器响应

时间:2015-04-20 05:28:07

标签: socat

我一直在尝试使用socat来响应每个连接到它正在使用虚假HTTP回复监听的套接字。我无法让它发挥作用。可能是因为我正在使用socat的cygwin版本?我不知道。

部分问题是我想要第二个参数<some_file_response>不被写入。换句话说,因为它是双向的,它会读取response.txt中的内容,然后写入同一个文件,我不希望这样。即使我做open:response.txt,rdonly它也不会重复工作。 system:似乎没有做任何事情。 exec似乎有效,例如我可以exec:'cat response.txt',但永远不会被发送到连接到端口1234的客户端。

socat -vv tcp-listen:1234,reuseaddr,fork <some_file_response>

我希望它将文件读取到已连接的客户端然后关闭连接,然后反复执行(这就是我使用fork的原因)。

我在这个问题上给予了赏金。请仅在Windows命令提示符下为我提供与cygwin版本配合使用的解决方案。

3 个答案:

答案 0 :(得分:8)

使用cygwin进行测试:

 socat -vv TCP-LISTEN:1234,crlf,reuseaddr,fork SYSTEM:"echo HTTP/1.0 200; echo Content-Type\: text/plain; echo; cat <some_file_response>"

如果您不想要完整的HTTP响应,请忽略回声:

socat -vv TCP-LISTEN:1234,crlf,reuseaddr,fork SYSTEM:"cat <some_file_response>"

答案 1 :(得分:2)

取自socat examples

socat -vv TCP-LISTEN:8000,crlf,reuseaddr,fork SYSTEM:"echo HTTP/1.0 200; echo Content-Type\: text/plain; echo; cat"

答案 2 :(得分:1)

此作品有效:

socat -v -v -d -d TCP-LISTEN:8080,reuseaddr,fork exec:"cat http.response",pipes

需要注意两件事,

  • 是否应该像其他答案一样添加crlf。我不建议。

    1. crlf caused problem sending image
    2. 只需在http响应标头中明确使用\ r \ n。
  • 没有pipes,似乎没有数据发送到客户端。浏览器抱怨:

    127.0.0.1没有发送任何数据。 ERR_EMPTY_RESPONSE

在cygwin中测试。

==编辑==

如果要在cmd.exe内部使用,请确保正确设置了PATH,以便可以找到socatcat

同时说socat.exe下的cat.exeE:\cygwin64\bin

set PATH=%PATH%;E:\cygwin64\bin

cmd.exesocat来自cygwin一起在cat中工作。