Скрипт бана по mac адресу

Разработка и поиск скриптов, обсуждение PtokaX.
Ответить
Аватара пользователя
c0cain
Сообщения: 12
Зарегистрирован: 23 авг 2011, 11:51

Скрипт бана по mac адресу

Сообщение c0cain »

Интересен ли вам такой скрипт под lua? Стоит ли его писать учитывая проблему с маршрутизаторами?))))
Последний раз редактировалось c0cain 23 авг 2011, 12:29, всего редактировалось 1 раз.
сфызук

Сообщение сфызук »

эту тему здесь уже поднимали , вот скажи как скрипт будет видить мак ??? допустим хекс-хаб видит еще это как то (кто то где то писал , непомню уж давно это было ) а остальной хабсофт ????
Аватара пользователя
c0cain
Сообщения: 12
Зарегистрирован: 23 авг 2011, 11:51

Сообщение c0cain »

casper, а почему не подключение стороннего dll?)
Последний раз редактировалось c0cain 23 авг 2011, 12:40, всего редактировалось 2 раза.
сфызук

Сообщение сфызук »

ну если хочешь попробовать намутить такую штуку ,да еще и работающию , то для теста я тебе придоставлю пару тройку хабов , но я пока весь в сомнениях т.к. все это давно уж перемывалось..
Аватара пользователя
c0cain
Сообщения: 12
Зарегистрирован: 23 авг 2011, 11:51

Сообщение c0cain »

я думаю написать часть по выдёргиванию mac на c++ or delphi и засунуть её в dll, а подгружать dll`ку уже из луа и слать необходимые инструкции... правд не знаю пока как это скажется на загрузке проца...

Но повторюсь что есть проблема в маршутизаторах и одном mac`е на нескольких пользователей :-( Т.е. это может быть не совсем актуально...
сфызук

Сообщение сфызук »

вопрос на скоко ты своим скриптом канал просадишь при всех запросах ??? а есть провы у которых нет привязке к маку (например Пчелайн)....
Аватара пользователя
c0cain
Сообщения: 12
Зарегистрирован: 23 авг 2011, 11:51

Сообщение c0cain »

Насчёт канала, можно не марочится а работать в режиме фильтрации и чтения пакетов (как вариант)... Оттуда драть инфу... Может даже составлять таблицу с ником, ip, mac`ом....
сфызук

Сообщение сфызук »

о ,да , забыл тех кто сидит за роутерами и всей остальной шляпой ,хотя тут разници нет , что ты мак забанишь что ты ип забанишь ,хотя щас уж можно не банить а глушить чат и лс ..... это более интересный вариант ))))
c0cain писал(а):Может даже составлять таблицу с ником, ip, mac`ом....
у меня даже где то такой скрипт стоял ,который пишит всех юзеров и их ипы ( вот токо где я не помню) надо пошукать :-)
Аватара пользователя
c0cain
Сообщения: 12
Зарегистрирован: 23 авг 2011, 11:51

Сообщение c0cain »

У меня раньше где-то валялся скрипт он вычислял процент, может ли пользователь являться ранее забаненым. Инфу он брал по всем возможным данным и сверял, но процент там не точны совсем) Ну и конечно "оперативно" действует больше на школьников... :-D Я его писал, потом наверное гдето удалил со сменой компа и чисткой инфы)))
Последний раз редактировалось c0cain 23 авг 2011, 12:58, всего редактировалось 1 раз.
сфызук

Сообщение сфызук »

типо такого скрипта
Спойлер

Код: Выделить всё

--[[
	Last IP 1.1 LUA 5.1x [Strict] [API 2]

	By Mutor		05/14/08
	Requested by Annie
	РУССКИЙ by dimetrius 20 июля 2008
	
	-Можно выбрать какие профили смогут пользоваться скриптом и кому будет отсылаться меню
	-Автоматически отсылается меню соответствующим профилям
	-Вы можете сами выбрать сколько последних IP АДРЕСОВ, или ников будет храниться
	-IP лог сохраняется в файл, так что вам не страшны перезапуски хаба\скрипта

	http://board.ptokax.ch/index.php?topic=7863.0
	http://mydc.ru/index.php?showtopic=208
]]

