【问题标题】: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、命名管道和 |& 运算符(如果这是正确的术语)。祝你好运。

标签: macos unix network-programming ipc


【解决方案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 我试过了,它似乎正是我想要的。感谢您的快速回答!
猜你喜欢
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2014-11-23
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
相关资源
最近更新 更多