2015-12-31 1 views
1

J'essaie de détecter les personnes utilisant des proxies pour abuser de mon site Web.Calculer la variation de la colonne des adresses IP en utilisant MySQL

Souvent, ils vont changer de proxy et ainsi de suite. Mais il y a certainement un modèle d'utilisation d'une adresse proxy plusieurs fois. Beaucoup plus que ce qui est normal pour les visiteurs légitimes.

Habituellement, le plus grand accès à mon site web est par des adresses IP uniques qui n'ont visité qu'une ou plusieurs fois. Pas à plusieurs reprises.

Disons que j'ai ces adresses IP dans une colonne:

89.46.74.56 
89.46.74.56 
89.46.74.56 
91.14.37.249 
104.233.103.6 

Cela voudrait dire il y a 3 sur 5. uniques Donner un « score unique » de 60%.

Comment est-ce que je calculerais ceci efficacement using MySQL?

+0

peut vous envoyer onglet échantillon la structure et les données. avec la sortie désirée – amdixon

+0

@amdixon ok, je pense que j'ai simplifié la question et ajouté quelques exemples de données :) –

+0

donc en sortie: 89,46.74.56 ..... 60%, 91.14.37.249 ...... 20% , 104,233.103,6 ...... 20%? – amdixon

Répondre

2

Plan

  • get groupe de comptage par ip
  • diviser par (cross-joining) le nombre de lignes au total
  • prendre rapport maximal de répétition en haut

configuration

create table example 
(
    id integer primary key auto_increment not null, 
    ip varchar(13) not null 
); 

insert into example 
(ip) 
values 
('89.46.74.56' ), 
('89.46.74.56' ), 
('89.46.74.56' ), 
('91.14.37.249' ), 
('104.233.103.6') 
; 

requête

select max(repeat_factor) 
from 
(
select ip, count(*)/rc.row_count as repeat_factor 
from example 
cross join (select count(*) as row_count from example) rc 
group by ip 
) q 
; 

sortie

+--------------------+ 
| max(repeat_factor) | 
+--------------------+ 
| 0.6    | 
+--------------------+ 

sqlfiddle

+0

Fonctionne parfaitement - génie! Certaines personnes sont juste trop bonnes en SQL ... Je m'abandonne à vous. J'accepterai quand cela me permettra de :) –

+0

Je devrais mentionner que c'est donner le contraire de ce que j'avais demandé à l'origine dans la question (1-uniqueness_score) ...... mais c'est tout de même vraiment ...... ma faute pour écrire une question qui pourrait être prise de toute façon ..... merci :) –

+1

pas de soucis - heureux que cela fonctionne pour vous, parfois la sémantique entre ces «scores» statistiques sont difficiles à expliquer – amdixon