kno*_*orv 37 unix sockets linux networking tcp
假设一个旧的Linux应用程序在UNIX域套接字上侦听/tmp/foo.
除了通过UNIX域套接字机制与这个遗留应用程序通信之外,我希望能够通过端口1234上的TCP连接来连接它.
绑定到TCP端口1234然后将所有传入连接重定向到UNIX域套接字的最简单方法是什么/tmp/foo?
kno*_*orv 56
原来socat可以用来实现这个目的:
socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo
Run Code Online (Sandbox Code Playgroud)
并增加了一点安全性:
socat TCP-LISTEN:1234,bind=127.0.0.1,reuseaddr,fork,su=nobody,range=127.0.0.0/8 UNIX-CLIENT:/tmp/foo
Run Code Online (Sandbox Code Playgroud)
这些示例已经过测试并按预期工作.
Bri*_*ell 21
最简单的?可能是Netcat(又名nc):
nc -l 1234 | nc -U /tmp/foo
Run Code Online (Sandbox Code Playgroud)
第一个命令在端口1234上侦听传入连接,并将结果数据传递给第二个命令.第二个连接到Unix域套接字/tmp/foo,并将其输入写入该套接字.请注意,这只接受单个连接,并在删除该连接后立即退出.如果要继续侦听更多连接,请使用以下-k选项:
nc -lk 1234 | nc -U /tmp/foo
Run Code Online (Sandbox Code Playgroud)
您可以通过在一个终端中为该套接字设置监听器来测试这是否有效:
nc -lUk /tmp/foo
Run Code Online (Sandbox Code Playgroud)
并在另一个写入它:
nc localhost 1234
Run Code Online (Sandbox Code Playgroud)
socor,如knorv所推荐,更有能力,但使用起来更复杂.