Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Traffic shaper and counter - помогите pls!  (Прочитано 14151 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vnechiporenko
Гость
« : 20-03-2005 13:59 » 

Hello, All!

У меня такая проблемма необходимо написать свой traffic shaper/counter (именно свой) для шлюза в инет. Для выхода в интернет может быть использован как LAN Adapter1, так и модем, на выходном интерфейсе настроен NAT. К локальной сети шлюз подсоединен через LAN Adapter2. Трафик надо считать для каждого MACа локальной, а так же для каждого процесса самого шлюза. В ходе своих рассуждений как все это сделать я зашел в тупик - много не ясного и слишком уж сложная схема получилась.

Вот ети рассуждения, помоги мне развеять "неясности":

Для начала мне кажется надо составить схему прохождения пакетов, я попытался это сделать:

1) Прохождение пакетов от хоста локалки до хоста в инете через шлюз.
   Хост источник отправляет пакет в локальную сеть: srcMAC = свой, dstMAC = шлюз, srcIP = свой, dstIP = хост в инете.
   NIC (LAN Adapter2) принимает пакет -> Miniport NIC -> Protoc Driver IP. Драйвер ищет запись в таблице маршрутизации и перенаправляет пакет интерфейсу выхода в инет.
   Вот далее мне не совсем ясно на каком уровне работает NAT. Т.е. где в иерархии NDIS Protocol Driver | NDIS IM Driver | NDIS Miniport Driver эта NAT рассполагается для LAN Adapterа и модема.
   Помимо NAT еще должно выполняться фрагментирование пакета, если MTU внешнего интерфейса меньше. Это по идеи делает NDIS Protocol Driver. Важно помоему то что на уровне протокола пакет может быть отброшен.
   Так же не ясно выполняется ли NAT до фрагментации или после.
   Но тем не мение пакеты проходят через NAT, и если это ICMP, UDP или TCP пакеты, то они дальше пропускаются
   с маскарадингом, все остальные пакеты отбрасываются.
   И если все правильно получается, то вся маршрутизация реализуется в NDIS драйверах и WinSock тут не участвует вовсе???

2) Прохождение пакета от процесса на шлюзе до хоста в инете.
   Процесс регистрируется в Winsock.
   Далее создает сокет с указанием типа и параметров протокола и отправляет через этот сокет пакет.
   Winsock как-то через TDI передает пакет драйверу протокола.
   Драйвер протокола лезет в таблицу маршрутизации и далее все как и первом случае.
   Так же NAT получается выполняет и для пакетов отправленых непосредственно со шлюза???

Т.е. грубо получается вот такая картинка:
Код:
Application
     |
WinSock
     |
   TDI
     |
(NDIS TCP/IP Protocol driver) <-- маршрутизация, фрагментация, NAT
   |                    |
(Miniport driver)  (Miniport driver)
   |                   |
(NIC 1)            (NIC 2 / Modem)
   |                   |
{Local Network}      (MUX)
                       |
                   (NIC провайдера)

Что бы считать трафик я так понимаю должен встрянуть между всеми (Protocol drivers) и (Miniport driver) для (NIC 2 / Modem), так как пакет может быть отброшен драйвером протокола. Возникает две проблемы:
- как "встрять" между всеми протоколами и (Miniport driver). Говорят IM драйвер в случае модема не подойдет.
- допустим встряли (написали IM driver для LAN адаптера). Как теперь определить пренадлежит ли этот пакет
  тракту маршрутизации и если да то для какого хоста или он принадлежит тракту посылки пакета из процесса и
  если да то какому PID (У меня стоит ZoneAlarm и он как-то определяет от какого процесса идет пакет, но КАК?).
  А насчет тракта NAT вообще не ясно как сделать, может NDIS позволяет как-нибудь помечать пакеты или может
  есть какой нить доступ к таблицам NATа?

Shaper: что бы эффективно управлять трафиком (shaper) помоему надо встрять до (NDIS TCP/IP Protocol driver) и до NAT и судя по схеме надо встять в двух местах: между (Miniport driver) и драйверами протоколов И где нить между процессом
и драйверами протоколов. Первое вроде реализуемо через IM драйвер, а что второе реализуемо доказвывает опять же
существование ZoneAlarm, но как он это делает?Не понял

Может кто-нить писал такие программы или видел исходные тексты, или знает как пишутся такие проги - поделитесь pls. Если мне удастся таки написать такую группу драйверов обязательно выложу исходники.

