2009-11-27 5 views
1

Est-ce que quelqu'un sait s'il existe un moyen direct de mapper une adresse IP à un utilisateur connecté à ejabberd? J'ai trouvé une manière indirecte en modifiant ejabberd_receiver.erl et en appelant inet: peername (Socket) à partir d'ici: Determining IP address and port of an incoming TCP/IP connection in ErlangAdresse IP ejabberd

mais il ne semble pas y avoir un moyen de lier une socket à un utilisateur une fois qu'elle a été authentifiée avec succès . Si quelqu'un connaît un moyen, s'il vous plaît faites le moi savoir! Merci.

+0

Vous pourriez bien mieux aider sur le défaut de serveur. –

Répondre

1

En fonction de la taille de votre installation, vous pouvez exécuter ejabberd_sm: dirty_get_sessions_list/0 et appeler get_user_ip/3 sur chaque triplet pour implémenter une recherche inversée.

0

Vous pouvez utiliser à partir de l'argument de handle_call ou handle_info appelle pour obtenir l'utilisateur, le serveur, les informations de ressources. Puis appelez:

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