给定远程beam.smp服务的已知TCP端口和名称,以及已知的cookie,可以将Erlang分发协议的Erlang Port Mapper守护程序握手阶段短路并直接建立Erlang shell目标beam.smp服务?
此处记录了协议:
http://erlang.org/doc/apps/erts/erl_dist_protocol.html
在这里:
但我不清楚是否通过Erlang Port Mapper守护程序或绑定到特定端口的beam.smp服务发生recv_challenge / send_challenge认证。
感谢您的时间。
答案 0 :(得分:4)
在Erlang VM(beam或beam.smp)之间进行身份验证。 epmd只处理端口注册。简单地短路epmd并不是非常容易,其他方法可能更适合您的实际需要。
不幸的是, epmd不是默认分发协议(inet_tcp_dist
)或其SSL counterpart的选项。有两个未记录的选项看起来像您可以禁用epmd(-no_epmd
)或提供替代实现(epmd_module
)。但是,分发协议对epmd的依赖性为hard-coded,并不依赖于这些选项。
所以你可以:
erl_epmd
模块(可能是最脏的方法); inet_tcp_dist
。主要是,您需要提供自己的setup/5
。如果您不希望shell节点连接到epmd以注册其名称,您还需要覆盖listen/1
。在这种情况下,您可以将-no_epmd
传递给命令行。
或者,您可以连接到epmd以注册侦听节点,以便使用默认协议创建shell连接。
如果epmd丢失了节点的跟踪(例如,它被杀死,不幸的是,epmd是单点故障),这种方法特别有用。为此:
erl_epmd:register_node/2
(并在需要时发送精心设计的tcp_closed
消息)将丢失的节点重新注册到epmd。