myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему

> Кто К Нам Ломится?, API 1

Теги
Нет тегов для показа
Sephiroth_Lukaw
сообщение 20.11.2008, 11:05
Сообщение #21


Освоившийся участник
*****

Группа: Пользователи
Сообщений: 307
Регистрация: 11.7.2008
Пользователь №: 173
Спасибо сказали: 31 раз




Цитата(district @ 20.11.2008, 13:15) *
while и break
While - Цикл, выполняется до тех пор, пока условие внутри него не равно false;
break - Принудительно останавливает(обрывает) цикл;
Код
while 1 == 1 do
SendToAll("Test 1")
end
- будет выполняться бесконечно т.к. 1 всегда равен 1(т.е. будет выводить Test 1 - до бесконечности)
Код
while 1 == 1 do
SendToAll("Test 1")
break
SendToAll("Test 2")
end
Остановится, после того как встретит "break" т.е. данный код распечатает - "Test 1" 1 раз и больше ничего не сделает, даже не дойдет до распечатки "Test 2". break - Например, может использоваться если мы проходим по таблице в поиске какого-то значения и при его встречи не имеет смысла дальше теребить таблицу, тогда, мы прерываем цикл с его помощью

Цитата(district)
if f then
return Read(f)
f:close()
f:flush()
end
ммм...функция же возвращает значение, тогда же не выполняется -
Цитата(district)
f:close()
f:flush()

и ещё, у меня вопрос, а если написать
Код
if f then
do return Read(f) end
    f:close()
    f:flush()
end
- то последующие операторы выполняются и вообще, допустим ли такой синтаксис? Если да, то, что произойдёт?))).
Go to the top of the page
+Quote Post
district
сообщение 20.11.2008, 12:52
Сообщение #22


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Sephiroth_Lukaw

Ясненько, хорошие примерчики, зенькую бардзо ))

По поводу вчерашних мучений вот с этим:

Код
ValidateNickArrival(user,data)

for i, tPermBan in pairs(frmHub:GetPermBanList()) do
        
        if user.sName == tPermBan.sName then
