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

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

MyDC.ru _ Служебные скрипты [PtokaX] _ Access IPRanges

Автор: Saymon 5.6.2010, 12:25

Название: Access IPRanges
Автор: Saymon
Помощь в написании: Nickolya
Версия API: API2
Описание: Скрипт проверяет айпи адрес юзера и если тот не соответствует диапазонам которые указаны в таблице, отключает с хаба.

 Access_IPRanges_v0.1_beta_for_PtokaX_API2.lua ( 2.91 килобайт ) : 147
 

Автор: xoma11 22.6.2011, 14:06

PtokaX Версия 0.4.1.1
Установил, указал диапазон

Код
--[[:::::::::::: (c) 2010 by Saymon ::::::::::::::::::::::::
Название: Access IPRanges v0.1 beta for PtokaX
Версия API: API2
Автор: Saymon
Описание: Скрипт проверяет айпи адрес юзера и если тот не соответствует диапазонам которые указаны в таблице, отключает с хаба.
Скрипт написан специально администратором Saymon для EW DCMagnet's HuB (PtokaX 0.4.1.2).
Помог с написанием под PtokaX - Nickolya.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::]]

--[::::::::::: Настройки скрипта. :::::::::::::::::::::::::::]
Provider = "SakhalinTTK"                         -- Название нашего интернет провайдера.
ProviderSite = "http://sakhttk.ru"           -- Вэб сайт нашего интернет провайдера.
AdminMail = "**@mail.ru"                -- E-Mail администратора хаба.              

tLocal = { --Таблица с диапазонами нашего провайдера
    {"188.168.64.0","188.168.67.255",},      
    {"188.168.204.0","188.168.207.255",},
    {"188.168.168.0","188.168.175.255",},      
}
--[::::::::::::: Конец настроек. Далее основной код скрипта. Если нет знаний Lua, то лучше ничего не трогать!! ::]
Version = "0.1 beta"
function OnStartup()
    for i in ipairs(tLocal) do
        tLocal[i][1] = tLocal[i][1]:iptonumber()
        tLocal[i][2] = tLocal[i][2]:iptonumber()
    end
end

function string.iptonumber(ip)
    local i1, i2, i3, i4 = ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")
    if i1 then
        return i1*16777216+i2*65536+i3*256+i4
    end
end

function GetNickListArrival(tUser,sData)
    if not CheckInDiap(tUser) then
          Core.SendToOpChat("Access IPRanges "..Version.." - Была пресечена попытка входа на хаб для юзера ["..tUser.sNick.." - "..tUser.sIP.."]")
          Core.SendToUser(tUser,"<"..SetMan.GetString(21)..">\t\t"..SetMan.GetString(0).."\r\n\n"..
              "\tIP Адрес: ["..tUser.sIP.." / "..tostring(IP2Country.GetCountryName(tUser)).."] непрошёл проверку с таблицей диапазонов\r\n"..
              "\tДля IP адресов интернет провайдера "..Provider.." "..ProviderSite.." .\r\n\t"..string.rep("•", 70).."\n"..
               "\tЕсли всё же ваш провайдер "..Provider..", то свяжитесь пожалуйста с администратором хаба.\n\tСделать это можно написав на E-Mail: "..AdminMail.."\n\tИли на форуме проекта - "..ProjectForum.." .\n\t"..string.rep("•", 70).."\n\tPowered by Access IPRanges v "..Version..". © 2009-2010 by Saymon.")
          Core.Disconnect(tUser)
    end
    Core.SendToUser(tUser,"<"..SetMan.GetString(21).."> Проверка IP адреса ["..tUser.sIP.."] на пренадлежность к интернет провайдеру "..Provider.." пройдена успешно. Доступ разрешён.")
end
RegConnected = UserConnected
OpConnected = UserConnected

function CheckInDiap(tUser)
    local ip = tUser.sIP:iptonumber()
    for _,range in ipairs(tLocal) do
        if range[1] <= ip and ip <= range[2] then
            return true
        end
    end
    return false
end

в чате пишет Проверка IP адреса [188.168.204.**] на пренадлежность к интернет провайдеру SakhalinTTK пройдена успешно. Доступ разрешён.
а с другого провайдера пишет: [22:04:44] *** Connecting to 188.168.204.*...
[22:04:44] *** Connected
[22:04:45] <Sakhalin> Этот хаб работает под управлением PtokaX DC Hub 0.4.1.2 (Время работы: 0 дней, 2 часов, 3 минут / Юзеры: 3)
[22:04:45] <Sakhalin> Welcome to SakhalinTTK


Автор: mariner 22.6.2011, 15:17

видимо, ты делаешь что-то не так. У нас все работает как надо.

Автор: Saymon21 22.6.2011, 15:33

Указывать нужно только те деапазоны, которые нужно пропускать. Проверь, верны ли они.

Автор: Ksan 22.6.2011, 15:51

Мне кажется, надо немножко изменить конструкцию скрипта в области

Код
function GetNickListArrival(tUser,sData)
    if not .... then
        ....
    end
    Core.SendToUser....
end

То есть, добавить else:
Код
function GetNickListArrival(tUser,sData)
    if not .... then
        ....
    else
        Core.SendToUser....
    end
end

Я не знаю, повлияет ли это на результат, но так корректнее будет.
И, наверно, не стоило подменять таблицу с диапазонами IP на одноимённую таблицу с числовыми значениями диапазонов IP, так как при одновременном заходе 2-х и более юзеров возможен пропуск второго и далее юзера без проверки на вхождение в провайдерский список по причине отсутствия первичного списка диапазонов, так как он уже подменён на числовые значения.
Лучше создать заранее таблицу tLocalNum = {} и туда сливать полученные числовые значения.

Автор: Alexey 23.6.2011, 16:38

Цитата(Ksan @ 22.6.2011, 16:51) *
И, наверно, не стоило подменять таблицу с диапазонами IP на одноимённую таблицу с числовыми значениями диапазонов IP,

Какая подмена? О чём ты? Таблица одна и та-же. Меняется лишь представление элементов.

Цитата(Ksan @ 22.6.2011, 16:51) *
так как при одновременном заходе 2-х и более юзеров возможен пропуск второго и далее юзера без проверки на вхождение в провайдерский список

Нет, невозможен.


Автор: Ksan 23.6.2011, 17:52

Цитата
Какая подмена? О чём ты? Таблица одна и та-же. Меняется лишь представление элементов.

И я про то же самое:
Цитата
на одноимённую таблицу

Да и фиг с ними, нет так нет.