Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Kорзина _ Скрипт Доступа По Списку Ip - Срочно, Не Просто Так!

Автор: Strem 18.3.2009, 14:01

Блокировался хаб при помощи средств провайдера, но сегодня нежданчик образовался:
http://mydc.ru/r/?http://uahub.info/forum/showthread.php?t=8378

Соответственно нужна блокировка по списку IP

PtokaX 0.4.1.1
Смотрите - есть возможность получать список в таком вот виде
http://mydc.ru/r/?http://www.colocall.net/uaix/ а точнее так: http://mydc.ru/r/?http://www.colocall.net/uaix/prefixes.txt (соответственно имя тхт лучше сразу идентичное)

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

Желательно, но то уже такое, чтоб автоматом получало список само - но это уже некритично, лапками буду или программер наш что-то реализует
(Луа, к сожалению, он не знает, а я вообще продвинутый юзверь)))

Буду весьма благодарен - могу предложить бартер, а именно рекламу у нас на месяцок - тут вот http://mydc.ru/r/?http://uahub.info/forum/showthread.php?t=7480 - банер 468*60 в частности, в хабе опять же.
Либо же wmz - достаточно символически правда, сами на мели...

Автор: Wariner 18.3.2009, 21:34

ну вот в основу скрипта лёг скрипт башорга(чтоб не парится, спасибо Nickolya).
Скрипт при старте и раз в установленное время берёт ипы из инета, делает таблицку и на её основе решает пускать юзера или нет.
Мне кажется скрипт будет подтормаживать. Знающие люди вносите свои предложения)))

PS: для работы скрипта нужна библиотека http://mydc.ru/ipb.html?act=attach&type=post&id=74 класть в папку libs в папке scripts

 ExceptionsIPs.rar ( 7.98 килобайт ) : 16
 

Автор: Strem 18.3.2009, 22:07

Цитата(Wariner @ 18.3.2009, 20:34) *
ну вот в основу скрипта лёг скрипт башорга(чтоб не парится, спасибо Nickolya).
Скрипт при старте и раз в установленное время берёт ипы из инета, делает таблицку и на её основе решает пускать юзера или нет.
Мне кажется скрипт будет подтормаживать. Знающие люди вносите свои предложения)))

Спасибо - сейчас буду пытаться разобраться))
Если заработает - гуд, если нет - приду ныть снова. Чем могу отблагодарить? (В личку, если что))

апд
Библиотеку распаковал, куда сказано \0.4.1.1\scripts\libs - не папкой, а скопом типа, скрипт кинул как положено - и он работает, но лочит всех, без исключения - хотя список получен(((

Автор: Wariner 18.3.2009, 22:10

лочит в смысле пускает?

Автор: Strem 18.3.2009, 22:12

Цитата(Wariner @ 18.3.2009, 21:10) *
лочит в смысле пускает?

Никого не пускает, в том числе и меня - хотя в уа (и в том списке) - 100%

Автор: Wariner 18.3.2009, 22:19

добавь в скрипт

Код
function OnExit()
    WriteTable(tExceptionsIP, "tExceptionsIP", sExceptionsIP)
end

и посмотри что у тебя будет в таблице с ипами

я прописал диапазон для своего ип ручками и аккуратно зашёл)))

Автор: Strem 18.3.2009, 22:36

Цитата(Wariner @ 18.3.2009, 21:19) *
добавь в скрипт
Код
function OnExit()
    WriteTable(tExceptionsIP, "tExceptionsIP", sExceptionsIP)
end

и посмотри что у тебя будет в таблице с ипами

я прописал диапазон для своего ип ручками и аккуратно зашёл)))

Добавил - ничего не поменялось - к примеру мой ип 92.244.112.27 - в таблице он видимо тут:
[242] = {
[1] = "92.244.96.0",
[2] = "92.244.96.19",
Если это диапазон - может с перла некорректно перевело? В списке с колокола он так смотрится 92.244.96.0/19 по идее диапазон 92.244.96.0 - 92.244.99.255
Во всяком случае не пускает... ХЗ у меня уже мысли - открыть его шоле, да шумновато станет...

Автор: Wariner 18.3.2009, 22:39

ну если ты не видишь то это точно не тот диапазон!!!
в него входят:

Цитата
92.244.96.0
92.244.96.1
92.244.96.2
92.244.96.3
92.244.96.4
92.244.96.5
92.244.96.6
92.244.96.7
92.244.96.8
92.244.96.9
92.244.96.10
92.244.96.11
92.244.96.12
92.244.96.13
92.244.96.14
92.244.96.15
92.244.96.16
92.244.96.17
92.244.96.18
92.244.96.19

твоего адреса нет в списке!!!

Автор: Strem 18.3.2009, 22:42

Цитата(Wariner @ 18.3.2009, 21:39) *
ну если ты не видишь то это точно не тот диапазон!!!

твоего адреса нет в списке!!!

Скорее на колоколе своя система, автоматически на перле должен обрабатываться, или переводить в понятную птоке систему корректно, появится программер наш - 100% обзовет обоих идиотами (меня так точно)))

