Descobrir o endereço IP do usuário com o UID deles?

8

Estou executando o site do Drupal 7 com um jogo de cartas multiplayer russo e tenho que bloquear alguns jogadores muito irritantes a cada 4-5 dias.

Antes do Drupal, eu estava usando o phpBB 3. Quando essas pessoas vinham de uma cidade / vila pequena, eu apenas adicionava sua rede IP às regras do firewall, para que não pudessem se registrar novamente com um novo endereço de email. Isso funcionou bem no meu caso e minha pergunta não é sobre essa política.

Meu problema é que, com o Drupal, não consigo encontrar o último endereço IP usado por uma identificação de usuário. Ou seja, o agressor é denunciado a mim por outros usuários e conheço o seu uid, mas não consigo encontrar o endereço IP dele nos logs, porque:

  1. Eu ativei o syslog-logging e vi as mensagens do Drupal em / var / log / messagess, mas raramente há uma mensagem sobre o login de um usuário, provavelmente porque as sessões são longas por padrão e eu gostaria de mantê-lo desta maneira. conforto do usuário.

  2. Também habilitei o "log do banco de dados", mas não sei onde vê-lo (qual tabela do banco de dados).

Alexander Farber
fonte

Respostas:

9

Se você tiver o módulo de estatísticas ativado, a tabela "accesslog" conterá os IPs para todos os seus visitantes.

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

Se você não tem estatísticas ativadas, aconselho que você a deixe de fora, mesmo para esse resultado, porque ativá-lo causa uma severa penalidade de desempenho.

Nesse caso, você pode usar a sessionstabela:

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

O benefício do primeiro sobre o último é que o primeiro sempre mostra o nome do host mais recente, enquanto o último pode nem sempre estar atualizado.

berkes
fonte
É verdade que a tabela de sessões também possui os endereços IP. Eu também não consigo encontrar alguns usuários lá. Talvez seja minha culpa de alguma forma. Aceitarei sua resposta e desabilitarei os módulos de estatísticas do syslog e do banco de dados, porque eles não foram muito úteis para mim.
Alexander Farber
Os usuários que não estiveram conectados por um tempo não terão uma sessão e não serão encontrados. Como afirmei "este último nem sempre estará atualizado", ou seja: pode não ter todos os usuários.
Berkes
5

Até onde eu sei, o Drupal não reporta o IP usado pelos usuários em seu perfil de usuário. Você pode criar um módulo personalizado, verificar o IP usado pelo usuário e registrá-lo em sua própria tabela de banco de dados; você pode mostrá-lo no perfil do usuário, para usuários com a permissão correta (por exemplo, para usuários com permissão para administrar usuários).

A função que você precisa é ip_address () , que você pode usar na sua implementação de hook_user_login () . Ao implementar hook_user_view () , você pode mostrar essas informações aos usuários com a permissão correta.

kiamlaluno
fonte
Obrigado, mas depois terei o mesmo problema que tenho agora: os usuários raramente fazem login, como posso ver no syslog. E o hook_user_login () é chamado apenas quando um usuário efetua login (digita sua senha).
Alexander Farber
Você pode forçá-los a fazer login; se você esvaziar a tabela de sessões, os usuários deverão efetuar login novamente.
kiamlaluno
3

Se você estiver usando o módulo de registro em banco de dados, o Drupal armazenará essas informações na tabela de vigilância, sob a hostnamecoluna. Você pode escrever consultas personalizadas para obter essas informações ou usar o módulo Views Watchdog (atualmente apenas uma versão de desenvolvimento para 7.x, portanto, não tenho certeza de como ele funciona no Drupal 7) para expor essa tabela às Views.

jhedstrom
fonte
Infelizmente, a tabela watchdog infelizmente tem o mesmo problema que o módulo principal do syslog: para alguns usuários, não tenho o endereço IP, porque eles já haviam se conectado há muito tempo. Então, recebo um relatório sobre algum usuário mal-intencionado, tento encontrar o IP dele para adicioná-lo às regras de queda do meu firewall, mas não consigo encontrá-lo em nenhum lugar.
precisa
Infelizmente, a configuração padrão para o watchdog é reter apenas 1000 mensagens. Em um site ativo, isso pode durar apenas uma hora ou menos. Dependendo do seu site, convém aumentar esse número (admin / config / development / log) ou criar uma solução de armazenamento IP personalizada, conforme descrito por kiamlaluno.
jhedstrom
1

Dois módulos recentes podem ajudar com isso:

Usuário IP Log , que possui integração com Views, e IP Address Manager , que não possui integração com Views, mas que se destina a integrar-se ao Manifest, Cave Your Trolls e Misery-- todos os módulos relacionados à proibição.

Patrick Kenny
fonte
-1

session_id () fornece a você o ID da sessão do usuário atual, seja ele convidado ou membro.

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