Sender("Ломится забаненный по нику "..user.sName.." с IP [ "..user.sIP.." ]

...


frmHub:GetPermBanList() возвращает ники ЗАРЕГАННЫХ юзеров

Цитата
Returns an array containing all registered users as PermBan objects.

(если я правильно перевел эту фразу big_smile.gif )

а у меня все забаненные автоматически удаляются из списка регов.
Может, тут "собака порылась" ? Надо еще попробовать.
Go to the top of the page
+Quote Post
Setuper
сообщение 20.11.2008, 13:01
Сообщение #23


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Да! Это моя ошибка при проектировании скрипта, возникла из-за того, что я сначало не делал возврат значения в функции, а в конце написания вдруг сделал. А на самом деле должно быть так:
Код
function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    local a,b=Read(f)
    f:close()
    f:flush()
    return a,b
  end
end


Функцию GetNickForIp тоже подправил:
Код
function GetNickForIp(sIP,sFile)
  local sMsg,tNicks,tIPs="*** Ники, с которых входил пользователь с IP адресом "..sIP,GetNickAndIp(sFile)
  if tIPs and tIPs[sIP] then
    for i,v in pairs(tIPs[sIP]) do
      sMsg=sMsg.."\n\t"..i.." - "..v
    end
  else
    sMsg="*** Пользователь с IP адресом "..sIP.." в базе не найден."
  end
  return sMsg
end
Go to the top of the page
+Quote Post
district
сообщение 20.11.2008, 21:47
Сообщение #24


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Сенкс, роем дальше! big_smile.gif

Но я уже простов восторге, это ж просто песня какая то:

Цитата
[17:23:35] <ConnectionsInspector> *** IP адреса, с которых входил пользователь с ником [hor]userko
93.80.110.160 - 2 раз(а)
78.106.203.73 - 1 раз(а)
78.106.170.114 - 3 раз(а)
78.106.194.170 - 2 раз(а)
93.81.230.134 - 5 раз(а)
78.106.197.255 - 1 раз(а)
93.80.110.31 - 1 раз(а)


:dance:

Setuper
Ну вроде все работает, но осталось две проблемки.

Крайний код GetNickAndIp(hFile) , приведенный тобой - увы, тоже не идет,
Цитата
attempt to use a closed file
. Если никаких подводных камней нет, то, может, оставить так, как я привел выше? Глюков вроде нет, все работает.

А вот вторая "проблемка" посерьезнее. Требуется изменение функции GetNickForIp(sIP,sFile)
Дело вот в чем. (Видимо, я с самого начала несколько не до конца задачу сформулировал, ибо сам не представлял, как именно будет работать скрипт.)

Допустим, мы пробиваем ники по айпи. Если айпи статический, то все прекрасно, скрипт показывает или один ник, если юзер порядочный, или несколько, если юзер "многоликий Янус".
А вот если айпи динамический - то скрипт показывает только те ники, под которыми юзер заходил только с этого конкретного текущего айпи. А он мог заходить еще с пятидесяти айпи, и под другими никами. В таком случае вскрыть его многоликость не удается.

Вот пример.

Цитата
[00:39:42] <ConnectionsInspector> *** Ники, под которыми входил пользователь с IP адресом 78.106.193.201
[sln]Vadim - 1 раз(а) с этого IP

[00:40:02] <ConnectionsInspector> *** IP адреса, с которых входил пользователь с ником [sln]Vadim
93.80.223.24 - 2 раз(а)
93.81.185.195 - 3 раз(а)
93.80.207.15 - 1 раз(а)
93.81.184.77 - 2 раз(а)
93.80.204.133 - 1 раз(а)
93.81.159.168 - 2 раз(а)
93.81.186.103 - 1 раз(а)
93.81.153.71 - 1 раз(а)
93.80.234.47 - 1 раз(а)
93.81.184.134 - 1 раз(а)
78.106.193.201 - 1 раз(а)
95.24.54.46 - 1 раз(а)
93.80.240.107 - 2 раз(а)
93.80.233.3 - 3 раз(а)
95.24.59.143 - 1 раз(а)
93.80.244.196 - 1 раз(а)
93.80.208.174 - 1 раз(а)


Можно тут что-нибудь сделать? big_smile.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 20.11.2008, 21:52
Сообщение #25


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




да ты прав, я что-то не подумал, что если закрыть файл, то поток не передастся в качестве переменной.
Вот правильный код:
Код
function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    local a,b=Read(f)
    f:close()
    f:flush()
    return a,b
  end
end


По поводу второй проблемы ничего сделать нельзя! Подумай сам, как однозначно идентифицировать пользователя? По какому параметру, если ip адрес динамический и ник меняется свободно.

Допустим в сети несколько динамических ip адресов: 10.10.10.1 - 10.10.10.254. Пусть ip адреса арендуются пользователями, допустим на 1 день, и аренда ip адресов происходит по возрастанию последнего числа ip адреса.

Пусть пользователь Вася сегодня арендовал ip адрес 10.10.10.1, а пользователь Петя, тоже сегодня (двумя минутами позже), арендовал ip адрес 10.10.10.2.
Сегодня всё хорошо, но вот допустим завтра аренда ip адресов произошла наоборот (бывший Вася арендовал 10.10.10.2, бывший Петя арендовал 10.10.10.1) и допустим пользователи решили сменить ники (Вася(10.10.10.1) сменил ник на Вову(10.10.10.2), а Петя(10.10.10.2) сменил ник на Александра(10.10.10.1)).

Теперь вопрос: кто под какими никами сидит на хабе? Если мы знаем, последовательность смены ников, но мы можем точно ответить, что мол Вася=Вова, а Петя=Александр. Но если мы не знаем, а мы точно не знаем, так как мы являемся третьей стороной и в смене ников не принимаем участия, то идентифицировать пользователей нельзя: может быть Вася=Александр, так как ip адрес Васи и Александра один и тот же - 10.10.10.1, а может быть Вася=Вова, так как ip адрес сменился.

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

Многие ищат решения проблемы среди всяких DNS имён, MAC адресов, CID номеров, но все эти параметры можно также изменить как и ник, как и ip.

Поэтому идентификация пользователя является глобальной проблемой p2p сетей.
Go to the top of the page
+Quote Post
district
сообщение 21.11.2008, 0:13
Сообщение #26


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Что ж, уже то, что есть - очень хорошее подспорье ))
Чуть попозже со всеми подшаманиваниями и растолковываниями специально для таких админов, которые "а чиво он ни работаед?" выложу его в готовых скриптах, если ты не против, конечно.

Хочу попробовать саму функцию создания лога сюда еще добавить.. и может быть, даты входов как-то добавить.. в общем пока в раздумьях.
Go to the top of the page
+Quote Post
district
сообщение 23.11.2008, 20:52
Сообщение #27


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




