19

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

部分问题是我<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 版本的解决方案。

4

3 回答 3

10

用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>"
于 2015-04-30T13:37:03.300 回答
3

取自 socat示例

socat -vv TCP-LISTEN:8000,crlf,reuseaddr,fork SYSTEM:"echo HTTP/1.0 200; echo Content-Type\: text/plain; echo; cat"
于 2015-04-30T12:10:19.143 回答
1

这个有效:

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

有两点需要注意,

  • 你应该添加crlf,就像其他答案一样。我建议不要。

    1. crlf 导致发送图像问题
    2. 只需在 http 响应标头中显式使用 \r\n 即可。
  • 没有pipes,似乎没有数据发送给客户端。浏览器抱怨:

    127.0.0.1 没有发送任何数据。ERR_EMPTY_RESPONSE

在cygwin中测试。

== 编辑 ==

如果你想使用 inside cmd.exe,请确保 PATH 设置正确,以便socat可以cat找到。

两者都说socat.exe并且cat.exe位于E:\cygwin64\bin

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

适用于cmd.exe,与cygwinsocatcat来自 cygwin。

于 2020-04-06T07:03:12.260 回答