如何获取erlang节点的IP地址?

如何获取erlang节点的IP地址?,erlang,Erlang,有没有一种简单的方法可以获取连接的erlang节点的IP地址?我想与几个节点建立一个SCTP连接,由于系统的设计方式,我对它们的了解只是它们的node()原子 更准确地说,我想知道Erlang(或某些派生技术)是否提供了一些API,允许在给定标识符atom()的情况下获取节点的IP地址。我通过在节点上启动一个进程并让该进程发送包含其IP地址的消息来解决这个问题。如果有人知道一个更优雅的解决方案,我想听听 在节点上的进程启动后,我用来获取地址的命令是:inet:getif()。请记住,该命令的结果

有没有一种简单的方法可以获取连接的erlang节点的IP地址?我想与几个节点建立一个SCTP连接,由于系统的设计方式,我对它们的了解只是它们的node()原子


更准确地说,我想知道Erlang(或某些派生技术)是否提供了一些API,允许在给定标识符atom()的情况下获取节点的IP地址。

我通过在节点上启动一个进程并让该进程发送包含其IP地址的消息来解决这个问题。如果有人知道一个更优雅的解决方案,我想听听

在节点上的进程启动后,我用来获取地址的命令是:
inet:getif()
。请记住,该命令的结果包括环回地址

要考虑的是每个节点可能有多个IP地址,而SCTP服务器可能没有监听所有的IP地址。


我考虑尝试的另一个想法是将node()返回的atom转换为字符串,解析字符串以获取主机名,并执行DNS查找。它可能有用,但我从未尝试过。DNS查找的结果应该缓存,因此可能没有网络往返。另外,我真的很讨厌假设atom从node()返回。

您可以使用rpc模块在外部节点上调用函数

例如:

rpc:call(Node,inet,getif,[])

注意:这只适用于已经通过erlang发行版连接的节点

它看起来像
net\u kernel:nodes\u info()。在某些方面,这似乎是一个更好的解决方案,因为它还可以处理Java和C节点等无法向其发送函数的对象。

是的,我考虑过这样做,但我想尽量减少知道需要发送数据和实际发送数据之间的时间,因此额外的来回循环将是最后的选择。