我一直在尝试使用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版本配合使用的解决方案。
答案 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
。我不建议。
没有pipes
,似乎没有数据发送到客户端。浏览器抱怨:
127.0.0.1没有发送任何数据。 ERR_EMPTY_RESPONSE
在cygwin中测试。
==编辑==
如果要在cmd.exe
内部使用,请确保正确设置了PATH,以便可以找到socat
和cat
。
同时说socat.exe
下的cat.exe
和E:\cygwin64\bin
set PATH=%PATH%;E:\cygwin64\bin
与cmd.exe
和socat
来自cygwin一起在cat
中工作。