对Erlang端口映射程序守护进程短路

对Erlang端口映射程序守护进程短路,erlang,erlang-shell,erlang-driver,Erlang,Erlang Shell,Erlang Driver,给定远程beam.smp服务的已知TCP端口和名称以及已知cookie,是否可以短路Erlang分发协议的Erlang port Mapper守护程序握手阶段,并直接建立到目标beam.smp服务的Erlang shell 协议记录如下: 在这里: 但我不清楚recv_challenge/send_challenge身份验证是否通过Erlang端口映射程序守护程序或绑定到特定端口的beam.smp服务进行 感谢您的时间。在Erlang VM(beam或beam.smp)之间进行身份验证。ep

给定远程beam.smp服务的已知TCP端口和名称以及已知cookie,是否可以短路Erlang分发协议的Erlang port Mapper守护程序握手阶段,并直接建立到目标beam.smp服务的Erlang shell

协议记录如下:

在这里:

但我不清楚recv_challenge/send_challenge身份验证是否通过Erlang端口映射程序守护程序或绑定到特定端口的beam.smp服务进行


感谢您的时间。

在Erlang VM(beam或beam.smp)之间进行身份验证。epmd只处理端口注册。简单地对epmd进行短路并不十分容易,其他方法可能更适合您的实际需要

不幸的是,epmd不是默认分发协议(
inet\u tcp\u dist
)或its的选项。有两个未记录的选项,看起来您可以禁用epmd(
-no_epmd
)或提供替代实现(
epmd_module
)。但是,分发协议对epmd的依赖性不依赖于这些选项

所以你可以:

  • 在代码服务器级别重写
    erl_epmd
    模块(可能是最脏的方法)
  • 提供可复制(或调用)的替代分发协议,调用erl_epmd的部分除外。主要是,您需要提供自己的
    setup/5
    实现
如果不希望shell节点连接到epmd以注册其名称,则还需要覆盖
listen/1
。在这种情况下,您可以将
-no_epmd
传递到命令行

或者,您可以连接到epmd以注册侦听节点,以便使用默认协议创建外壳连接

如果epmd失去了对节点的跟踪(例如,它被杀死,不幸的是epmd是单点故障),这种方法特别有用。为此:

  • 创建到epmd的TCP连接,并发送一个数据包,以使用其已知端口和名称注册丢失的节点。保持TCP连接打开,否则epmd将注销该节点
  • 使用上一步中使用的名称将新外壳连接到丢失的节点
  • 然后,您可以通过调用
    erl_epmd:register_node/2
    (并发送精心编制的
    tcp_closed
    消息,关闭(1)中建立的连接,并最终将丢失的节点重新注册到epmd

  • 谢谢保罗,这非常有用。