Jump to content

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

Featured Replies

Posted
comment_156485

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

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

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

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

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

 

comment_156488

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

 

  • Author
comment_156492

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

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

comment_156494

А можно просто выполнить 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

 

comment_156495
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 ?

comment_156496

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

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

 

comment_156497

И небольшая статистика сколько пользователей использовали один 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 , прошу не цитировать сообщения целиком с запросами, трудно после этого ориентироваться в теме, да и читать такую тему портянку не очень приятно.

 

comment_156509

Для плагина нужна обертка, продуманная структура, а составлять sql запросы многого не требуется.

comment_156514

Оно того стоит? У большинства idsl с динамическим ip, также некоторые сидят под общим ip (в организациях, например).

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.