/* СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ СТИЛИ ССТИЛИ */

[#DCBEELINEKZ] БИЛАЙН ХАБЫ КАЗАХСТАН

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » [#DCBEELINEKZ] БИЛАЙН ХАБЫ КАЗАХСТАН » ◾УСТАНОВКА DC ХАБА В РОУТЕР » LEDE PtokaX 0.5.0.1-1 [DCBEELINEKZ VERSION]


LEDE PtokaX 0.5.0.1-1 [DCBEELINEKZ VERSION]

Сообщений 1 страница 2 из 2

1

LEDE PtokaX 0.5.0.1-1 [DCBEELINEKZ VERSION]
Хаб для роутера под прошивкой LEDE

Сидел и долго думал как мне решить проблему с никами которые виснут, просил всяких умных с ЧСВ разрабов и линуксонанистов с 3х форумах, которые мне никак не хотели отвечать, даже тупо дать подсказку где смотреть, где в коде эти функции выкл и вкл....
Не зря говорят что программисты малость епнутые, в этом я сам убедился что они точно такие   :rolleyes:

Долго сидел думая где может быть этот демон  и примерно на угад просто наткнулся, чисто логическим мышлением и надеюсь я туда попал ))

Выкладываю тут:
Ваш клиент посылает неверный IP .... в параметрах команды, сервер заменил его на Ваш настоящий IP ...... !
Выкл (false)  LAN_IN_COMMAND_HUB_REPLACED_IT_WITH_YOUR_REAL_IP в DcCommands.cpp

