Finden Sie die IP-Adresse des Benutzers anhand seiner UID heraus?

8

Ich betreibe die Drupal 7-Website mit einem russischen Multiplayer-Kartenspiel und muss alle 4-5 Tage einige sehr nervige Spieler blockieren.

Vor Drupal habe ich phpBB 3 verwendet. Wenn diese Personen aus einer kleinen Stadt / einem kleinen Dorf kamen, fügte ich einfach ihr IP-Netzwerk zu den Firewall-Regeln hinzu, damit sie sich nicht erneut mit einer neuen E-Mail-Adresse registrieren können. Dies hat in meinem Fall gut funktioniert und meine Frage bezieht sich nicht auf diese Richtlinie.

Mein Problem ist, dass ich mit Drupal die letzte von einer Benutzer-ID verwendete IP-Adresse nicht finden kann. Dh der Missbraucher wird mir von anderen Benutzern gemeldet und ich kenne seine UID, aber ich kann seine IP-Adresse nicht in den Protokollen finden, weil:

  1. Ich habe die Syslog-Protokollierung aktiviert und sehe die Drupal-Nachrichten in / var / log / messagess, aber es gibt selten eine Nachricht über die Anmeldung eines Benutzers, wahrscheinlich weil die Sitzungen standardmäßig lang sind, und ich möchte dies so halten Benutzerkomfort.

  2. Ich habe auch "Datenbankprotokollierung" aktiviert, weiß aber nicht, wo ich sie sehen soll (welche Datenbanktabelle).

Alexander Farber
quelle

Antworten:

9

Wenn Sie das Statistikmodul aktiviert haben, enthält die Tabelle "accesslog" die IPs für alle Ihre Besucher.

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

Wenn Sie keine aktivierten Statistiken haben, empfehle ich Ihnen, diese auch für dieses Ergebnis nicht zu verwenden, da die Aktivierung zu erheblichen Leistungseinbußen führt.

In diesem Fall können Sie die folgende sessionsTabelle verwenden:

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

Der Vorteil des ersten gegenüber dem letzteren besteht darin, dass der erste immer den neuesten Hostnamen anzeigt, während der letztere möglicherweise nicht immer auf dem neuesten Stand ist.

berkes
quelle
Richtig, die Sitzungstabelle enthält auch die IP-Adressen. Ich kann dort auch einige Benutzer nicht finden. Vielleicht ist es irgendwie meine Schuld. Ich werde Ihre Antwort akzeptieren und die Syslog- und Datenbankstatistikmodule deaktivieren, da sie für mich nicht von großem Nutzen waren.
Alexander Farber
Benutzer, die eine Weile nicht angemeldet waren, haben keine Sitzung und werden nicht gefunden. Wie ich bereits sagte "Letzteres wird nicht immer auf dem neuesten Stand sein", was bedeutet, dass möglicherweise nicht alle Benutzer vorhanden sind.
berkes
5

Soweit ich weiß, meldet Drupal die von Benutzern in ihrem Benutzerprofil verwendete IP nicht. Sie können ein benutzerdefiniertes Modul erstellen, die vom Benutzer verwendete IP-Adresse überprüfen und in Ihrer eigenen Datenbanktabelle aufzeichnen. Dann können Sie es im Benutzerprofil Benutzern anzeigen, die über die richtige Berechtigung verfügen (z. B. Benutzern mit der Berechtigung zum Verwalten von Benutzern).

Die Funktion, die Sie benötigen, ist ip_address () , die Sie in Ihrer Implementierung von hook_user_login () verwenden können . Die Umsetzung hook_user_view () können Sie dann zeigen diese Informationen an die Benutzer mit der richtigen Berechtigung.

kiamlaluno
quelle
Vielen Dank, aber dann habe ich das gleiche Problem wie jetzt: Die Benutzer melden sich selten an, wie ich im Syslog sehen kann. Und hook_user_login () wird nur aufgerufen, wenn sich ein Benutzer anmeldet (sein Passwort eingibt).
Alexander Farber
Sie können sie zwingen, sich anzumelden. Wenn Sie die Sitzungstabelle leeren, sollten sich Benutzer erneut anmelden.
Kiamlaluno
3

Wenn Sie das Datenbankprotokollierungsmodul verwenden, speichert Drupal diese Informationen in der Watchdog-Tabelle unter der hostnameSpalte. Sie können entweder benutzerdefinierte Abfragen schreiben, um an diese Informationen zu gelangen, oder das Views Watchdog-Modul (derzeit nur eine Entwicklungsversion für 7.x, daher bin ich mir nicht sicher, wie gut es in Drupal 7 funktioniert) verwenden, um diese Tabelle für Views verfügbar zu machen.

jhedstrom
quelle
Nein, die Watchdog-Tabelle hat leider das gleiche Problem wie das Syslog-Kernmodul: Für einige Benutzer habe ich keine IP-Adresse, da sie sich vor langer Zeit angemeldet haben. Ich erhalte einen Bericht über einen böswilligen Benutzer und versuche, seine IP-Adresse zu finden, um sie meinen Firewall-Drop-Regeln hinzuzufügen. Ich kann seine IP-Adresse jedoch nirgendwo finden.
Alexander Farber
Die Standardeinstellung für Watchdog ist leider, nur 1000 Nachrichten beizubehalten. Auf einer aktiven Site kann dies nur eine Stunde oder weniger dauern. Abhängig von Ihrer Site möchten Sie möglicherweise diese Nummer erhöhen (admin / config / development / logging) oder alternativ eine benutzerdefinierte IP-Speicherlösung erstellen, wie von kiamlaluno beschrieben.
Jhedstrom
1

Zwei aktuelle Module können dabei helfen:

Benutzer-IP-Protokoll mit Views-Integration und IP-Adress-Manager ohne Views-Integration, der jedoch in Manifest, Cave Your Trolls und Misery integriert werden soll - alles verbietet verwandte Module.

Patrick Kenny
quelle
-1

session_id () gibt Ihnen die aktuelle Sitzungs-ID des Benutzers an, unabhängig davon, ob er Gast oder Mitglied ist.

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