UID verilen kullanıcının IP adresini öğrenmek ister misiniz?


8

Rus çok oyunculu kart oyunu olan Drupal 7 web sitesini kullanıyorum ve her 4-5 günde bir çok can sıkıcı oyuncuları engellemek zorundayım.

Drupal'dan önce phpBB 3 kullanıyordum. Bu kişiler küçük bir şehirden / köyden geldiğinde, IP ağlarını güvenlik duvarı kurallarına eklerdim, böylece yeni bir posta adresiyle tekrar kayıt yapamazlardı. Benim durumumda bu iyi çalıştı ve sorum bu politika ile ilgili değil.

Benim sorunum Drupal ile, bir kullanıcı kimliği tarafından kullanılan son IP adresini bulamıyorum olmasıdır. Yani kötüye kullanım bana diğer kullanıcılar tarafından bildirildi ve kullanıcı kimliğini biliyorum, ancak IP adresini günlüklerde bulamıyorum çünkü:

  1. Sistem günlüğü kaydını etkinleştirdim ve / var / log / messagess içindeki Drupal mesajlarını gördüm, ancak oturumların varsayılan olarak uzun olması nedeniyle giriş yapan bir kullanıcı hakkında nadiren bir mesaj var ve bunu bu şekilde tutmak istiyorum. kullanıcı konforu.

  2. Ayrıca "veritabanı günlüğünü" etkinleştirdim, ancak nerede (hangi veritabanı tablosu) görmek için bilmiyorum.

Yanıtlar:


9

İstatistik modülünü etkinleştirdiyseniz, "accesslog" tablosu tüm ziyaretçilerinizin IP'lerini içerir.

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

İstatistikleri etkinleştirmediyseniz, bu sonuç için bile bırakmanızı öneririm, çünkü etkinleştirmek ciddi bir performans cezasına neden olur.

Bu durumda, sessionstabloyu kullanabilirsiniz :

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

Birincisinin ikincisinin faydası, birincisinin her zaman en son ana bilgisayar adını göstermesidir, oysa ikincisi her zaman güncel olmayabilir.


Doğru, oturumlar tablosunun IP adresleri de vardır. Orada bazı kullanıcıları da bulamıyorum. Belki bir şekilde benim hatam. Cevabınızı kabul edeceğim ve syslog ve veritabanı istatistikleri modüllerini devre dışı bırakacağım, çünkü bunlar benim için çok fazla kullanılmadı.
Alexander Farber

Bir süredir oturum açmamış kullanıcılar bir oturuma sahip olmazlar ve bulunmazlar. Dediğim gibi "ikincisi her zaman güncel olmayacak", yani: tüm kullanıcılara sahip olmayabilir.
Mart'ta 11:02

5

Bildiğim kadarıyla Drupal, kullanıcıların kullanıcı profillerinde kullandıkları IP'yi rapor etmiyor. Özel bir modül oluşturabilir, kullanıcının kullandığı IP'yi doğrulayabilir ve kendi veritabanı tablonuza kaydedebilirsiniz; kullanıcı profilinde, doğru izne sahip kullanıcılara (örneğin, kullanıcıları yönetme iznine sahip kullanıcılara) gösterebilirsiniz.

İhtiyacınız olan işlev , hook_user_login () uygulamanızda kullanabileceğiniz ip_address () işlevidir . Uygulama hook_user_view () , daha sonra sağ iznine sahip kullanıcılar için bu tür bilgileri gösterebilir.


Teşekkür ederim, ama sonra şimdi aynı sorunla karşılaşacağım: kullanıcılar sistem günlüğünde görebildiğim için nadiren giriş yapıyor. Hook_user_login () sadece bir kullanıcı oturum açtığında (şifresini girdiğinde) çağrılır.
Alexander Farber

Onları giriş yapmaya zorlayabilirsiniz; oturumlar tablosunu boşaltırsanız, kullanıcıların yeniden oturum açması gerekir.
kiamlaluno

3

Veritabanı günlüğü modülünü kullanıyorsanız, Drupal bu bilgileri hostnamesütunun altındaki bekçi tablosunda saklar . Bu bilgilere ulaşmak için özel sorgular yazabilir veya Views Watchdog modülünü kullanabilirsiniz (şu anda 7.x için yalnızca bir geliştirici sürümü olduğundan, bu tabloyu Views'a göstermek için Drupal 7'de ne kadar iyi çalıştığından emin değilim).


Hayır, watchdog tablosu maalesef syslog çekirdek modülü ile aynı soruna sahip: bazı kullanıcılar için IP adresim yok, çünkü uzun zaman önce giriş yapmışlardı. Bu yüzden bazı kötü niyetli kullanıcılar hakkında bir rapor alıyorum, güvenlik duvarı bırakma kurallarına eklemek için IP'sini bulmaya çalışıyorum, ancak IP'sini hiçbir yerde bulamıyorum.
Alexander Farber

Bekçi köpeği için varsayılan ayar maalesef sadece 1000 mesajı saklamaktır. Etkin bir sitede, bu yalnızca bir saat veya daha az sürebilir. Sitenize bağlı olarak, bu numarayı (admin / config / development / logging) çarpmak veya alternatif olarak kiamlaluno tarafından açıklandığı gibi özel bir IP depolama çözümü oluşturmak isteyebilirsiniz.
jhedstrom


-1

session_id () , ister konuk ister üye olsun, geçerli kullanıcı oturum kimliğini verir.

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.