Код:

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void clsDcCommands::SendIPFixedMsg(User * pUser, char * sBadIP, char * sRealIP) {
    if((pUser->ui32BoolBits & User::BIT_WARNED_WRONG_IP) == User::BIT_WARNED_WRONG_IP) {
        return;
    }

    int imsgLen = sprintf(clsServerManager::sGlobalBuffer, "<%s> %s %s %s %s !|", clsSettingManager::mPtr->sPreTexts[clsSettingManager::SETPRETXT_HUB_SEC], clsLanguageManager::mPtr->sTexts[LAN_YOUR_CLIENT_SEND_INCORRECT_IP], sBadIP,
        clsLanguageManager::mPtr->sTexts[LAN_IN_COMMAND_HUB_REPLACED_IT_WITH_YOUR_REAL_IP], sRealIP);
    if(CheckSprintf(imsgLen, clsServerManager::szGlobalBufferSize, "SendIncorrectIPMsg1") == false) {
        pUser->SendCharDelayed(clsServerManager::sGlobalBuffer, imsgLen);
    }

    pUser->ui32BoolBits |= User::BIT_WARNED_WRONG_IP;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

VALIDATE_DENIDE_ARRIVAL

DcCommands.cpp ValidateDenideArrival - Добавил код ниже
LuaScriptManager.h VALIDATE_DENIDE_ARRIVAL - Добавил
LuaScriptManager.cpp 0x400000 "ValidateDenideArrival" - Добавил

Код:
                if(Reg == NULL) {
         	// alex82 ... добавили ValidateDenideArrival
        	clsScriptManager::mPtr->Arrival(curUser, Nick, szNickLen, clsScriptManager::VALIDATE_DENIDE_ARRIVAL);
           	        int imsgLen = sprintf(msg, "$ValidateDenide %s|", Nick);
           	        if(CheckSprintf(imsgLen, 1024, "clsDcCommands::ValidateUserNick14") == true) {
                        curUser->SendChar(msg, imsgLen);
                    }

                    if(strcmp(OtherUser->sIP, curUser->sIP) != 0 || strcmp(OtherUser->sNick, curUser->sNick) != 0) {
                        imsgLen = sprintf(msg, "[SYS] Nick taken [%s (%s)] %s (%s) - user closed.", OtherUser->sNick, OtherUser->sIP, curUser->sNick, curUser->sIP);
                        if(CheckSprintf(imsgLen, 1024, "clsDcCommands::ValidateUserNick15") == true) {
                            clsUdpDebug::mPtr->Broadcast(msg, imsgLen);
                        }
                    }

                    curUser->Close();
                    return false;
                } else {
                    // PPK ... addition for registered users, kill your own ghost >:-]
                    curUser->ui8State = User::STATE_VERSION_OR_MYPASS;
                    curUser->ui32BoolBits |= User::BIT_WAITING_FOR_PASS;
                    curUser->AddPrcsdCmd(PrcsdUsrCmd::GETPASS, NULL, 0, NULL);
                    return true;
                }
            }
        }
    }
        
    if(Reg == NULL) {


ValidateDenideArrival(tUser, sNick)

Вызывается тогда, когда на хаб пытается войти юзер, ник которого уже занят другим юзером. А именно - перед отправкой юзеру команды $ValidateDenide.

Юзеры, как правило, сидят на многих хабах, и далеко не всегда они устанавливают для каждого из них отдельный ник. В результате, при слиянии крупных хабов получается очень много "клонов" - юзеров, пытающихся войти на хаб несколько раз под одним ником. При этом хаб, как и полагается, пускает одного из них, а всех остальных посылает подальше. Однако, терять драгоценных юзеров (за которых, между прочим, нынче платят деньги) не есть хорошо. Вместо этого можно отследить их, и пренаправить на другой хаб. Именно для этих целей в свое время и была добавлена данная функция.

В отличии от других событий Lua, ValidateDenideArrival получает в качестве второго аргумента не команду целиком, а лишь ник юзера. При этом в таблице юзера ник отсутствует.

Тестовый скрипт

Код:
function ValidateDenideArrival(user, nick)
	print("Validate denide:",nick)
end


Clone Redirect 1.00
© 2012 alex82

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

Алгоритм работы следующий: При первой попытке входа клона, запоминаем время
сего знаменательного события, а затем, при каждой последующей попытке, смотрим,
прошло ли с момента первой попытки входа iTime минут. Если да, перенаправляем
юзера. Сделано это для того, чтобы избежать перенаправления тех юзеров, что
отвалились от хаба из-за проблем с сетью, и теперь не могут войти по той причине,
что их ник по-прежнему висит в списке юзеров. Если в промежутке между iTime и
iDelTime юзер не предпринял ни одной попытки входа, то предполагаем, что юзер
таки заметил неладное и сменил ник (или его просто заебало ломиться в закрытую
дверь :D) , и удаляем его из списка ожидающих перенаправления.

Скрипт
Код:
--	НАСТРОЙКИ

iTime = 20	-- Таймаут перенаправления, минут
iDelTime = 30	-- Таймаут удаления юзера из списка, минут
sRedirAddr = "dchub://10.18.50.50:50"	-- Адрес перенаправления

sLog = Core.GetPtokaXPath().."Log/clone_redirect.log"

--###################################################################################

tClone = {}

function OnStartup()
	TmrMan.AddTimer(60000,"MainTimer")
end

function ValidateDenideArrival(user,nick)
    if tClone[nick] then
    if tClone[nick]+iTime*60 < os.time() then
    	Core.SendToUser(user,"$ForceMove "..sRedirAddr)
    	tClone[nick] = nil
    	Report("Юзер "..nick.." был перенаправлен на резервный хаб, поскольку на хабе уже есть юзер с таким ником")
    end
	else
    tClone[nick] = os.time()
    Report("Юзер "..nick.." был добавлен в список ожидающих перенаправления")
	end
end

function UserConnected(user)
	if tClone[user.sNick] then
    tClone[user.sNick] = nil
    Report("Юзер "..user.sNick.." был удален из списка дублирующихся юзеров, поскольку успешно вошел на хаб.")
	end
end
OpConnected = UserConnected
RegConnected = UserConnected


function MainTimer()
	for i,v in pairs(tClone) do
    if v+iDelTime*60 < os.time() then
    	tClone[i] = nil
    	Report("Юзер "..i.." был удален из списка дублирующихся юзеров, поскольку прекратил попытки входа.")
    end
	end
end

function Report(msg)
	local f = io.open(sLog,"a")
	if f then
    f:write(os.date("[%Y-%m-%d %H:%M:%S] "),msg,"\n")
    f:close()
	end
end

http://mydc.ru/topic5423.html?p=44997#entry44997
PortCheck и Clone Killer http://mydc.ru/topic4674.html?hl=Clone+Redirect


Подробно в моих исходниках: https://github.com/dcbeelinekz/ptokax_lede/tree/master/!Откл BadIP
Готовый пакет ptokax_0.5.0.1-1_rafa_mips_24kc.ipk можно скачать там же.
Продолжение темы установки PtokaX в роутер: Установка хаба PtokaX в роутер под прошивкой OpenWrt и LEDE

2

Мой Settings.xml Скрины: https://vk.com/dchub_router?z=album-124916105_252267623

Код:
<?xml version="1.0" encoding="windows-1252" standalone="yes" ?>
<PtokaX Version="0.5.0.1 rafa">
    <Booleans>
        <Bool Name="RedirectWhenHubFull">0</Bool>
        <Bool Name="AutoRegister">0</Bool>
        <Bool Name="ShareLimitRedir">0</Bool>
        <Bool Name="StripDescription">1</Bool>
        <Bool Name="StripEmail">1</Bool>
        <Bool Name="RegOpChat">0</Bool>
        <Bool Name="TempBanRedir">0</Bool>
        <Bool Name="PermBanRedir">0</Bool>
        <Bool Name="KeepSlowUsers">0</Bool>
        <Bool Name="CheckNewReleases">0</Bool>
        <Bool Name="EnableTrayIcon">0</Bool>
        <Bool Name="SendKickMessagesToOps">0</Bool>
        <Bool Name="SendStatusMessages">0</Bool>
        <Bool Name="SendTextFilesAsPm">1</Bool>
        <Bool Name="StopScriptOnError">1</Bool>
        <Bool Name="ReplyToHubCommandsAsPm">1</Bool>
        <Bool Name="DontAllowPingers">1</Bool>
        <Bool Name="BanMessageShowIp">0</Bool>
        <Bool Name="BanMessageShowRange">0</Bool>
        <Bool Name="BanMessageShowNick">0</Bool>
        <Bool Name="BanMessageShowReason">0</Bool>
        <Bool Name="BanMessageShowBy">0</Bool>
        <Bool Name="ReportSuspiciousTag">0</Bool>
        <Bool Name="LogScriptErrors">1</Bool>
    </Booleans>
    <Integers>
        <Integer Name="MaxUsers">33</Integer>
        <Integer Name="MaxChatLen">0</Integer>
        <Integer Name="MaxChatLines">0</Integer>
        <Integer Name="MaxPmLen">0</Integer>
        <Integer Name="MaxPmLines">0</Integer>
        <Integer Name="DefaultTempBanTime">15000</Integer>
        <Integer Name="MaxPassiveSr">1</Integer>
        <Integer Name="MyINFODelay">5</Integer>
        <Integer Name="MainChatAction">1</Integer>
        <Integer Name="SameMainChatMessages">1</Integer>
        <Integer Name="SameMainChatTime">1</Integer>
        <Integer Name="SameMainChatAction">1</Integer>
        <Integer Name="PmAction">0</Integer>
        <Integer Name="SamePmMessages">1</Integer>
        <Integer Name="SamePmTime">1</Integer>
        <Integer Name="SamePmAction">1</Integer>
        <Integer Name="SameMultiPmAction">0</Integer>
        <Integer Name="SameSearchAction">0</Integer>
        <Integer Name="MyINFOAction">1</Integer>
        <Integer Name="NewConnectionsCount">2</Integer>
        <Integer Name="DefloodWarningCount">3</Integer>
        <Integer Name="DefloodWarningAction">0</Integer>
        <Integer Name="GlobalMainChatAction">0</Integer>
        <Integer Name="MinSearchLen">0</Integer>
        <Integer Name="MaxSearchLen">0</Integer>
        <Integer Name="BruteForcePassProtectBanType">0</Integer>
        <Integer Name="MaxPmCountToUser">3</Integer>
        <Integer Name="MaxSimultaneousLogins">500</Integer>
        <Integer Name="PmAction2">0</Integer>
        <Integer Name="SearchAction2">0</Integer>
        <Integer Name="CTMAction2">3</Integer>
        <Integer Name="SRAction">0</Integer>
        <Integer Name="MaxDownAction">0</Integer>
        <Integer Name="MaxDownAction2">0</Integer>
        <Integer Name="MaxConnSameIP">2</Integer>
        <Integer Name="MinReConnTime">30</Integer>
        <Integer Name="MaxUsersPeak">1</Integer>
    </Integers>
    <Strings>
        <String Name="HubName">#DCBEELINEKZ</String>
        <String Name="AdminNick">DCBEELINEKZ</String>
        <String Name="HubAddress">192.168.1.1</String>
        <String Name="TCPPorts">411</String>
        <String Name="HubTopic">ПОСЛЕДНИЙ ГЕРОЙ</String>
    </Strings>
</PtokaX>


Вы здесь » [#DCBEELINEKZ] БИЛАЙН ХАБЫ КАЗАХСТАН » ◾УСТАНОВКА DC ХАБА В РОУТЕР » LEDE PtokaX 0.5.0.1-1 [DCBEELINEKZ VERSION]