创建一个仅限本地的端口以在同一台计算机上的进程之间进行通信?

Posted

技术标签:

【中文标题】创建一个仅限本地的端口以在同一台计算机上的进程之间进行通信?【英文标题】:Create a local-only port to communicate between processes on the same computer? 【发布时间】:2012-04-17 18:59:46 【问题描述】:

我有两个由同一个用户运行的进程,但两者都不相关(在父/子意义上)。服务器创建一个套接字,客户端使用其端口号打开一个连接。这很好用,但是如果有办法使这个端口成为本地/私有端口会更好。没有其他计算机需要连接到我的服务器,因此最好保护它免受远程端口扫描。另外,如果端口不向外界开放,我可能会避免撞到操作系统的防火墙。

看起来 PF_UNIX 可能让我创建一个以这种方式工作的文件名类型套接字,但有没有办法使用端口类型 (PF_INET) 接口来做到这一点?

【问题讨论】:

您还可以在 bash/ksh 中获得有限的进程间通信。尝试查找 mknod、mkfifo、命名管道和 |& 运算符(如果这是正确的术语)。祝你好运。 【参考方案1】:

是的,通过使用环回接口(127.0.0.1、localhost 等) - 您系统上的进程都可以看到它,但外面的任何东西都看不到。

编辑:具体来说,整个 127.0.0.1/8 块被保留用于环回,因此 127.0.0.[1-254] 将起作用。

【讨论】:

顺便说一句,我相信除了 0.0.0 之外的任何 x.y.z 都可以使用 127.x.y.z;我不知道确切的规则是什么,我问的一个关于这个主题的问题似乎很不受欢迎,但知道它可能是一件有用的事情。 非常正确,但细节 - 正如你所建议的 - 有点复杂。我会查找并添加。编辑:或者可能没有......我以为我记得一些隐藏的复杂性,但现在我查找它似乎很简单。奇数。 @jimw 啊哈。我知道可以连接到环回地址,但没有意识到服务器可能仅限于响应该接口。您是说我可以将 sockaddr_in.sin_addr.s_addr 中的 INADDR_ANY 更改为 INADDR_LOOPBACK? 没错,INADDR_* 宏告诉 bind 使用哪个接口。 @jimw 我试过了,它似乎正是我想要的。感谢您的快速回答!

以上是关于创建一个仅限本地的端口以在同一台计算机上的进程之间进行通信?的主要内容,如果未能解决你的问题,请参考以下文章

本地计算机上多个进程的 SQL CE 文件共享冲突

在同一台计算机上的两个程序之间发送和接收 UDP 数据包

两台华为交换机之间怎么做端口隔离,实现他们之间的任何端口都不能通讯?

在同一网络上不同计算机上运行的进程之间进行通信的推荐方式

SSH 隧道的自定义本地主机名

Java Socket编程基础