Cari tahu alamat IP pengguna yang diberikan UID mereka?


8

Saya menjalankan situs web Drupal 7 dengan permainan kartu multipemain Rusia dan harus memblokir beberapa pemain yang sangat menyebalkan setiap 4-5 hari.

Sebelum Drupal saya menggunakan phpBB 3. Ketika orang-orang ini datang dari kota / desa kecil, saya hanya akan menambahkan jaringan IP mereka ke aturan firewall, sehingga mereka tidak dapat mendaftar ulang dengan alamat email baru. Ini bekerja dengan baik dalam kasus saya dan pertanyaan saya bukan tentang kebijakan ini.

Masalah saya adalah bahwa dengan Drupal, saya tidak dapat menemukan alamat IP terakhir yang digunakan oleh id pengguna. Yaitu pelaku dilaporkan kepada saya oleh pengguna lain dan saya tahu uid-nya, tetapi saya tidak dapat menemukan alamat IP-nya di log, karena:

  1. Saya telah mengaktifkan syslog-logging dan melihat pesan Drupal di / var / log / messagess tetapi jarang ada pesan tentang pengguna yang masuk, mungkin karena sesi lama secara default, dan saya ingin tetap seperti ini untuk kenyamanan pengguna.

  2. Saya juga telah mengaktifkan "pencatatan basis data," tetapi tidak tahu di mana melihatnya (tabel database mana).

Jawaban:


9

Jika Anda memiliki modul statistik yang diaktifkan, tabel "accesslog" berisi IP untuk semua pengunjung Anda.

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

Jika statistik Anda tidak diaktifkan, saya sarankan Anda berhenti, bahkan untuk hasil ini, karena mengaktifkannya, menyebabkan penalti kinerja yang parah.

Dalam hal ini, Anda dapat menggunakan sessionstabel:

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

Manfaat yang pertama daripada yang terakhir, adalah yang pertama akan selalu menunjukkan nama host terbaru, sedangkan yang terakhir mungkin tidak selalu up to date.


Benar, tabel sesi memiliki alamat IP juga. Saya hanya tidak dapat menemukan beberapa pengguna di sana juga. Mungkin ini salahku. Saya akan menerima jawaban Anda dan menonaktifkan modul statistik syslog dan database, karena tidak banyak berguna bagi saya.
Alexander Farber

Pengguna yang tidak masuk untuk sementara waktu tidak akan memiliki sesi, dan tidak akan ditemukan. Seperti yang saya katakan "yang terakhir tidak akan selalu up to date", artinya: mungkin tidak memiliki semua pengguna.
Contin

5

Sejauh yang saya tahu, Drupal tidak melaporkan IP yang digunakan oleh pengguna di profil pengguna mereka. Anda bisa membuat modul khusus, memverifikasi IP yang digunakan oleh pengguna, dan merekamnya di tabel database Anda sendiri; maka Anda dapat menampilkannya di profil pengguna, kepada pengguna yang memiliki izin yang tepat (misalnya, kepada pengguna dengan izin untuk mengelola pengguna).

Fungsi yang Anda butuhkan adalah ip_address () , yang dapat Anda gunakan dalam implementasi hook_user_login () Anda . Menerapkan hook_user_view () , Anda kemudian dapat menampilkan informasi tersebut kepada pengguna dengan izin yang tepat.


Terima kasih, tetapi kemudian saya akan memiliki masalah yang sama dengan yang saya miliki sekarang: para pengguna jarang masuk, seperti yang saya lihat di syslog. Dan hook_user_login () hanya dipanggil ketika pengguna login (memasukkan kata sandinya).
Alexander Farber

Anda dapat memaksa mereka untuk masuk; jika Anda mengosongkan tabel sesi, pengguna harus masuk lagi.
kiamlaluno

3

Jika Anda menggunakan modul pencatatan basis data, Drupal menyimpan informasi ini di tabel watchdog, di bawah hostnamekolom. Anda dapat menulis kueri khusus untuk mendapatkan informasi ini, atau menggunakan modul Views Watchdog (saat ini hanya rilis dev untuk 7.x, jadi saya tidak yakin seberapa baik kerjanya di Drupal 7) untuk memaparkan tabel itu ke Views.


Tidak, tabel pengawas sayangnya memiliki masalah yang sama dengan modul inti syslog: untuk beberapa pengguna saya tidak memiliki alamat IP, karena mereka telah login lama. Jadi saya mendapatkan laporan tentang beberapa pengguna jahat, mencoba mencari IP-nya untuk menambahkannya ke aturan drop-firewall saya, tetapi saya tidak dapat menemukan IP-nya di mana saja.
Alexander Farber

Pengaturan default untuk watchdog adalah, sayangnya, hanya menyimpan 1000 pesan. Di situs yang aktif, ini hanya berlangsung selama satu jam atau kurang. Bergantung pada situs Anda, Anda mungkin ingin menambah nomor itu (admin / config / development / logging), atau sebagai alternatif membangun solusi penyimpanan IP khusus seperti yang dijelaskan oleh kiamlaluno.
jhedstrom

1

Dua modul terbaru dapat membantu dengan ini:

User IP Log , yang memiliki integrasi Views, dan IP Address Manager , yang tidak memiliki integrasi Views tetapi dimaksudkan untuk berintegrasi dengan Manifest, Cave Your Trolls, dan Misery - semuanya melarang modul terkait.


-1

session_id () memberi Anda id sesi pengguna saat ini apakah dia tamu atau anggota.

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.