我有一个程序运行时,开始在端口 12345 上列出
$ ./cool_script.pl
我的 Linux 管理员说打开端口违反了政策。他说我可以使用 ~/cool_script.sock(unix 域套接字)进行通信。显然,他的 nginx 服务器可以像 tcp 端口一样读取和写入 sock。
无论如何,有没有办法包装可执行文件(。/cool_script.pl),以便它打开监听端口的尝试重定向到.sock文件。
我尝试过的:阅读一些关于socat的文档
答案1
这个例子应该适合你:https://coderwall.com/p/c3wyzq/forwarding-tcp-traffic-to-a-unix-socket
基本上:
Forwarding port 15432 to socket /srv/mongodb-27017.sock:
socat -d -d TCP4-LISTEN:15432,fork UNIX-CONNECT:/srv/mongodb-27017.sock
答案2
你需要修改程序的工作方式。让它监听Unix 套接字而不是 TCP。假设程序是动态链接到标准库的(几乎所有程序都是这样),你不需要改变程序本身,只要改变运行它的方式就行了。你可以这样做LD_PRELOAD
,通过加载 TCP 套接字打开函数的包装器来打开 Unix 套接字。ttu
正是这样做的(根据它的文档,我从未使用过它)。