Découvrez l'adresse IP de l'utilisateur en fonction de son UID?

8

J'exécute le site Web de Drupal 7 avec un jeu de cartes multijoueur russe et je dois bloquer certains joueurs très ennuyeux tous les 4-5 jours.

Avant Drupal, j'utilisais phpBB 3. Quand ces personnes venaient d'une petite ville / village, je venais d'ajouter leur réseau IP aux règles du pare-feu, afin qu'elles ne puissent pas se réinscrire avec une nouvelle adresse e-mail. Cela a bien fonctionné dans mon cas et ma question ne concerne pas cette politique.

Mon problème est qu'avec Drupal, je ne trouve pas la dernière adresse IP utilisée par un ID utilisateur. C'est-à-dire que l'abuseur m'a été signalé par d'autres utilisateurs et je connais son uid, mais je ne trouve pas son adresse IP dans les journaux, car:

  1. J'ai activé la journalisation syslog et voir les messages Drupal dans / var / log / messagess mais il y a rarement un message à propos de la connexion d'un utilisateur, probablement parce que les sessions sont longues par défaut, et j'aimerais que cela reste ainsi confort d'utilisation.

  2. J'ai également activé la «journalisation de la base de données», mais je ne sais pas où la voir (quelle table de base de données).

Alexander Farber
la source

Réponses:

9

Si vous avez activé le module de statistiques, le tableau "accesslog" contient les adresses IP de tous vos visiteurs.

SELECT hostname FROM accesslog WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

Si vous n'avez pas activé les statistiques, je vous conseille de le laisser, même pour ce résultat, car l'activer entraîne une grave pénalité de performance.

Dans ce cas, vous pouvez utiliser la sessionstable:

SELECT hostname FROM sessions WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

L'avantage du premier sur le second, c'est que le premier vous montrera toujours le dernier nom d'hôte, alors que ce dernier n'est pas toujours à jour.

berkes
la source
Certes, la table des sessions possède également les adresses IP. Je ne trouve tout simplement pas certains utilisateurs là-bas également. Peut-être que c'est ma faute en quelque sorte. J'accepterai votre réponse et désactiverai les modules de statistiques de base de données et syslog, car ils ne m'ont pas été très utiles.
Alexander Farber
Les utilisateurs qui n'ont pas été connectés pendant un certain temps n'auront pas de session et ne seront pas trouvés. Comme je l'ai dit "ce dernier ne sera pas toujours à jour", c'est-à-dire qu'il pourrait ne pas avoir tous les utilisateurs.
berkes
5

Pour autant que je sache, Drupal ne signale pas l'IP utilisée par les utilisateurs dans leur profil d'utilisateur. Vous pouvez créer un module personnalisé, vérifier l'IP utilisée par l'utilisateur et l'enregistrer dans votre propre table de base de données; vous pouvez ensuite l'afficher dans le profil utilisateur, aux utilisateurs disposant de l'autorisation appropriée (par exemple, aux utilisateurs autorisés à administrer les utilisateurs).

La fonction dont vous avez besoin est ip_address () , que vous pouvez utiliser dans votre implémentation de hook_user_login () . En implémentant hook_user_view () , vous pouvez ensuite afficher ces informations aux utilisateurs avec la bonne autorisation.

kiamlaluno
la source
Merci, mais je vais avoir le même problème que maintenant: les utilisateurs se connectent rarement, comme je peux le voir dans le syslog. Et hook_user_login () n'est appelé que lorsqu'un utilisateur se connecte (entre son mot de passe).
Alexander Farber
Vous pouvez les forcer à se connecter; si vous videz la table des sessions, les utilisateurs doivent se reconnecter.
kiamlaluno
3

Si vous utilisez le module de journalisation de la base de données, Drupal stocke ces informations dans la table de surveillance, sous la hostnamecolonne. Vous pouvez soit écrire des requêtes personnalisées pour obtenir ces informations, soit utiliser le module Views Watchdog (actuellement uniquement une version de développement pour 7.x, donc je ne suis pas sûr de savoir comment cela fonctionne dans Drupal 7) pour exposer ce tableau aux vues.

jhedstrom
la source
Non, la table de surveillance a malheureusement le même problème que le module de base syslog: pour certains utilisateurs, je n'ai pas l'adresse IP, car ils s'étaient connectés depuis longtemps. Je reçois donc un rapport sur un utilisateur malveillant, j'essaie de trouver son adresse IP pour l'ajouter à mes règles de suppression de pare-feu, mais je ne trouve son adresse IP nulle part.
Alexander Farber
Le paramètre par défaut du chien de garde est, malheureusement, de ne conserver que 1000 messages. Sur un site actif, cela peut ne durer qu'une heure ou moins. Selon votre site, vous souhaiterez peut-être augmenter ce nombre (admin / config / development / logging), ou créer une solution de stockage IP personnalisée comme décrit par kiamlaluno.
jhedstrom
1

Deux modules récents peuvent vous y aider:

User IP Log , qui a l'intégration de Views, et IP Address Manager , qui n'a pas d'intégration de Views mais est destiné à s'intégrer à Manifest, Cave Your Trolls et Misery - tous les modules liés à l'interdiction.

Patrick Kenny
la source
-1

session_id () vous donne l'identifiant de session de l'utilisateur actuel, qu'il soit invité ou membre.

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
Vikas Naranje
la source