В общем добавил я в Инспектор коннектов функцию самой записи лога, теперь полноценная Вещь в себе получилась big_smile.gif
Добавил еще и запись даты, на всякий случай.
----------------------------------------------------------------
Переприкреплен вариант с однократной очисткой памяти после запроса.
(расход памяти потихоньку накапливается в процессе работы, в варианте однократной очистки. Если убрать СтопТаймер, очистка будет идти каждые несколько секунд и расход памяти будет поддерживаться на постоянном уровне)
Прикрепленные файлы
Прикрепленный файл  Connections.Inspector_API1_.by.Setuper.lua ( 3.96 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
+Quote Post
Setuper
сообщение 23.11.2008, 21:10
Сообщение #28


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Почему не работает? Какую ошибку он выдаёт?
Твой код неправильный! Из-за него будет накапливаться неиспользуемая память, из-за того, что ты не закрываешь файл и не очищаешь входной поток.
Go to the top of the page
+Quote Post
district
сообщение 24.11.2008, 13:05
Сообщение #29


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Setuper
Цитата
attempt to use a closed file


а в моем варианте память и правда накапливается. 5 мб - многовато для такого ботика.
Go to the top of the page
+Quote Post
Setuper
сообщение 24.11.2008, 13:34
Сообщение #30


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




опять моя ошибка из-за невнимательности.
Вот этот код работает, я проверил:
Код
function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    local a,b=Read(f)
    f:flush()
    f:close()
    return a,b
  end
end
В чем разница увидел? big_smile.gif
Go to the top of the page
+Quote Post
district
сообщение 24.11.2008, 14:26
Сообщение #31


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Увидел.
Действительно, работает, не вылетает. Но после первого же запроса расход памяти в "Нагрузке памяти скриптами" Птоки показывается как допустим 4600 кб и так и висит.
Сразу по запуске скрипта расход составляет 55-60 кб
В общем, не ощутил разницы с тем, что было.
PS Размер самого лог-файла на текущий момент - 2.48 Мб.
Go to the top of the page
+Quote Post
Setuper
сообщение 24.11.2008, 14:43
Сообщение #32


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




В луа существует автоматический уборщик. Если все файлы закрыты, то со временем ненужный мусор сам очистится.
Go to the top of the page
+Quote Post
district
сообщение 24.11.2008, 20:24
Сообщение #33


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Попробовал один банальный и известный вариант - вроде, работает. После отработки запроса через 3 сек импользуемая память очищается, и становится в пределах 170 кб.

Код
function OnTimer()
collectgarbage("collect")
  end

function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    local a,b=Read(f)
  f:flush()
    f:close()
    SetTimer(3*1000) --добавлено
    StartTimer() -- добавлено
    return a,b
    end
end

а потом падает до того значения, которое было при старте скрипта.
Go to the top of the page
+Quote Post
Setuper
сообщение 24.11.2008, 20:44
Сообщение #34


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Зачем мудрить что-то с таймером? Если хочешь принудительно собрать мусор, делай так:
Код
function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    local a,b=Read(f)
    f:flush()
    f:close()
    collectgarbage("collect")
    return a,b
  end
end
Go to the top of the page
+Quote Post
district
сообщение 24.11.2008, 20:53
Сообщение #35


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




-
Go to the top of the page
+Quote Post
Wariner
сообщение 24.11.2008, 20:57
Сообщение #36


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Может надо так:
Код
function GetNickAndIp(hFile)
  local f=io.open(hFile)
  if f then
    local a,b=Read(f)
    f:flush()
    f:close()
    return a,b
  end
  collectgarbage("collect")
end
Go to the top of the page
+Quote Post
Setuper
сообщение 24.11.2008, 21:03
Сообщение #37


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




2district: ппц... ты фигнёй страдаешь
2Wariner: сам подумай функция возвращает значение и твоя очистка никогда не будет выполняться.

Раз уж на то пошло, то надо очищать в функции ChatArrival, но никак не таймером! Представляете, что вы каждый 3 секунды вызываете функцию очистки, а функция очистки достаточно сильно нагружает процессор))
Go to the top of the page
+Quote Post
district
сообщение 24.11.2008, 21:14
Сообщение #38


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




-
Go to the top of the page
+Quote Post
Setuper
сообщение 24.11.2008, 21:22
Сообщение #39


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




а где ты его останавливаешь в упор не вижу
Go to the top of the page
+Quote Post
district
сообщение 5.12.2008, 9:45
Сообщение #40


Постоялец
******

Группа: Пользователи
Сообщений: 454
Регистрация: 17.10.2008
Из: Новосибирск
Пользователь №: 825
Спасибо сказали: 90 раз




Тот набросок, с которого начался топик, вылился вот во что.
-Убрана функция автосканирования
-Репорты получает только тот, кто непосредственно запускает проверку (ОП)
-В репортах отсутствуют нормально законнектившиеся юзеры, не нарушающие технических правил хаба
-В репортах присутствуют размер шары, слоты и хабы юзера(может, еще что-то можно добавить?), изменен принцип получения информации - теперь на период проверки технические правила хаба по слотам, мин шаре и макс хабам отменяются, по окончании - возвращаются на место. ВНИМАНИЕ! Возвращаемый на место параметр миншары сделан применительно к "Гб", т.е. если на вашем хабе миншара указана в Мб, то потребуются соответствующие изменения кода.
-Добавлена блокировка перехвата процесса проверки другим ОПом.
Смысл проверки: узнать, кто пытается войти, и почему именно не может.
У меня это выглядит примерно так (см.картинку)

Может, кому-нибудь пригодится такой бот.
Прикрепленные файлы
Прикрепленный файл  прокурорская_проверка.PNG ( 18.38 килобайт ) Кол-во скачиваний: 41
Прикрепленный файл  Prokurator._API1_v.1.x.lua ( 4.87 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
+Quote Post

3 страниц V  < 1 2 3 >
Ответить в данную темуНачать новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 3.4.2025, 23:25