Нужен SQL запрос

Технические вопросы по UTM 5.0
Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Нужен SQL запрос

Сообщение Hron »

Подскажите пожалуйста SQL запрос выдергивания логина и пароля по IP

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

не проще ли будет урфой?

Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Сообщение Hron »

starchik писал(а):не проще ли будет урфой?
Может и проще, но когда задавался такой идеей, то ничего так и не понял, как, куда и что ставить...
Так что я думаю простенький запрос - в самый раз :) Вот кто бы только подсказал этот "простенький" запрос.

Karl
Сообщения: 27
Зарегистрирован: Ср апр 02, 2008 09:26

Сообщение Karl »

таблица ip_groups. ip хранится в десятичном виде. конвертация средствами MySQL выглядит так

select INET_ATON('A.B.C.D');
select INET_NTOA(X);

запрос выглядит так
select uname,upass,is_deleted from UTM5.ip_groups where ip='X';

Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Сообщение Hron »

Karl, большое спасибо, буду пробовать!

Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Сообщение Hron »

1. Что-то IP адреса видимо не в таком виде хранятся. В базе они вида "-1022335097" (еще смущает знак минуса), что после конвертации дает 60.239.152.121. Хотя должна быть другая сеть, 172.х.х.х
2. Да и в таблице ip_groups очень мало заполненных полей uname и upass
3. Некоторые IP адреса отображаются все-таки правильно, в смысле из нашей сети

Может у кого есть мысли?

duzer
Сообщения: 82
Зарегистрирован: Сб ноя 04, 2006 12:50

Сообщение duzer »

Код: Выделить всё

select inet_ntoa(4294967295 & ip_groups.ip ) , inet_ntoa(4294967295 & ip_groups.mask ) uname, upass from ip_groups where  is_deleted = 0 and inet_ntoa(ip_groups.ip & 0xFFFFFFFF) = '1.2.3.4'
В php функция перевода long2ip() ip2long()

Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Сообщение Hron »

duzer писал(а):

Код: Выделить всё

select inet_ntoa(4294967295 & ip_groups.ip ) , inet_ntoa(4294967295 & ip_groups.mask ) uname, upass from ip_groups where  is_deleted = 0 and inet_ntoa(ip_groups.ip & 0xFFFFFFFF) = '1.2.3.4'
В php функция перевода long2ip() ip2long()
Вот за это тебе огромнейший респект и спасибо! Все работает на УРА! :)
Только что это за цифра такая 4294967295?
И как средствами PHP можно перевести обычный IP в такой, который в UTM? ip2long() дает не то число?

Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Сообщение Hron »

Рано обрадовался... не все гладко пошло!
Подскажите, вот как получить из IP(база) = "-1022335083" реальный IP абонента = "172.20.0.217" и наоборот?
В большей степени интересует конвертация из обчного в строковый для сравнения с базой. inet_ntoa не дает отрицательных значений, какие хранятся в базе. А если и проигнорировать минус, то все равно значение "левое".

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

тебе же написали ip2long()

Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Сообщение Hron »

starchik писал(а):тебе же написали ip2long()
ip2long из IP адреса 172.20.0.217 делает -1407975207, хотя в базе вбито -1022335083, что в свою очередь, обратной функцией long2ip дает значение 195.16.103.149.
Так что никак не вяжется!!!

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »


Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Сообщение Hron »

starchik писал(а):учись гуглить http://www.google.ru/search?hl=ru&newwi ... +&gs_rfai=
Ответ - просто супер!!!
А для чего нужен тогда этот форум, если все в гугл будут слать?!
Я задал конкретный вопрос и косвенно, и прямо относящийся к UTM, а точнее к её базе!

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Сообщение ds »

Hron писал(а):
starchik писал(а):учись гуглить http://www.google.ru/search?hl=ru&newwi ... +&gs_rfai=
Ответ - просто супер!!!
А для чего нужен тогда этот форум, если все в гугл будут слать?!
Я задал конкретный вопрос и косвенно, и прямо относящийся к UTM, а точнее к её базе!
Читать из бызы напрямую можно, а вот писать не надо, ибо смысла нет.
Но раз очень надо,тогда берешь inet_aton. Если результат больше 2147483647 (0x7FFFFFFF), то вычитаешь его из 4294967295(0xFFFFFFFF). Если меньше, то inet_аton() и есть результат.
Для поиска есть такое понятие как signed и unsigned int. Код писать не буду.
ЗЫ Не нравится гугл, есть яндекс, например. Сам вот тоже не брезгую если что :)

Hron
Сообщения: 12
Зарегистрирован: Вт окт 19, 2010 16:56

Сообщение Hron »

ds писал(а): Читать из бызы напрямую можно, а вот писать не надо, ибо смысла нет.
Но раз очень надо,тогда берешь inet_aton. Если результат больше 2147483647 (0x7FFFFFFF), то вычитаешь его из 4294967295(0xFFFFFFFF). Если меньше, то inet_аton() и есть результат.
Для поиска есть такое понятие как signed и unsigned int. Код писать не буду.
ЗЫ Не нравится гугл, есть яндекс, например. Сам вот тоже не брезгую если что :)
Спасибо. Я тоже не брезгую поиском, но когда он результатов не дает, т.е. непонятно - приходится обращаться на спец форум, т.е. я сюда и обратился, а отсюда меня отправляют обратно на поиск. Нехорошо получается! Ну да ладно, суть не в этом!

Но с запросом что-то никак не получается. Не могу найти связь между таблицами. Может кто наваяет?! В общем суть такая:
1. Преобразовать нормальный IP в строковый (с этим разберусь)
2. Имея строковый ip, который находится в таблице ip_groups нужно вытащить логин и пароль, находящиеся в таблице users.
P.S. Запрос бы сам и наваял, если бы нашел связь между этими таблицами. Если смотреть с начала таблицы, то работает запрос

Код: Выделить всё

SELECT login,password FROM users WHERE id=(SELECT ip_group_id FROM ip_groups WHERE INET_NTOA(ip_groups.ip & 0xFFFFFFFF) = 'тут нормальный IP');
Но если смотреть дальше, то когда юзеры удаляются происходит смещение их ID. Поэтому ip_groups.ip_group_id перестает совпадать с users.id и запрос начинает выдавать "левые" результаты.

P.S.S.
В таблице ip_groups поля uname и upass пустые. Логин и пароль находятся только в таблице users

Ответить