Автор: Saymon 5.6.2010, 12:25
Название: Access IPRanges
Автор: Saymon
Помощь в написании: Nickolya
Версия API: API2
Описание: Скрипт проверяет айпи адрес юзера и если тот не соответствует диапазонам которые указаны в таблице, отключает с хаба.
Автор: 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
Цитата
Какая подмена? О чём ты? Таблица одна и та-же. Меняется лишь представление элементов.
И я про то же самое:
Цитата
на одноимённую таблицу
Да и фиг с ними, нет так нет.