Jump to content
Riflio

Можно ли вывести пользователей с одинаковыми ИП адресами?

Recommended Posts

Здравствуйте!

Хочу найти возможные дубли пользователей, для этого хотелось бы отобразить не уникальные ИП адреса при входе/регистрации.

В админке можно просмотреть конкретный ИП адрес и кто с него регился/входил, а так что бы списком именно неуникальных не нашёл.

Может быть есть какой-либо плагин?

P.S. Да, я понимаю, что пользователи могут быть за одним NATом, тогда ИП будет совпадать, либо один и тот же ИП может  быть выдан в разное время разным пользователям и ничего сверх необычного в этом нет. 

 

Share this post


Link to post
Share on other sites

SQL запросом можно посмотреть пользователи которые использовали одинаковые IP

SELECT i.member_id, i.ip_address FROM core_members_known_ip_addresses i INNER JOIN core_members_known_ip_addresses z ON i.ip_address=z.ip_address AND i.member_id!=z.member_id GROUP BY i.ip_address, i.member_id

 

Share this post


Link to post
Share on other sites

Для начала воспользовался сортировкой по ИП в списке пользователей, тогда одинаковые будут рядом, но когда пользователей много понял, что просматривать все очень долго,

тогда экспортировал всех пользователей (при экспорте пользователей можно выбрать нужные поля) в Эксель, дальше выделяем колонку с ИП адресами, в верхней менюшке Главная->Группа "Стили"->Условное форматирование->Правила выделения ячеек->Повторяющиеся значения. Таким макаром все повторяющиеся подсветятся, ну а после делаем сортировку  Главная->Группа "Редактирование"->Сортировка и фильтры->Сортировать от А до Я и теперь повторяющиеся ИПшники будут рядом и можно быстро глазами пробежать.

Share this post


Link to post
Share on other sites

А можно просто выполнить sql запрос и посмотреть только пользователей с повторяющемся ip.
И извращения с экспортом пользователей тоже лишнее,  это решается обычным sql запросом

SELECT m.name, m.member_id, m.ip_address FROM core_members m LEFT JOIN core_members z ON m.ip_address=z.ip_address WHERE m.member_id!=z.member_id GROUP BY ip_address, member_id

Таким образом можно выбрать пользователей которые использовали одинаковые IP при регистрации.

Статистика по каждому IP использующегося больше одного раза

SELECT ip_address, COUNT(*) as count FROM core_members GROUP BY ip_address HAVING count > 1

 

Share this post


Link to post
Share on other sites
17 hours ago, siv1987 said:

А можно просто выполнить sql запрос и посмотреть только пользователей с повторяющемся ip.
И извращения с экспортом пользователей тоже лишнее,  это решается обычным sql запросом

SELECT m.name, m.member_id, m.ip_address FROM core_members m LEFT JOIN core_members z ON m.ip_address=z.ip_address WHERE m.member_id!=z.member_id GROUP BY ip_address, member_id

Таким образом можно выбрать пользователей которые использовали одинаковые IP при регистрации.

Статистика по каждому IP использующегося больше одного раза

SELECT ip_address, COUNT(*) as count FROM core_members GROUP BY ip_address HAVING count > 1

  

Хех, верхний запрос достаточно суровый: долго грузило, и в итоге выдало 504 Gateway Time-out (nginx) без отображения результатов.  :( 

Но скорее всего потому, что у меня у очень многих пользователей стоит в ip_address 127.0.0.1.

Вопрос: как-то можно в том SQL запросе поставить условие "КРОМЕ вывода пользователей с ip_address 127.0.0.1", siv1987 ?

Share this post


Link to post
Share on other sites

Забыл предупредить, действительно первый запрос довольно суровый на таблице с большим количеством записей.
Более оптимизированный вариант этого запроса

SELECT i.member_id, i.ip_address FROM ( SELECT member_id, ip_address FROM core_members_known_ip_addresses GROUP BY ip_address, member_id ) as i INNER JOIN ( SELECT member_id, ip_address FROM core_members_known_ip_addresses GROUP BY ip_address, member_id ) as z ON i.ip_address=z.ip_address AND i.member_id!=z.member_id GROUP BY i.ip_address, i.member_id

Исключить пользователей с ip 127.0.0.1

SELECT i.member_id, i.ip_address FROM ( SELECT member_id, ip_address FROM core_members_known_ip_addresses GROUP BY ip_address, member_id ) as i INNER JOIN ( SELECT member_id, ip_address FROM core_members_known_ip_addresses GROUP BY ip_address, member_id ) as z ON i.ip_address=z.ip_address AND i.member_id!=z.member_id WHERE i.ip_address!='127.0.0.1' GROUP BY i.ip_address, i.member_id

 

и вариант с выведением имени пользователя

SELECT m.name, i.member_id, i.ip_address FROM ( SELECT member_id, ip_address FROM core_members_known_ip_addresses GROUP BY ip_address, member_id ) as i INNER JOIN ( SELECT member_id, ip_address FROM core_members_known_ip_addresses GROUP BY ip_address, member_id ) as z ON i.ip_address=z.ip_address AND i.member_id!=z.member_id LEFT JOIN core_members m ON i.member_id=m.member_id GROUP BY i.ip_address, i.member_id

 

Share this post


Link to post
Share on other sites

И небольшая статистика сколько пользователей использовали один IP

SELECT ip_address, COUNT(*) as count FROM ( SELECT member_id, ip_address FROM core_members_known_ip_addresses GROUP BY ip_address, member_id ) as i GROUP BY ip_address HAVING count > 1 ORDER BY count DESC

 

alexis , прошу не цитировать сообщения целиком с запросами, трудно после этого ориентироваться в теме, да и читать такую тему портянку не очень приятно.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×