将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”可以为你做到这一点:

http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore

再加上@ 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 }