有没有人知道是否有直接的方法将IP地址映射到登录ejabberd的用户?我通过修改ejabberd_receiver.erl并从这里调用inet:peername(Socket)找到了一种间接方式:Determining IP address and port of an incoming TCP/IP connection in Erlang
但似乎没有办法在成功通过身份验证后将套接字链接到用户。如果有人知道某种方式,请告诉我!感谢。
答案 0 :(得分:1)
根据安装的大小,您可能希望运行ejabberd_sm:dirty_get_sessions_list / 0并在每个三元组上调用get_user_ip / 3以实现反向查找。
答案 1 :(得分:0)
您可以使用 handle_call 或 handle_info 调用中的From参数来获取用户,服务器,资源信息。然后致电:
Info = ejabberd_sm:get_user_info(User, Server, Resource),
{ip, {Ip, Port}} = lists:keyfind(ip, 1, Info).