Ips = {
	-- "Имя бота" ["" = имя бота хаба]
	Bot = "",
	--"Название меню" ["" = название хаба
	Menu = "",
	--"Название подменю" ["" = название скрипта]
	SubMenu = "",
	-- Ник админа для разных статусных мессаг
	OpNick = "dimetrius",
	-- Путь, где хранится таблица
	File = Core.GetPtokaXPath().."scripts/LastIps.tbl",
	-- Максимальное колличество логируемых IP адресов для юзера
	MaxLog = 20,
}


OnStartup = function()
	-- Название скрипта, которое будет отображаться в меню и в чате
	Ips.Scp = "Статистика по IP"
	if Ips.Bot == "" then Ips.Bot = SetMan.GetString(21) end
	--Описание бота, если название отличное от бота хаба
	if Ips.Bot ~= SetMan.GetString(21) then Core.RegBot(Ips.Bot,"Я всех вижу","",true) end
	if Ips.Menu == "" then Ips.Menu = SetMan.GetString(0) end
	if Ips.SubMenu == "" then Ips.SubMenu = Ips.Scp end
	if loadfile(Ips.File) then
		dofile(Ips.File)
	else
		Ips.Log = {}
	end
	if not next(Ips.Log) then
		for _,user in ipairs(Core.GetOnlineUsers()) do LogIp(user) end
		Save_File(Ips.File,Ips.Log,"Ips.Log")
	end
	OnError(Ips.Scp.." для ".._VERSION.." был запущен, Памяти хаваем: "..Mem())
end

OnError = function(msg,sb)
	local user = Core.GetUser(Ips.OpNick)
	if msg and user then Core.SendToUser(user,"<"..Ips.Bot.."> "..msg.."|") end
end

OnExit = function()
	OnError(Ips.Scp.." для ".._VERSION.." был остановлен, освободили "..Mem().." памяти.")
end

LogIp = function(user)
	local d,c = os.date()
	if Ips.Log[user.sNick] then
		local x,ip = true,user.sIP
		for i,v in ipairs(Ips.Log[user.sNick]) do
			if v[1] == ip then x = false break end
		end
		if x then
			table.insert(Ips.Log[user.sNick],{ip,d})
			while #Ips.Log[user.sNick] > Ips.MaxLog do table.remove(Ips.Log[user.sNick],1) end
			c = true
		end
	else
		Ips.Log[user.sNick] = {{user.sIP,d}}
		c = true
	end
	if c then Save_File(Ips.File,Ips.Log,"Ips.Log") end
end

UserConnected = function(user)
	LogIp(user)
	local str,stp,uc,m,p = "","","$UserCommand 1 y "..Ips.Menu.."\\"..Ips.SubMenu.."\\","$<%[mynick]> ","&#124;|"
	local pfx = SetMan.GetString(29):sub(1,1)
	for k,v in pairs(Ips.Cmds) do
		if v[2][user.iProfile] then
			local d,a1,a2 = v[1]()
			str = str..uc:gsub("y",1)..d..m..pfx..k..a1..p..uc:gsub("y",2)..d..m..pfx..k..a2..p
		end
	end
	if str:len() > 0 then Core.SendToUser(user,str) end
end
OpConnected,RegConnected = UserConnected,UserConnected

ChatArrival = function(user,data)
	local _,_,cmd = data:find("%b<> ["..SetMan.GetString(29).."](%a+)")
	if cmd and Ips.Cmds[cmd] and Ips.Cmds[cmd][2][user.iProfile] then
		reply = Ips.Cmds[cmd][1](user,data,SetMan.GetString(29):sub(1,1)..cmd)
		if reply then return Core.SendToUser(user,"<"..Ips.Bot.."> "..reply.."|"),true end
	end
end

Mem = function() collectgarbage("collect") return string.format("%-.2f Kb.",collectgarbage("count")) end

Ips.Cmds = {
	iplog = {function(user,data,cmd)
		if user then
			local _,_,nick = data:find("%b<> %p%a+ ([^ |]+)|$")
			if nick then
				local cur = ""
				local usr = Core.GetUser(nick)
				if usr then cur = "   [ Текущий IP: "..usr.sIP.." ]" end
				local r = "="
				local s = "\n\n\tIP адреса, которые использовал "..nick..cur.."\n\n\t"..r:rep(50).."\n"
				if Ips.Log[nick] then
					for i,v in ipairs(Ips.Log[nick]) do
						s = s.."\t("..i..")\t"..v[1].."\t"..v[2].."\n"
					end
					s = s.."\n\t"..r:rep(50).."\n"
				else
					s = "В базе нет данных по IP, которые использовал ник: "..nick
				end
				return s
			else
				return "Ошибка! Вы должны ввести ник. Используйте: "..cmd.." <nick>"
			end
		else
			return "Показать IP, которые использовал юзер"," %[line:Введите ник юзера]"," %[nick]"
		end
	end,
	{[-1] = false,[0] = true,[1] = true,[2] = true,[3] = false,},
	},
	ipnicks = {function(user,data,cmd)
		if user then
			local _,_,ip = data:find("%b<> %p%a+ (%d+%.%d+%.%d+%.%d+)|$")
			if ip then
				local t = {}
				if ValidIp(ip) then
					for idx,val in pairs(Ips.Log) do
						for i,v in ipairs(val) do if v[1] == ip then table.insert(t,idx) end end
					end
				else
					return "Ошибка! "..ip.."... Перечитал? Теперь введи правильно IP адрес. ;-)"
				end
				if next(t) then
					table.sort(t)
					local r = "="
					local s = "\n\n\tНики, под которыми заходили с IP: "..ip.."\n\n\t"..r:rep(50).."\n"
					for i,v in ipairs(t) do s = s.."\t("..i..")\t"..v.."\n" end
					s = s.."\n\t"..r:rep(50).."\n"
					return s
				else
					return "C IP адреса "..ip.." не зафиксирован вход."
				end
			else
				return "Ошибка! ты должен ввести iP адрес. Usage: "..cmd.." <ip>"
			end
		else
			return "Показать юзеров, которые заходили под IP..."," %[line:Введите IP адрес]"," %[ip]"
		end
	end,
	--Какие профили могут просматривать статистику
	{[-1] = false,[0] = true,[1] = true,[2] = true,[3] = false,},
	},
}

ValidIp = function(IP)
	local _,_,a,b,c,d = IP:find("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")
	if a and b and c and d then
		local t = {tonumber(a),tonumber(b),tonumber(c),tonumber(d)}
		for i,v in ipairs(t) do if i == 1 and v == 0 or v > 255 then return false end end
	end
	return true
end

Save_Serialize = function(tTable, sTableName, hFile, sTab)
	sTab = sTab or "";
	hFile:write(sTab..sTableName.." = {\n" )
	for key, value in pairs(tTable) do
		local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key)
		if(type(value) == "table") then
			Save_Serialize(value, sKey, hFile, sTab.."\t")
		else
			local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value)
			hFile:write( sTab.."\t"..sKey.." = "..sValue)
		end
		hFile:write( ",\n")
	end
	hFile:write( sTab.."}")
end

Save_File = function(file,table, tablename )
	local hFile = io.open (file , "wb")
	Save_Serialize(table, tablename, hFile)
	hFile:close()
	Mem()
end
Аватара пользователя
c0cain
Сообщения: 12
Зарегистрирован: 23 авг 2011, 11:51

Сообщение c0cain »

Ну с lua проблем не будет а вот над dll, надо подумать....
сфызук

Сообщение сфызук »

флаг вам в руки :-) :-) :-)
скептик

Сообщение скептик »

Эта ваша сторонняя динамическая библиотека будет эффективнее штатной функции птоки?
сфызук

Сообщение сфызук »

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

Сообщение скептик »

Кексхаб в этом плане ничуть не лучше.
Аватара пользователя
c0cain
Сообщения: 12
Зарегистрирован: 23 авг 2011, 11:51

Сообщение c0cain »

скептик писал(а):Эта ваша сторонняя динамическая библиотека будет эффективнее штатной функции птоки?
Во первых что вы имеете ввиду под штатной? Бана по маку в птахе нету в штатном наборе.
Эффективность? Ну как сказать не во всех случаях эффективная штука.
Сначала интересно просто реализовать данную функцию (может даже просто лог?), а там уже можно будет думать о эффективности :-)

Сейчас вопрос нужно ли это писать для использования в скриптах lua? Или удобнее нам написать программу по типу защитного бота, со снифом и отловом mac`ов из пакетов которые приходят для сервера. *DONT_KNOW*

Не кажется ли вам что бот на пакетном уровне вполне функционалным окажется? Особенно учитывая то, что даже пароли в этих пакетах передаются простым текстом... :-D

Вообщем жду ваших мнений, критики и идей!
Последний раз редактировалось c0cain 26 авг 2011, 00:45, всего редактировалось 1 раз.
скептик

Сообщение скептик »

c0cain писал(а):Во первых что вы имеете ввиду под штатной? Бана по маку в птахе нету в штатном наборе.
r41 | PPK | 2010-12-19 18:40:41 +0300 (Вск, 19 Дек 2010) | 8 lines

Added: Core.GetUserValue(tUser, 27) return user MAC Address when it is possible
casper-house
Сообщения: 21
Зарегистрирован: 13 мар 2011, 01:50
Хаб: dchub://dc-vip.ru
Контактная информация:

Сообщение casper-house »

нереальное реально ,все зависит от опухшего больного мосКа , хорошая тема и думаю топер все таки сделает хоть одну попытку
Ответить