IP-адрес ejabberd

Кто-нибудь знает, есть ли прямой способ сопоставить IP-адрес с пользователем, вошедшим в ejabberd? Я нашел косвенный способ, изменив ejabberd_receiver.erl и вызвав отсюда inet:peername(Socket): Определение IP-адреса и порта входящего TCP/IP-соединения в Erlang

но, похоже, нет способа связать сокет с пользователем после его успешной аутентификации. Если кто знает способ, подскажите! Спасибо.


person ewindsor    schedule 27.11.2009    source источник
comment
Вы могли бы найти лучшую помощь по сбою сервера.   -  person Adam Goode    schedule 03.01.2010


Ответы (2)


В зависимости от размера вашей установки вы можете запустить ejabberd_sm:dirty_get_sessions_list/0 и вызвать get_user_ip/3 для каждой тройки, чтобы реализовать обратный поиск.

person andi5    schedule 27.01.2010

Вы можете использовать аргумент From из вызовов handle_call или handle_info для получения информации о пользователе, сервере и ресурсе. Затем позвоните:

Info = ejabberd_sm:get_user_info(User, Server, Resource), 
{ip, {Ip, Port}} = lists:keyfind(ip, 1, Info).
person Roman Hwang    schedule 10.10.2011