Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.045 c
2-1164620730
alex810
2006-11-27 12:45
2006.12.17
DBChart


8-1146831015
Fly
2006-05-05 16:10
2006.12.17
Нужно переконвертировать файл Excel в DBF


15-1163315217
SergP
2006-11-12 10:06
2006.12.17
ICQ-сервер. Где взять?


2-1164722156
Tru
2006-11-28 16:55
2006.12.17
Запрос в SQL


15-1164532855
ArtemESC
2006-11-26 12:20
2006.12.17
Государственный форум...