Версия для печати темы
MyDC.ru _ Технические вопросы по PtokaX _ Бан По Днс
Автор: lezvik 11.10.2008, 0:27
мне бы знать как банить на птоке 0360 по днс.
ато юзера забаненные по диапазону айпи, всеравно заходят и портят настроение.
если кто знает как. это делать опишите заранее спасиб.
кароче какойто глюк, я забанил по днс, и перед тем как забанить увидел инфо о хосте! дело было сделано, чел был забанен, но чтото пошло не так, и этот юзер по новой зашел когда я захотел узнать какой же теперь у него хост, то в ответ скрипт пишет "в логах не значитса имя компа юзера! и все этот щегол засрал всех и вся, пришлося вырубить хаб!
как решать эту траблу ааа?
нужен скрипт под api 1
Автор: Nickolya 11.10.2008, 0:52
Самой птокой - никак, можно использовать доп. библиотеки для скрипта, но там есть 1 проблема: если за ip нет записи на DNS-сервере, то библиотека виснет на некоторое время, от 1 до 20 секунд. А имя хоста определяется каждый раз при заходе юзера (надо чтобы знать забанен он или нет) и когда ты пытаешься забанить пользователя, так что хаб начнет жутко тормозить и превратится в один сполшной лаг. Чтобы ты попробовал, даже нашел у себя скрипт бана по днс, который я еще давно-давно пытался сделать, апи 1, работает с библиотекой http://mydc.ru/ipb.html?act=attach&type=post&id=75.
Автор: lezvik 13.10.2008, 23:01
там знаеш че у тебя с скриптом: там когда даеш команду проверит днс, ищет и находит, но когда начинаеш банить скрипт просто "отлетает".
То есть, в списке скриптов исчезает галочка, и нада по новой ставить галочку чтоп он заюзан был. Но все что можно сделать с этим скриптом это узнать днс не более.
Автор: Nickolya 14.10.2008, 0:02
Хм, странно, а какую ошибку выдает скрипт?! И у тебя он не подвешивает хаб?
Автор: lezvik 14.10.2008, 13:43
Цитата(Nickolya @ 14.10.2008, 1:02)
Хм, странно, а какую ошибку выдает скрипт?! И у тебя он не подвешивает хаб?
ни каких ошибок не выдает, просто слетает и все. хаб не подвешивает.
Автор: Nickolya 14.10.2008, 17:25
А в окне ошибок скриптов есть ошибки? У меня есть, не знаю почему такой косяк, видимо как-то сменил функцию на новую:
Цитата
Синтакс D:\0.3.6.0\scripts\HostBan.lua:87: attempt to call global 'SaveFile' (a nil value)
Замени в функции OnExit()
SaveFile на
SaveToFile. После этого скрипт работает как надо, у меня по крайней мере...
Автор: lezvik 17.10.2008, 16:31
спасибо, все работает, забанил адного вредителя, который месяц мозг еп. ыыыыыыыы.
Автор: Infernus-pro 17.10.2008, 21:18
На API 2 можете этот скрипт перевести?
Автор: Nickolya 17.10.2008, 22:30
Можем, я вот попробовал, пробуй что вышло.
Автор: Infernus-pro 25.10.2008, 15:23
Цитата
[18:20:40] <[Bot]Leviathan> *** Пользователь Infernus-pro [192.168.*.*] с хостом *** забанен!
Вот это выдает, но не банит, ничего вообще не происходит.
Автор: Undertaker 29.10.2008, 0:14
у меня такая же проблема как и у Infernus-pro , бот абсолютно тоже выдаёт. Как же быть ?
Автор: Delion 30.10.2008, 11:57
Не понял. Что именно узнаёт скрипт?
Автор: Sephiroth_Lukaw 30.10.2008, 12:30
To: Delion
Цитата
socket.dns.tohostname(address)
Converts from IP address to host name.
Address can be an IP address or host name.
The function returns a string with the canonic host name of the given address, followed by a table with all information returned by the resolver. In case of error, the function returns nil followed by an error message.
Автор: Delion 30.10.2008, 23:12
Честно говоря,мало что понял.
Короче,можно ли таким макаром банить хабовладельцев? Типа вбить хост хаба - а на выходе получать вечно забаненного хостера?
Автор: district 2.11.2008, 9:15
Спасибо Nickolya за скрипт (под старый API имею в виду), вроде, в первом приближении, работает.
Есть пара вопросов.
Верный ли список необходимых файлов для работы скрипта у меня в папке Libs? Или напротив, может, что лишнее тут?
Цитата
socket.lua
PXSocket.tds
PXSocket.dll
PXMime.tds
PXMime.dll
mime.lua
Itn12.lua
И еще вопрос. Насколько я понял, скрипт пробивает имя хоста при каждом входе юзера, и тормозить и вешаться он должен, когда это имя установить не удается.
Я попробовал отключить одного юзера, у которого
Цитата
Имя компьютера пользователя с IP **.**.**.** не установлено!
и посмотреть, что будет при реконнекте. Никаких особых тормозов отмечено не было.
Все ли тут верно?
Ptoka 0.3.6.0 Lua5.1.2
А вообще, в идеале, неплохо было бы подчинить этот скрипт двум другим, которые банят за порнуху (по ТТН) и за мат в чате :-)
Да, и еще вопрос есть злободневный. Сейчас основной режим банов - fullban :
Цитата
<Ban>
<Type>0</Type>
<IP>**.***.**.***</IP>
<Nick>Ник</Nick>
<Reason>Причина</Reason>
<By>Бот</By>
<NickBan>1</NickBan>
<IpBan>1</IpBan>
<FullIpBan>1</FullIpBan>
<Expire>0</Expire>
</Ban>
Чем тут FullIpBan отличается от просто IpBan? До сих пор не могу найти внятного ответа.
Собственно, поэтому и заинтересовался выложенным скриптом, что на днях случился прецедент: правильный юзер с динамическим IP попробовал зайти, но наткнулся на бан по айпи, выписанный другому, неправильному юзеру.
Спасибо.
Дополнено:
Погоняв скрипт на разных режимах, немного его подредактировал.
Убрал загадочную строчку "ValidateNickArrival" и приписал Disconnect. Какой же бан без дисконнекта? Ну и еще кое-что по мелочи, названия опций, блокировка пролезания команды в главный чат, везде SaveToFile вместо SaveFile.
И тут встала другая проблема. Юзеры с оговоренными в начале скрипта профилями все равно будут иметь доступ на хаб, но дисконнект и внесение в tbl-файл имени хоста произойдет, если дрогнет рука и под бан попадет не тот, кто надо.
Поэтому хорошо бы поставить наличие профиля юзера в списке неприкасаемых критерием не только входа на хаб, но и не-попадания под бан по ошибке.
Опыта скриптописания у меня нет, как это реализовать при существующей архитектуре скрипта пока что не знаю.
Может быть, более опытные товарищи подскажут?
Креплю свою редакцию, на всякий случай.
Автор: Nickolya 2.11.2008, 20:21
Про то что нет тормозов рад, пользуйте. Про файлы в папке не парься, если есть лишние, то тебе они не особо мешают, всё это входит в состав библиотеки, главное чтобы работало. ФулБан - вариант бана после которого забаненый юзер с привилегией захода под баном не сможет зайти на хаб, т.е. привилегия не работает. Про код ничего не знаю, у меня всё работает на ура, забаненый юзер не может зайти, вся логика скрипта работает, команды в чат не идут и т.д., смотрите сами...
Реализация проерки на стойкость к бану выглядит так:
Код
elseif sCmd == "nickhostban" then
local _,_, sNick = string.find(sData, "%b<>%s+%S+%s+(%S+)")
local tNeedUser = GetItemByName(sNick)
if tNeedUser then
local sHost = tohostname(tNeedUser.sIP)
if sHost then
if tHostBans[sHost] then
curUser:SendData(sBot, "*** Хост "..sHost.." уже забанен!")
else
if tCanBeBanned[tNeedUser.iProfile] == 1 then
tHostBans[sHost] = 1
SaveToFile(sBansFile, tHostBans, "tHostBans")
tNeedUser:Disconnect()
curUser:SendData(sBot, "*** Пользователь "..sNick.." ["..tNeedUser.sIP.."] с хостом "..sHost.." забанен!")
else
curUser:SendData(sBot, "*** Ты не можешь забанить пользователя "..sNick.." ["..tNeedUser.sIP.."] с хостом "..sHost.."!")
end
end
else
curUser:SendData(sBot, "*** Имя хоста пользователя "..sNick.." ["..tNeedUser.sIP.."] не установлено, бан по хосту не может быть применен!")
end
else
curUser:SendData(sBot, "*** Пользователь "..sNick.." отсутствует на хабе! Из-за этого невозможно узнать имя компьютера этого пользователя!")
end
return 1
Автор: district 3.11.2008, 8:58
2 Nickolya
спасибо за разъяснения начет фуллбана, будем работать дальше))
Ну вот, удалось внести кое-какие дополнения. Увлек меня этот скрипт, каюсь)
Что сделано:
1. Добавлено сообщение "Вы забыли ввести ник юзера/имя хоста" в том случае, если команда вводится из строки главного чата;
2.Добавлено ограничение по профилям (CanBan) к каждой команде и сообщение "Извините, у вас нет права использовать эту команду"
3.Формат сообщения "Этого юзера нельзя забанить" изменен на такой: "Бан не может быть применен, пользователь имеет профиль <Vip, op и тд> !
4.Мелкие косметические дополнения:
а)Сообщение для забаненных "Вы были забанены на этом хабе..." плюс вызываемое из Птоки
сообщение GetBanMsgAddMsg()
б)Бан обычным способом, если извлечь имя хоста не удается
в)Автоматическое удаление имени забаненного юзера из списка зарегистрированных
Есть еще две задачи, которые хотелось бы решить. Попробую сам, конечно, но, возможно, без помощи автора скрипта обойтись не удастся.
1.Ввод, сохранение и показ при попытке входа забаненному причины бана
2.Мелкий дефект (у всех так или только у меня?) - смещение таблицы забаненных хостов (см.картинку)
И в заключение один вопрос, на будущее. Можно ли как-нибудь сделать так, чтобы скрипт, который стоит выше в списке, получал и отрабатывал команду от скрипта, расположенного ниже? Звучит может быть дико, но все-таки?
Автор: Nickolya 3.11.2008, 10:07
Смещение идет, может и мой косяк, уже не помню. Правится так: в коде команды "hostbanlist"
Код
sNames = sNames.."\t• "..sHost.."\r\n\t"
убираем \t в самом конце и все дела.
Про причину бана: это делается не очень трудно, в исхдном виде таблица имеет вид tHostBans["имя_хоста"] = 1, тут если мы заменим единицу причиной бана, получится то что тебе надо, вывод причины будет тоже простой:
Код
sMsg = "Причина бана: "..tHostBans[sHost]
Но везде где стоит условие
if tHostBans[sHost] == 1 надо заменить на просто
if tHostBans[sHost]Попробуй пока сам, спрашивай если что не так...
А вообще, скрипт планировался как тихий бан, чтобы юзер не знал что его поразило, никаких сообщений быть не должно, но права делать под себя у вас никто не отменял, наоборот, очень хорошо когда скрипт выкладывают под своими редакциями.
Автор: district 3.11.2008, 20:26
Цитата
скрипт планировался как тихий бан
это понятно, вид бана как раз указывать совсем ни к чему))
однако, даже если скрипт стоит первым в списке, сообщение "Этот хаб работает под управлением PtokaX ... и тд" все равно успевает проскочить при попытке коннекта. По крайней мере, у меня так.(Может, есть способ отключить это сообщение?)
Все чего пока добился - немного изменена идеология оповещений: прикладные оповещения оставлены curUser'у, а оповещения о бане по хосту, о никхостбане и о анбане переделаны на "SendToOps".
Например: Пользователь <ник> [**.**.**.**] с хостом ****-********.**.ru забанен! Забанил: <профиль> <ник>.
Ну и со сдвигом в таблице разобрался.
А с записью доп. данных пока ступор. Записывать-то нужно еще и ник, если уж причину бана сохраняем.:-)))
К тому же, вылезла еще одна, более насущная проблема. Скрипт иногда приходится отключать, по крайней мере на время отладки новых фич, и пока он выключен, на хаб пробираются забаненные вредители.
Нужна дополнительная функция проверки юзеров на хабе на забаненность, вызываемая при старте скрипта. Подобным образом действует скрипт "Один айпи- один клиент" (прикрепляю на всякий случай), сразу же вышвыривает с хаба. Но у меня по образу и подобию соорудить функцию с наскока не получилось. Нужен совет.
Автор: Setuper 3.11.2008, 21:21
Для того, чтобы не появлялось сообщение "Этот хаб работает...", нужно все функции бана писать в функции ValidateNickArrival, однако, хоть эта функция и рассчитана на то, что все клиенты её поддерживают (в противном случае нет возможности проверить ник до коннекта), но на практике некоторые клиенты игнорируют команды этой функции, поэтому предлагается делать дублирование в функции UserConnected, что с точки зрения оптимизации не очень хорошо.
По поводу отключения скрипта хочу заметить, что хороший админ всегда тестирует скрипты на экспериментальном хабе, а потом уже устанавливает их на основной!
Автор: district 4.11.2008, 8:58
2 setuper
Цитата
нужно все функции бана писать в функции ValidateNickArrival, ...
за пояснения спасибо, на будущее пригодится. Однако, танцевать будем от того, что имеем в наличии.
Дополнено.
Пытался пристроить функцию проверки на забаненность при старте скрипта.
Для начала соорудил вот такой тестовый скриптик:
Код
Bot = frmHub:GetHubBotName()
tDeniedIP = {
["80.64.95.38"] = 1,
["172.23.154.91"] = 1,
}
function Main()
local tUsers = frmHub:GetOnlineUsers() or {}
for i, v in pairs(tUsers) do
UserIPArrival(v)
end
end
function UserIPArrival(curUser)
local tUsers = frmHub:GetOnlineUsers() or {}
if tDeniedIP[curUser.sIP]==1 then
curUser:SendData(Bot, "*** Есть контакт!")
else
return 1
end
end
Т.е таблицу забаненных хостов заменил таблицей айпи и внес непосредственно в тело скрипта. В таком виде скрипт работает, юзер с оговоренным в таблице айпи при старте скрипта получает сообщение "Есть контакт!".
Потом попытался перенести это дело в Hostbans . Если записывать приведенную функцию Main как OnStartUp, то вообще никакой реакции. А вот при попытке дописать строки к родной функции Main, Птока при старте скрипта безнадежно виснет.
Код
function OnStartUp()
local tUsers = frmHub:GetOnlineUsers() or {}
for i, v in pairs(tUsers) do
UserIPArrival(v)
end
end
function UserIPArrival(curUser)
local tUsers = frmHub:GetOnlineUsers() or {}
local sHost = tohostname(curUser.sIP)
if tHostBans[sHost] == 1 and tCanBeBanned[curUser.iProfile] == 1 then
curUser:SendData(Bot, "*** Есть контакт!")
else
return 1
end
end
Я правильно понимаю, что скрипт при старте пытается получить IP , а затем и узнать DNS всех онлайн юзеров сразу и при этом проявляются те самые "тормоза"? И какой тут может быть выход?
Может, организовать таймер и искусственно затянуть запуск скрипта?
Автор: STAJIKER 8.11.2008, 0:05
Эх..классный скрипт всё работает, но вот только в нашей сети DNS постоянно изменяется так что низя у нас забанить навесгда
Автор: Delion 9.11.2008, 23:26
На мой вопрос выше кто ответит?
Автор: Infernus-pro 10.11.2008, 17:25
Есть у кого рабочий, протестированный данный скрипт на API 2? Если да выложите пожалуйста.
Автор: LeoSP 15.11.2008, 3:23
Выложите рабочий скрипт под API 2
Автор: Wariner 18.11.2008, 22:27
А чем вас не устроил скрипт который дал Nickolya. Тестил его на 0400 всё успешно!
Цитата
[22:21:45] <Аспирант> *** Имя компьютера пользователя SONY [10.2.100.240] : www.10.2.100.240
[22:22:29] <Аспирант> *** Пользователь SONY [10.2.100.240] с хостом www.10.2.100.240 забанен!
Цитата
[22:22:29] *** Соединение закрыто
[22:22:59] *** Соединение с 10.2.100.240:6666...
[22:22:59] *** Соединён.
[22:22:59] *** Соединение закрыто
PS:правда я не знаю как этот хост должен выглядеть....
Автор: mariner 18.11.2008, 23:58
зы немного не понял - он по имени компа банить или как?
Автор: Sephiroth_Lukaw 19.11.2008, 0:04
Цитата(mariner @ 19.11.2008, 2:58)
зы немного не понял - он по имени компа банить или как?
www.10.2.100.240 - забанился. Где тут имя компа-(?
upd. В общем, банит вроде бы по тому, что в GreyLink в поле - "DNS"
Автор: mariner 19.11.2008, 7:05
просто вот подумалось, что можно было бы банить по имень самбовому ;) кто не знает, что такое самба - идет лесом
Автор: LeoSP 19.11.2008, 19:25
Цитата(Wariner @ 18.11.2008, 22:27)
А чем вас не устроил скрипт который дал Nickolya. Тестил его на 0400 всё успешно!
PS:правда я не знаю как этот хост должен выглядеть....
ибо вот что [19:24] Синтаксис J:\hub\scripts\HostBan___API2___.lua:175: attempt to call global 'tohostname' (a nil value)
Ps. test na 0.4.1.1
Автор: Wariner 19.11.2008, 21:30
Качай http://mydc.ru/ipb.html?act=attach&type=post&id=74 и клади их в папку libs
Автор: lezvik 9.1.2009, 18:53
кароче какойто глюк, я забанил по днс, и перед тем как забанить увидел инфо о хосте! дело было сделано, чел был забанен, но чтото пошло не так, и этот юзер по новой зашел когда я захотел узнать какой же теперь у него хост, то в ответ скрипт пишет "в логах не значитса имя компа юзера! и все этот щегол засрал всех и вся, пришлося вырубить хаб!
как решать эту траблу ааа?
нужен скрипт под api 1
Автор: Setuper 9.1.2009, 19:08
Дело в том, что в большинстве случаев хост не определяется, поэтому данный вид бана не 100%, я бы даже сказал, что он бесполезный
Автор: lezvik 9.1.2009, 19:11
Цитата(Setuper @ 9.1.2009, 20:08)
Дело в том, что в большинстве случаев хост не определяется, поэтому данный вид бана не 100%, я бы даже сказал, что он бесполезный
тогда что может заменить в этом случае птоку?
Автор: Wariner 9.1.2009, 19:37
а причём вообще здесь птока?! Это проблема не хаба а протокола...
Автор: Setuper 9.1.2009, 20:18
и протокола тоже, но скорее это проблема однозначной идентификации компьютеров в сети.
Автор: lezvik 9.1.2009, 23:58
Цитата(Wariner @ 9.1.2009, 20:37)
а причём вообще здесь птока?! Это проблема не хаба а протокола...
и что теперь сухари сушить?
Автор: -=Иван=- 10.4.2009, 20:04
Может кто выдрать бан днс из левифана там не плохо сделано
Автор: OtshelnikFm 11.4.2009, 13:18
И по какому принципу там реализовано это? Скорее там не по днс бан...
Автор: Delion 28.5.2009, 22:22
Цитата
Список забаненых хостов
Хе. Последний в списке из нашей локалки. Если DNS-имя завязано на IP,толку от такого бана ровно столько же,сколько и от IPшного.
Автор: Артём 4.4.2010, 23:38
Цитата(Nickolya @ 17.10.2008, 22:30)
Можем, я вот попробовал, пробуй что вышло.
у меня вопрос, а конфликтов не может быть, ну к примеру забанил одного, а с ним ещё пару человек попадёт в бан?
Автор: Nickolya 5.4.2010, 8:26
Почему бы и нет. Если все юзеры выходят в сеть с одного айпи, у них по-моему и одно днс имя, так что под бан попасть могут и те кого не наказывал.
Автор: thehawk 12.4.2010, 23:06
А вообще если бан не по ДНС, а по Маку. Реально реализовать скрипт ?
Автор: Артём 12.4.2010, 23:26
Нет