Автор: Wariner 18.3.2009, 22:45

Это ты про что???? айпи есть айпи!!!!

Автор: Strem 18.3.2009, 22:51

Цитата(Wariner @ 18.3.2009, 21:45) *
Это ты про что???? айпи есть айпи!!!!

Та понятно - наши там тоже с переформатом баловались - нифига не вышло, корявые диапазоны даёт (может на колоколе слагали) - они такой пример скрипта дают http://mydc.ru/r/?http://www.colocall.net/ua/check_ukr.cgi
Ладно - утро вечера мудреннее, припрется наш гений машинных языков, дам ему весь материал - он скорее разберется, тем более с колоколовской базой кже работал.

Как только - так отпишусь feel_good.gif

Автор: Firstborn 19.3.2009, 0:14

Если можно, можете немножко проверку переписать в том скрипте, а то мне сложно будет учить еще 1 язык програмирования, я напишу по русски как хотелось бы:

Взять IP юзверя к примеру:
27.127.54.22 (абсолютно от болды, любое совпадение случайно), и конвертировать по принципу:

27 = 11011; 127 = 1111111; 54 = 110110; 22 = 10110;

27.127.54.22 = 0001 1011 . 0111 1111 . 0011 0110 . 0001 0110

0001 1011 0111 1111 0011 0110 0001 0110 = 461 321 750;

и взять с таблицы значение диапазона "от" и "до" и сравнить по принципу

Код
    если IP < "до" И IP > "от" то
        пустить
     в ином случае
        послать


Таблица генерируется тем же принципом что и конкретный IP, т.е десятичными айпишниками.

Генерацию таблицы можно не писать, я ее сам напишу в том же php.

З.Ы. Надо отредактить Ip2Num(sIP) что бы возвращала число и в строке:
Код
if (Ip2Num(tUser.sIP) >= Ip2Num(v[1])) and (Ip2Num(tUser.sIP) <= Ip2Num(v[2])) then

сделать банальную числовую проверку.

Автор: Setuper 19.3.2009, 1:53

А она (функция Ip2Num) по твоему не число возвращает? Она делает именно то, что ты описал, но минуя бессмысленный этап перевода в бинарный вид, приводя сразу строковое значение ip адреса в число.

Эту функцию не надо корректировать. Неужели так сложно догадаться как это сделать. Для этого не надо знать язык lua.

Код
if (Ip2Num(tUser.sIP) >= v[1]) and (Ip2Num(tUser.sIP) <= v[2]) then


В файле диапазонов, соответственно, пишешь не строковые значения ip адресов, а их числовые представления.

Автор: Firstborn 20.3.2009, 2:50

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

Таблица генерится таким вот образом:

Код
tExceptionsIP = {
    [1] = {
        [1] = "1041235968",
        [2] = "1041244160",
    },
    [2] = {
        [1] = "1044398080",
        [2] = "1044414464",
    },
    [3] = {
        [1] = "1044946944",
        [2] = "1044955136",
    },


Проверочная строка:
Код
for i,v in ipairs(tExceptionsIP) do
        if (Ip2Num(tUser.sIP) >= v[1]) and (Ip2Num(tUser.sIP) <= v[2]) then


Что мне надо мне написать что бы оно не писало вот это:
Цитата
[20:46] Синтаксис ...\scripts\ExceptionsIPs.lua:19: attempt to compare string with number


на выше указанную строку.

Я логично понимаю что не совместимость типов, но какое там слово/ф-ция что бы сказать скрипту что это число.

Автор: Setuper 20.3.2009, 2:54

Код
tExceptionsIP = {
    [1] = {
        [1] = 1041235968,
        [2] = 1041244160,
    },
    [2] = {
        [1] = 1044398080,
        [2] = 1044414464,
    },
    [3] = {
        [1] = 1044946944,
        [2] = 1044955136,
    },
Чуешь разницу?

Автор: Firstborn 20.3.2009, 3:07

ыыы baffle.gif , ступил, капец.

Просто везде по разному, я думал оно конвертнет строку в число (если она число), как в принципе все скриптовые без типов.

Автор: Setuper 20.3.2009, 3:19

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

Хотя можно написать так:

Код
if (Ip2Num(tUser.sIP) >= tonumber(v[1])) and (Ip2Num(tUser.sIP) <= tonumber(v[2])) then
тогда строки будут преобразовываться в числа и сравниваться уже будут числа

Автор: Firstborn 20.3.2009, 3:48

Цитата(Firstborn @ 20.3.2009, 2:07) *
ыыы baffle.gif , ступил, капец.

Просто везде по разному, я думал оно конвертнет строку в число (если она число), как в принципе все скриптовые без типов.





----

Всем огромное спасибо за содействие, скрипт заработал.

Автор: Strem 20.3.2009, 4:16

Ага, с грехом пополам, общими усилиями))
Дайте плз банер свой 468*60 (картинку либо код) - ну или текст рекламного объявления - цепану у нас новостью на несколько дней - потом в раздел рекламы уползет (хотя та тема была чуть ли не лучшей рекламой))
Ну или другие варианты - в любом случае, большое спасибо feel_good.gif