将TCPstream量redirect到Linux下的UNIX域套接字
假定在UNIX域套接字/tmp/foo
上监听传统Linux应用程序。
除了通过UNIX域套接字机制与这个遗留应用程序进行通信之外,我还希望能够通过端口say 1234上的TCP连接来连接它。
绑定到TCP端口1234然后将所有传入连接redirect到UNIX域套接字/tmp/foo
最简单的方法是什么?
原来socat可以用来实现这个:
socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo
并增加了一点安全性:
socat TCP-LISTEN:1234,bind=127.0.0.1,reuseaddr,fork,su=nobody,range=127.0.0.0/8 UNIX-CLIENT:/tmp/foo
这些例子已经过testing,并按预期工作。
最简单的? 可能是Netcat(又名nc
):
nc -l 1234 | nc -U /tmp/foo
第一个命令在端口1234侦听传入连接,并将结果数据传送到第二个命令。 第二个连接到Unix域套接字/tmp/foo
,并将其input写入该套接字。 请注意,这只会接受单个连接,并且在连接断开后立即退出。 如果要继续监听更多连接,请使用-k
选项:
nc -lk 1234 | nc -U /tmp/foo
你可以通过在一个terminal上为这个套接字设置一个监听器来testing这个工作。
nc -lUk /tmp/foo
并写在另一个:
nc localhost 1234
根据knorv的build议, socat更有能力,但使用起来更复杂。
您应该可以绑定到TCP 1234,为/ tmp / foo获取套接字fd,并使用select调用来监听1234和/ tmp / foo上的数据。 任何写入1234的数据都会被重写为/ tmp / foo,反之亦然。
您现在充当代理并来回传输数据。
这里是一个网页,可能有助于: http : //osr507doc.sco.com/en/netguide/dusockC.io_multiplexing.html
没有尝试过,但它看起来像“lighttpd”可以为你做到这一点:
再加上@ knorv的回答 :用xinetd
它可以像守护进程一样工作
# cat /etc/xined.d/mysrv service mysrv { disable = no type = UNLISTED socket_type = stream protocol = tcp wait = no server = /usr/bin/socat server_args = STDIN UNIX-CLIENT:/tmp/mysocket.sock bind = 127.0.0.1 port = 1234 }