¿Encontrar la dirección IP del usuario dado su UID?

8

Estoy ejecutando el sitio web de Drupal 7 con un juego de cartas multijugador ruso y tengo que bloquear a algunos jugadores muy molestos cada 4-5 días.

Antes de Drupal estaba usando phpBB 3. Cuando estas personas venían de una pequeña ciudad / pueblo, simplemente agregaba su red IP a las reglas del firewall, para que no puedan volver a registrarse con una nueva dirección de correo. Esto funcionó bien en mi caso y mi pregunta no es sobre esta política.

Mi problema es que con Drupal, no puedo encontrar la última dirección IP utilizada por una identificación de usuario. Es decir, otros usuarios me informan del abuso y conozco su UID, pero no puedo encontrar su dirección IP en los registros, porque:

  1. He habilitado el registro de syslog y veo los mensajes de Drupal en / var / log / messagess, pero rara vez hay un mensaje sobre el inicio de sesión de un usuario, probablemente porque las sesiones son largas de forma predeterminada, y me gustaría mantenerlo así durante comodidad del usuario.

  2. También he habilitado el "registro de base de datos", pero no sé dónde verlo (qué tabla de base de datos).

Alexander Farber
fuente

Respuestas:

9

Si tiene habilitado el módulo de estadísticas, la tabla "registro de acceso" contiene las IP de todos sus visitantes.

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

Si no tiene estadísticas habilitadas, le aconsejo que lo deje, incluso para este resultado, porque habilitarlo causa una severa penalización de rendimiento.

En ese caso, puede usar la sessionstabla:

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

El beneficio del primero sobre el último es que el primero siempre le mostrará el último nombre de host, mientras que el último puede no estar siempre actualizado.

Berkes
fuente
Es cierto que la tabla de sesiones también tiene las direcciones IP. Simplemente no puedo encontrar algunos usuarios allí también. Tal vez es mi culpa de alguna manera. Aceptaré su respuesta y deshabilitaré los módulos de estadísticas de base de datos y syslog, porque no me fueron de mucha utilidad.
Alexander Farber
Los usuarios que no iniciaron sesión por un tiempo no tendrán una sesión y no serán encontrados. Como dije "este último no siempre estará actualizado", lo que significa que podría no tener todos los usuarios.
Berkes
5

Hasta donde yo sé, Drupal no informa la IP utilizada por los usuarios en su perfil de usuario. Puede crear un módulo personalizado, verificar la IP utilizada por el usuario y registrarla en su propia tabla de base de datos; entonces puede mostrarlo en el perfil de usuario, a los usuarios que tienen el permiso correcto (por ejemplo, a los usuarios con el permiso para administrar usuarios).

La función que necesita es ip_address () , que puede usar en su implementación de hook_user_login () . Al implementar hook_user_view () , puede mostrar dicha información a los usuarios con el permiso correcto.

kiamlaluno
fuente
Gracias, pero tendré el mismo problema que tengo ahora: los usuarios rara vez inician sesión, como puedo ver en el registro del sistema. Y el hook_user_login () solo se llama cuando un usuario inicia sesión (ingresa su contraseña).
Alexander Farber
Puede obligarlos a iniciar sesión; Si vacía la tabla de sesiones, los usuarios deben iniciar sesión nuevamente.
kiamlaluno
3

Si está utilizando el módulo de registro de la base de datos, Drupal almacena esta información en la tabla de vigilancia, debajo de la hostnamecolumna. Puede escribir consultas personalizadas para obtener esta información o usar el módulo Views Watchdog (actualmente solo una versión de desarrollo para 7.x, por lo que no estoy seguro de qué tan bien funciona en Drupal 7) para exponer esa tabla a Views.

jhedstrom
fuente
No, desafortunadamente, la tabla de vigilancia tiene el mismo problema que el módulo central de syslog: para algunos usuarios no tengo la dirección IP, porque habían iniciado sesión hace mucho tiempo. Así que recibo un informe sobre algún usuario malintencionado, intento encontrar su IP para agregarlo a las reglas de caída de mi firewall, pero no puedo encontrar su IP en ningún lado.
Alexander Farber
La configuración predeterminada para watchdog es, desafortunadamente, retener solo 1000 mensajes. En un sitio activo, esto solo puede durar una hora o menos. Dependiendo de su sitio, es posible que desee aumentar ese número (admin / config / development / logging) o, alternativamente, crear una solución de almacenamiento de IP personalizada como lo describe kiamlaluno.
jhedstrom
1

Dos módulos recientes pueden ayudar con esto:

User IP Log , que tiene integración de Vistas, y IP Address Manager , que no tiene integración de Vistas pero está destinado a integrarse con Manifest, Cave Your Trolls y Misery, todos los módulos relacionados con la prohibición.

Patrick Kenny
fuente
-1

session_id () le proporciona la identificación de sesión de usuario actual si él / ella es un invitado o un miembro.

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