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

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

MyDC.ru _ Запросы скриптов для PtokaX _ Редирект всех, кроме...

Автор: MaxFox 10.12.2010, 13:38

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

Вот мои труды... просьба поправить где не прав. Скрипт делался опираясь на похожие задачи. В скрипте сделал 2 вывода, чтобы видеть процесс.

Раскрывающийся текст

---------------------------------------------------------------
-- Скрипт редиректа всех кроме IP внисенных ниже --
---------------------------------------------------------------
-- Адрес хаба на который редиректим
sAddress = "dchub://123"
-- Сообщение которое получают пользователи при редиректе
local sMsg = "Вы перенаправленны на..."
--Диапозон IP который не редиректим
local tRanks = {
{"10.0.0.0","10.255.255.255"},
{"172.16.0.0","172.16.255.255"},
{"192.168.0.0","192.168.255.255"},
{"172.20.0.0","172.20.255.255"},
}
-- Минимальная для входа шара, в байтах:
iMinShare = 5*1024^3 -- 5 Gb
---------------------------------------------------------------
function iIp(sIP)
local a, b, c, d = sIP:match"^(%d+)%.(%d+)%.(%d+)%.(%d+)$"
return a * 16777216 + b * 65536 + c * 256 + d
end

function OnStartup()
for k, v in ipairs(tRanks) do
tRanks[k][1], tRanks[k][2] = iIp(v[1]), iIp(v[2])
end
end

function UserConnected(tUser)
if (Core.GetUserValue(tUser, 16) or 0) < iMinShare then
local iIP = iIp(tUser.sIP)
for _, v in ipairs(tRanks) do
if iIP < v[1] or iIP > v[2] then
Core.SendToUser(tUser, "Внимание!!! сейчас вы будете перенаправленны")
Core.Redirect(tUser, sAddress, sMsg)
Core.SendToOpChat(tUser.sIP)
return
else Core.Disconnect(tUser)
Core.SendToOpChat(tUser.sNick)
return
end
end
end
end


Что не работает, периодически перенаправляет тех, кого должен отключать

Автор: Alexey 10.12.2010, 17:51

Как-то так (не проверял):

Раскрывающийся текст
Код
function UserConnected(tUser)
    if (Core.GetUserValue(tUser, 16) or 0) < iMinShare then
        local iIP = iIp(tUser.sIP)
        local bIsLocal = false
        for _, v in ipairs(tRanks) do
            if iIP > v[1] and iIP < v[2] then
                bIsLocal = true
                break
            end
        end
        if bIsLocal then
            Core.Disconnect(tUser)
            Core.SendToOpChat(tUser.sNick)
        else
            Core.SendToUser(tUser, "Внимание!!! сейчас вы будете перенаправленны")
            Core.Redirect(tUser, sAddress, sMsg)
            Core.SendToOpChat(tUser.sIP)
        end
    end
end

Автор: Артём 10.12.2010, 18:13

big_smile.gif
 RedirectInternetUsers.lua ( 1.85 килобайт ) : 11

В опчат приходит такое сообщение:

Цитата
<OpChat> Локальный Юзер Unreg IP 10.0.0.0 пытался войти на хаб.
<OpChat> Интернет Юзер Unreg IP 10.0.0.0 пытался войти на хаб, но был перенаправлен на dchub://123 из-за маленькой шары.

Автор: MaxFox 11.12.2010, 1:18

Спасибо парни, за свежие идеи =)
Вывод был сделан только для контроля работы скрипта, а вы с ним помудрили... Даже мой скромный вывод, создает аццкий ффлуд в опчате, порядка 3-5 пользователей в секунду (Пиковый онлайн хаба почти 10 000 юзеров).

Автор: Артём 11.12.2010, 14:46

MaxFox, закомментируй

Код
Core.SendToOpChat

чтобы не флудило в опчате big_smile.gif
P.S сливай мне "ненужных" юзеров big_smile1.gif

Автор: MaxFox 11.12.2010, 19:15

Цитата(Артём @ 11.12.2010, 14:46) *
MaxFox, закомментируй
Код
Core.SendToOpChat

чтобы не флудило в опчате big_smile.gif
P.S сливай мне "ненужных" юзеров big_smile1.gif

омг... будь внимательнее =)

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

Автор: Артём 11.12.2010, 19:37

MaxFox, я пошутил big_smile1.gif