Короче помогите pls.  Жаль
Записан
vnechiporenko
Гость
« Ответ #1 : 20-03-2005 19:28 » 

!!! Ура, первый успех есть. Ну как и все ищущие по этой теме меня привело на www.ndis.com. Жадно и быстро читаешь "Windows Network Data and Packet Filtering", доходишь до пункта "NDIS-Hooking Filter Driver" и думаешь вот она ПАНАЦЕЯ!!. Идешь на link и 'NDIS-Hooking Samples' - US$795.00   Здесь была моя ладья... Ну порыв в уже конкретно направлении можно найти: "Doxygen NDIS hooking driver" free & open source & full documentation !!! (рыть отсюда http://ntdev.h1.ru/ndis_fw.html). Там кстати кажись есть TDI filtering, что может поможет вести контроль per-process. Ну незнаю насколько это юзабельно, но главное есть сорцы! И ваще OpenSource rulez.
Но с NAT я так пока и не разобрался где и на каком уровне её "окучивать", что бы считать хостам локалки только тот трафик который реально вышел на выходе внешнего интерфейса??? Я посмотрел многие кто пишут такие проги которой я задался, реализуют свой NAT (наверно не от хорошей жизни), но неужели это необходимо может всетаки мона как-то метить пакеты похитрому Ага
« Последнее редактирование: 20-12-2007 19:46 от Алексей1153++ » Записан
Spider84
Гость
« Ответ #2 : 26-10-2005 11:00 » 

подозреваю что ip-tables от Linux тебе сильно помогут. и OpenSRC и всё щто хош.
Записан
Kife
Помогающий

by
Offline Offline

« Ответ #3 : 04-11-2005 12:44 » 

NDIS Hooking-Filter, на сколько я помню, самый простой в семействе NDIS. Реализуется 1-й функцией. Но. ИМХО, с помощью него ты НЕ сможешь определить (если конечно это тебе надо) с какого/на какой интерфейс идет пакет. К томуже ИМХО (опять же если надо) не сможешь модифицировать пакет.
Я не знаю, что такое "Shaper" , т.е. что должна реализовывать эта ф-ия, но я бы посоветовал использовать IM драйвер. -- панацея ото всех бед.
К тому же IM уж точно находится ниже NATa.
Если будут вопросы по IM, пиши в личку или сюда.
Записан

_______
Да поможет нам F1,  и да сохранит нас F2 ...
Kife
Помогающий

by
Offline Offline

« Ответ #4 : 04-11-2005 12:48 » 

сорри, я кажись Filter-Hook  перепутал с Hooking-Filter
Записан

_______
Да поможет нам F1,  и да сохранит нас F2 ...
Kife
Помогающий

by
Offline Offline

« Ответ #5 : 04-11-2005 12:49 » 

я вообже на IM драйвере реализовал сбор фрагментов IP пакета.
Записан

_______
Да поможет нам F1,  и да сохранит нас F2 ...
Spider84
Гость
« Ответ #6 : 04-11-2005 13:20 » 

Я не знаю, что такое "Shaper" , т.е. что должна реализовывать эта ф-ия
Ограничение пропускной способности.
Записан
Megabotan
Участник

ru
Offline Offline

« Ответ #7 : 13-06-2011 14:40 » 

Ну порыв в уже конкретно направлении можно найти: "Doxygen NDIS hooking driver" free & open source & full documentation !!! (рыть отсюда http://ntdev.h1.ru/ndis_fw.html). Там кстати кажись есть TDI filtering, что может поможет вести контроль per-process. Ну незнаю насколько это юзабельно, но главное есть сорцы! И ваще OpenSource rulez.

С помощью какой программы можно открыть и скомпилировать исходный код проекта?
С помощью Visual Studio не получается...

Добавлено через 2 часа, 24 минуты и 39 секунд:
Скачал WDK. В процессе компиляции ошибки. Как это понимать??
« Последнее редактирование: 13-06-2011 17:04 от Megabotan » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 13-06-2011 17:39 » 

 понимать буквально.

PS какой вопрос - такой ответ Ага
или вы хотите чтобы все кинулись скачивать чей то проект и править за вас его настройки?)

Добавлено через 4 минуты и 52 секунды:
собирать build`ом
« Последнее редактирование: 13-06-2011 17:44 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines