Отправка сообщений в диапазон IP |
Здравствуйте, гость ( Вход | Регистрация )
Отправка сообщений в диапазон IP |
10.4.2010, 21:03
Сообщение
#1
|
|
Активный участник Группа: Пользователи Сообщений: 65 Регистрация: 23.9.2009 Пользователь №: 4 532 Спасибо сказали: 1 раз |
Что надо сделать, чтобы скрипт отсылал сообщения только определённному IP диапазону?
Конкретнее, нужно в скриптах FeedLogon и FeedWatch сделать так, чтобы сообщения приходили только юзерам с локальным адресом, а тем, кто заходит с внешним IPом сообщения не приходили (так как это новости локального ресурса). |
|
|
10.4.2010, 23:20
Сообщение
#2
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
Зачем третий раз один и тот же вопрос писать?
|
|
|
11.4.2010, 7:16
Сообщение
#3
|
|
Активный участник Группа: Пользователи Сообщений: 65 Регистрация: 23.9.2009 Пользователь №: 4 532 Спасибо сказали: 1 раз |
|
|
|
11.4.2010, 7:44
Сообщение
#4
|
|
Наруто на аваторке Группа: Пользователи Сообщений: 2 606 Регистрация: 11.10.2008 Из: Харькова Пользователь №: 771 Спасибо сказали: 774 раза |
|
|
|
11.4.2010, 9:48
Сообщение
#5
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Да и вообще, как это делается в скриптах? Создаем таблицу с диапазонами: Код tLocal = { {"10.0.0.0","10.255.255.255",}, {"172.16.0.0","172.31.255.255"}, {"192.168.0.0","192.168.255.255"}, } При запуске скрипта преобразовываем адреса в числовой формат: Код function OnStartup() for i in ipairs(tLocal) do tLocal[i][1] = tLocal[i][1]:iptonumber() tLocal[i][2] = tLocal[i][2]:iptonumber() end end Ну а дальше остается проверить принадлежность IP-адреса к одному из диапазонов: Код for _,range in ipairs(tLocal) do if range[1] <= ip and ip <= range[2] then -- Здесь выполняются действия, необходимые только для указанных диапазонов break 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 |
|
|
11.4.2010, 14:14
Сообщение
#6
|
|
Активный участник Группа: Пользователи Сообщений: 65 Регистрация: 23.9.2009 Пользователь №: 4 532 Спасибо сказали: 1 раз |
alex82 покажи пожалуйста на примере одного из этих скриптов, как это сделать, а то у меня ничего не получается.
|
|
|
11.4.2010, 18:42
Сообщение
#7
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
http://mydc.ru/topic3167.html
http://mydc.ru/topic2816.html PS. Совсем забыл - проверяемый айпи тоже нужно перевести в числовой формат Код local ip = user.sIP:iptonumber()
for _,range in ipairs(tLocal) do if range[1] <= ip and ip <= range[2] then -- Здесь выполняются действия, необходимые только для указанных диапазонов break end end |
|
|
11.4.2010, 22:13
Сообщение
#8
|
|
Активный участник Группа: Пользователи Сообщений: 65 Регистрация: 23.9.2009 Пользователь №: 4 532 Спасибо сказали: 1 раз |
что-то я подзапутался .
ошибка: - \scripts\RSSFeed.lua:136: attempt to index global 'user' (a nil value) вот кусок" - Раскрывающийся текст if next(New) then local reply,cnt = "",0 for key,val in ipairs(New) do local bool = true for i,v in ipairs(Old) do if v[2] == val[2] then bool = false break end end if bool then cnt = cnt + 1 for i,v in ipairs(val) do reply = reply..v.."\n" end reply = reply.."------------------------------------------------------------------------------------------------------------------------------------\n" end end if reply:len() > 0 then local plural = "" if cnt > 1 then plural = "" end Old = New SaveFile(File,Old,"Old") local s = tostring(cnt).." новых цитат"..plural.." с: "..Feed.."\n\n"..reply.."\n\n" s = s:gsub("|", "&#".."124;") local ip = user.sIP:iptonumber() -- вот 136 строка for _,range in ipairs(tLocal) do if range[1] <= ip and ip <= range[2] then if DoMotd and Motd ~= "" then SetMan.SetMOTD(Motd.."\n\n\t"..s) end return s end end end end end GetFeed = function() local st = socket.gettime() local s,fd,sz,hd = "",http.request(Feed) if fd and sz then local td,plural = socket.gettime()-st,"секунды." if td > 1 then plural = "секунд." end local time = string.format("%.2f "..plural,td) local msg = ParseFeed(Decode(fd)) local Send = function(str) local ip = user.sIP:iptonumber() -- 158 строка for _,range in ipairs(tLocal) do if range[1] <= ip and ip <= range[2] then if OnlyPm then Core.SendPmToAll(FeedNick,str.."|") else Core.SendToAll("<"..FeedNick.."> "..str.."|") end break end end end if msg and msg:len() > 0 then Send(msg.."\t\t\tОбработано за: "..time.."\n\n") end Mem() end end а в 158 строке до этого не выдавал ошибки, хотя я там тоже самое сделал. |
|
|
12.4.2010, 10:50
Сообщение
#9
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
SAG
То, что ты выложил, невозможно читать. Для кода используй тег [code], или прикрепи весь скрипт. |
|
|
12.4.2010, 16:18
Сообщение
#10
|
|
Активный участник Группа: Пользователи Сообщений: 65 Регистрация: 23.9.2009 Пользователь №: 4 532 Спасибо сказали: 1 раз |
Вот рабочий мой скрипт -
Newssety.lua ( 7.37 килобайт ) Кол-во скачиваний: 5 а вот что я начудил - Newssety1.lua ( 8.34 килобайт ) Кол-во скачиваний: 6 |
|
|
12.4.2010, 19:29
Сообщение
#11
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
Угу, начудил...
Зачем было пихать проверку диапазона в функцию обработки rss? В ней нету таблицы user, да и результат работы она засовывает в сообщение дня птоки. А оно глобальное, т.е одинаковое для всех, вне зависимости от диапазона. Как я понимаю, ты хочешь отправлять данные, полученные из rss-потока, юзерам из локалки при входе? Если да, то так делать нельзя: Код local ip = user.sIP:iptonumber() for _,range in ipairs(tLocal) do if range[1] <= ip and ip <= range[2] then if DoMotd and Motd ~= "" then SetMan.SetMOTD(Motd.."\n\n\t"..s) end Почему нельзя - написано одним абзацем выше. |
|
|
12.4.2010, 20:18
Сообщение
#12
|
|
Активный участник Группа: Пользователи Сообщений: 65 Регистрация: 23.9.2009 Пользователь №: 4 532 Спасибо сказали: 1 раз |
вот этот -
FeedLogon.lua ( 12.37 килобайт ) Кол-во скачиваний: 7 ошибок не выдает, но ... ... и не фильтрует, сообщения идут и в локалку и во внешку . |
|
|
15.4.2010, 16:05
Сообщение
#13
|
|
Активный участник Группа: Пользователи Сообщений: 65 Регистрация: 23.9.2009 Пользователь №: 4 532 Спасибо сказали: 1 раз |
Теперь скрипт, благодаря alex82, работает, как надо!
Отсылает сообщения определённому диапазону IP (указанному в tLocal), и может по времени отправлять сообщения (надо только раскомментировать строки с 248 по 257). Вот работающий скрипт - FeedLogon.lua ( 12.23 килобайт ) Кол-во скачиваний: 12 |
|
|
Похожие темы
|
Сейчас: 23.11.2024, 15:15 |