Текущий архив: 2006.12.17;
Скачать: CL | DM;
Внизограничение траффика Найти похожие ветки
← →
Warstone © (2006-07-20 15:11) [0]Задача:
Ограничить входящий(в последствии и исходящий) траффик на машине, так чтобы пользователь, сидящий за ней кроме как по скорости немог определить ограничение. При этом в силу конфигурации сети (ADSL-Ethernet модем - Switch - машины(одна из которых - рассматриваемая)), не получится поставить прокси или что-то подобное.
Из того что сделал:
Я пошел путём хукования :) (от слово-то какое). Перехватываю функцию recv. На данный момент тренируюсь на отдельном приложении (Download Master если кому-то интересно). Действительно, скорость ограничевается (пока как константа до 5К бит/сек), но при этом загрузка ЦП возрастает с 0.5% до 70-75%, что недопустимо (так как можно понять, что ограничение стоит). Попытка перехватить select никчему не привела (ИМХО DM её не вызывает).
Внимание, вопрос: Что я делаю не так :) Или, покажите/дайте ссылку на работающий пример. Не обязательно Delphi, но желательно (не хочу потом переводить на другой язык).
Спасибо за внимание.
ЗЫ: Просьба писать по существу. Вопрос стоит ребром. Я из-за той машины в Контру поиграть не могу, а там или по нету лазиют, либо E-Mule стоит.
Если нужны исходники того, что уже сделал - скажите - выложу.
← →
Лапыч © (2006-07-20 15:22) [1]Давайте совершенствовать профессиональный жаргон: слова "трафик" (traffic) и "буфер" (buffer) пишутся с одной буквой "ф".
← →
Warstone © (2006-07-20 19:18) [2]Просил-же! Кроме как брякнуть - ничего не можите? Знаю я откуда эти слова пошли, но в целях скорости написания текста 2-ю "ф" не писал. Кто-нить может что-нибудь посоветовать?
← →
Virgo_Style © (2006-07-21 10:58) [3]Предпоследняя строка наводит на мысль о "западлостроительстве" (с).
← →
Ketmar © (2006-07-21 11:43) [4]как-то не так делаете паузу? без кода сказать сложно...
← →
Warstone © (2006-07-21 17:59) [5]Я её вообще не делаю...
Код:
function TrueRecv(s: TSocket; var Buf; len, flags: Integer): Integer;
begin
WriteProcessMemory(CurrProc,AdrRecv,@OldRcv,SizeOf(OldCode),Writen);
Result:=Recv(s,Buf,len,flags);
WriteProcessMemory(CurrProc,AdrRecv,@JmpRecv,SizeOf(far_jmp),Writen);
end;
function NewRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
buflen:integer;
first:boolean;
i:integer;
Tick:Cardinal;
begin
Tick:=GetTickCount;
buflen:=Floor((Tick-LastTime)*5);
if buflen>len then buflen:=len;
LastTime:=Tick;
Result:=TrueRecv(s,Buf,buflen,flags);
end;
Атакуемая программа ограничевается в скорости (5 кб), но при этом загрузка процессора возрастает до 75%
← →
Ketmar © (2006-07-21 21:09) [6]ой. не надо так API перехватывать -- это во-первых. багов наловите.
во-вторых: а что будет, если buflen станет нулём? правильно, обрыв соединения будет.
вердикт: сначала переписать перехват. потом будем думать дальше. %-)
← →
Warstone © (2006-07-21 23:10) [7]А как? Раскажите как перехватить recv? И ещё пару процедур винсокса?
Ага... тока если buflen =0 то всё ок...(закачка продолжается дальше и процесска переконнекта не происходит) Хотя... может в этом и есть закорючка...
Вердикт: А вместо критики можно было конструктивные предложения выдвигать... или ссылки на них давать. ИМХО сюда не за критикой ходят... хотя немного здоровой - не помешает, но вместе с конструктивными предложениями.
← →
Ketmar © (2006-07-22 00:03) [8]"что, опять?" (ц)
опять патологическое неумение вопрошающего пользоваться поиском во всяких местах ставится в вину отвечающему? знаете -- надоело. обвиняйте в следующий раз кого-нибудь другого, не меня. пусть этот другой вам подсказки даёт.
← →
Anatoly Podgoretsky © (2006-07-23 13:45) [9]Прокси всегда поставить можно.
А вопрос действительно в лучшем случае пахнет западло строительством или хуже.
← →
Warstone © (2006-07-23 20:59) [10]И что? Прокси поставить не удастя так как в сети 3 машины и ни одного сервера. (Эл. энергия будет дороже). Поском пользовался, ничего не нашел... пропахал ~10 страниц в этой ветки - нет ничего. Так что... А критика... я кстати от вас ничего путного ещё не слышал (to Ketmar). Прокси по причинам, описанным выше - не олучается поставить. А западлостроительноство... наверно, но в отличие от мелких падлостроителей у меня есть работающий код. Мне не нравиться что он жрёт 75% проца. И только это. Хотя нормальный вариант (просто вызов ориг. функции) не жлет ничего... или так мало, что не регистрируется. Я понимаю что тут есть некоторые старожилы... Тока то что они тут довольно давно ещё не даёт им право отклоняться от сути конференции... Или я не туда пришел? Надо было куда-то в другое место? На RSDN был... к сожалению там улов ещё меньше... Видно нету народа который это делал... Придется мастерить драйвер.
← →
Anatoly Podgoretsky © (2006-07-23 22:32) [11]Для прокси не требуется выделеный сервер, в качестве прокси может выступать любая машина, обычное дело для малых сетей.
← →
Медведъ (2006-07-24 09:34) [12]не удивительно что возрастает CPU usage, в перехватчике нужно анализировать скорость и на основне статистики делать sleep
а в твоем способе при хорошей скорости происходит очень большое колво холостых вызовов
← →
Warstone © (2006-07-24 10:24) [13]Медведь... Пасибо прям балзам на душу... тока при Sleep(3) DM вподает в ступор и не выходит оттуда. А по поводу прокси сервера... Машина должна быть запущена всегда, верно?(Чтоб можно было лазить всегда) Вот поэтому и не получится...
← →
Ketmar © (2006-07-24 21:21) [14]>Warstone © (23.07.06 20:59) [10]
ой-вэй. "и пришёл бука". и стал рассказывать, на что у кого-то есть права, а на что -- нет. значок модератора не предъявите?
если мои хинты не помогают -- это печально. готовый код я даю очень редко, а вот направление, в котором копать -- часто. если копалка не работает/на ремонте -- проблема никак не моя.
Страницы: 1 вся ветка
Текущий архив: 2006.12.17;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.043 c