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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Подсчёт трафика в Linux  (Прочитано 58814 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dimka
Деятель
Команда клуба

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

« Ответ #30 : 15-01-2010 19:38 » 

Цитата: Rezedent12
Прочитайте внимательнее алгоритм и рассмотрите схему. Пожалуйста.
Rezedent12, алгоритм у тебя, скажем аккуратно, вызывает вопросы - в нём есть логические ошибки. Но я пока алгоритмы не хочу рассматривать, поскольку их построение имеет смысл лишь после учёта всех существенных требований, которые пока не собраны. Здесь LogRus совершенно прав - предварительная оптимизация до добра не доводит.

По схеме, как я понимаю, есть несколько шлюзовых компьютеров под Linux, на которых и будет работать биллинговая система... Это одна общая система, или на каждом шлюзе отдельная система?

Из схемы следует, что ответ на мой вопрос про несколько сетевых интерфейсов положителен - их несколько (точнее 3 основных, остальные, включая localhost, можно игнорировать). Вопрос, каким образом модуль мониторинга трафика узнает, какие интерфейсы являются основными, за какими ему следить? Должно быть продумано решение этого вопроса (и от знания Linux этот вопрос никак не зависит - он платформонезависимый).

Вопрос о количестве экземпляров программы подсчёта и оценки трафика, подключаемых к одному демону мониторинга трафика, остался без ответа.

Вопрос о совместном использовании iptables между биллинговой системой и разными файрволами остался без ответа. (Опять же, тут не требуется знать iptables, тут требуется принять решение: либо эксплуатация требует отсутствия файрволов, либо нужно как-то обеспечить совместную работу. Лишь в последнем случае нужно вникать в тонкости работы с iptables и конкретных файрволов, например, shorewall.)

На вопрос о маршрутизаторах схема отвечает, что у каждого шлюза есть маршрутизатор. (Надпись "hub (концентратор) или маршрутизатор (router)" - это примерно как "трактор или прицеп": одно другому не мешает, но ни в коем случае не является альтернативой.) Причём именно маршрутизатор, так как перенаправляет трафик по разным направлениям (локальный - по кольцу, внешний - на шлюз). Это значит, что MAC адреса рабочих станций не могут быть использованы (маршрутизатор разбивает сеть на независимые сегменты на сетевом уровне), и шлюзы находятся в отделённых от рабочих станций сегментах.

Цитата: Rezedent12
Авторизация происходит на хосте и только после этого пакеты попадают в кольцо интрасети или интернет. Систему роуминга между хостами можно будет написать позже. Никакой связи с хостом через хост... Таким образом проблема о которой вы говорите не существует.
Маршрутизатор - это тоже хост (с точки зрения IP), так что транзит в схеме есть, и проблема существует, и в представленной схеме вместе с выявленным уровнем квалификации не решаема (аппаратный маршрутизатор (как специализированный компьютер) часто не рассчитан на то, что в него неквалифицированные пользователи будут встраивать какие-то самописные демоны).

Цитата: Rezedent12
Слышал, читал, непонравилось. По причинам сложности в настройке (я не Linux-гуру, а партнёры при помощи которых я буду расширять сеть возможно ничего кроме винды не знают).

Ulog - это патч к ядру.. Касаемо пересборки ядра я не мастер и никогда этим не занимался.

изначальная цель сделать простое с точки зрения пользователя средство. Чтоб запустил файл и всё заработало.
У профессионального программиста мозги работают немного иначе. Он очень много думает о том, чтобы всё работало во всех мыслимых и немыслимых ситуациях, потому что в жизни постоянно происходят какие-то изменения, и хорошо спроектированная программа в себе имеет решения для всех этих ситуаций. Это значит, что свыше 90% программы работает редко и очень редко, но это обеспечивает устойчивость: когда что-то случается, программа продолжает работать. Ценой этого является то, что программа имеет сложные и разнообразные настройки. Сложность настроек не всегда оправдана (многие программисты не очень-то заботятся об удобстве использования их творений, один sendmail чего стоит), но я сейчас объясняю, откуда эта сложность берётся. Плохо спроектированная программа не имеет никаких настроек и потому её нельзя приспособить для работы в изменившихся условиях - она просто не работает, её нужно выбросить и писать новую (в лучшем случае переписать имеющуюся).

Если ты вдумчиво прочитаешь мои вопросы, сконцентрируешься на мелочах, то тем самым заранее сможешь понять либо сложность твоей задачи, либо риски излишне упрощённого решения. Ты писал:
Цитата: Rezedent12
Я чувствую, что капитально загружен....
Действительно, удержать в голове все мелочи или пытаться сконцентрироваться на них одновременно невозможно. Тут нужны определённые навыки работы с информацией, её логического упорядочивания. Но об этом ты не беспокойся - рассматривай каждый частный вопрос отдельно от других, не надо метаться из стороны в сторону, а с обобщением тебе помогут.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Rezedent12
Участник

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

« Ответ #31 : 16-01-2010 12:40 » 

Алгоритм набросок.. знаю что его как и всё придётся отлаживать.
Предварительная оптимизация необходима на мой взгляд очень часто, хотя это и повышает сложность программирования, но зато и повышает надёжность и скорость.

На каждом шлюзе своя система. Порядок роуминга между ними на начальном этапе решать не обязательно.

Сетевые интерфейсы:
eth0 - интернет.
eth1 - точка доступа клиентов.
eth2 - интрасеть.

Подключается строго один экземпляр программы. Можно что нить продиумать для предотращения повторного запуска...

Различные фаерволы выключить к чертям. А поскольку камп шлюзовой то оставить на нём лишь несколько открытых портов. Внутри интрасети MAC адреса нафиг не нужны.. Под маршрутизатором я имел ввиду свитч (простите за неточность формулировки). Поэтому я в данном случае не вижу видимой проблеммы (если она есть то объясните доходчиво..)

В общем так:
eth0 - Интернет. схема транзита eth1-eth0. Всё просто, если пакет не попадает в маску внутренней подсети 10.x.x.x то он уходит в инет.
eth1 - Клиентская сеть. DHCP сервер выдаёт IP в узком диапазоне, для клиентов каждого хоста, его определённый объём зарезервирован 10.10.host.user (в общем так). Если пакет принадлежит компьютеру в пределах хоста то он уходит обратно на интерфейс eth1. Если пакет нужно отправить на другой хост, то он уходит на интерфейс eth2.
eth2 - Интрасеть. В настройках этого интерфейса в качестве шлюзов указаны все хосты сети. Непосредствено в кольцо этой сети будут подключены игровые, файловые и другие локальные серверы. Пакеты с этого интерфейса могут идти только клиентам, иначе будет путаница с трафиком.
(Если с таким разделением пакетов есть трудности то сообщите мне)

Другое: Приведёная мной конфигурация изменятся если и будет то изменения не будут затрагивать те методы взаимодействия которые я привёл.

Касаемо всевозможных ситуаций. Их просто не будет. Сеть будет просто раз в месяц удлинятся на некоторое колличество хостов.
Записан

Всё настолько сложно что непостижимо просто.
Rezedent12
Участник

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

« Ответ #32 : 16-01-2010 14:41 » 

И касаемо Web авторизации из за которой мой проект сочли неперспективным. Это сеть "Для своих" плюс в том что те кто не должны быть в сети ничего кроме шлюза не увидят. А  те кто войдут на WEB авторизацию те смогут прочитать новость вроде "30 апреля подключение дополнительных хостов на улице Делегатской, в этот день работа сети не гарантируется."
Записан

Всё настолько сложно что непостижимо просто.
Вад
Модератор

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

« Ответ #33 : 16-01-2010 16:38 » 

Предварительная оптимизация необходима на мой взгляд очень часто, хотя это и повышает сложность программирования, но зато и повышает надёжность и скорость.
Надёжность и скорость повышаются от грамотного проектирования. Если система спроектирована грамотно, то предварительно ничего оптимизировать смысла нет (да его и так нет). Потому что до завершения реализации всё равно доподлинно неизвестно, какая именно часть будет отнимать больше времени, и насколько велика польза от оптимизации этой части. А при грамотной архитектуре любая оптимизация будет локализована и затронет немногое.
Записан
Dimka
Деятель
Команда клуба

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

« Ответ #34 : 16-01-2010 21:20 » 

Rezedent12, про оптимизацию Вад уже сказал. Далее:

Цитата: Rezedent12
Под маршрутизатором я имел ввиду свитч (простите за неточность формулировки). Поэтому я в данном случае не вижу видимой проблеммы (если она есть то объясните доходчиво..)
Если switch (коммутатор), то ладно. Но был заявлен протокол обмена модуля с программой в виде "IP-Source, IP-Destination, IP-Size". Нужно расширить этот протокол для MAC-адресов, или же программа сама будет запрашивать ARP? Доверять таблице DHCP при заявленном уровне авторизации недостаточно, так как хитрый пользователь может задать статический адрес и к DHCP не обращаться.

Цитата: Rezedent12
В общем так:
eth0 - Интернет. схема транзита eth1-eth0. Всё просто, если пакет не попадает в маску внутренней подсети 10.x.x.x то он уходит в инет.
eth1 - Клиентская сеть. DHCP сервер выдаёт IP в узком диапазоне, для клиентов каждого хоста, его определённый объём зарезервирован 10.10.host.user (в общем так). Если пакет принадлежит компьютеру в пределах хоста то он уходит обратно на интерфейс eth1. Если пакет нужно отправить на другой хост, то он уходит на интерфейс eth2.
eth2 - Интрасеть. В настройках этого интерфейса в качестве шлюзов указаны все хосты сети. Непосредствено в кольцо этой сети будут подключены игровые, файловые и другие локальные серверы. Пакеты с этого интерфейса могут идти только клиентам, иначе будет путаница с трафиком.
(Если с таким разделением пакетов есть трудности то сообщите мне)
Трафик, пришедший с определённой IP-подсети и адресованный в ту же IP-подсеть, завернуть обратно в эту же подсеть не получится, поскольку он даже не будет принят маршрутизатором (за исключением случая, когда трафик адресован непосредственно маршрутизатору на его IP-адрес). Хосты сами между собой обмениваются пакетами внутри подсети - нужна соответствующая топология на канальном уровне (в случае Ethernet - единый сегмент). Маршрутизатор умеет лишь перенаправлять из одной подсети в другую, либо нужно будет прописывать индивидуальный маршрут на каждый хост с маской 32, не используя подсети.

По поводу eth2 не совсем понятно в части "все хосты" и "только клиентам". Кольцо образуется лишь на канальном уровне, или это отражено и в IP-маршрутизации?

Далее, допустимо ли с твоей точки зрения "захардкодить" имена интерфейсов и их назначение в модуле, или не стоит - нужна конфигурация?

Цитата: Rezedent12
Касаемо всевозможных ситуаций. Их просто не будет.
Гладко было на бумаге, да забыли про овраги... точнее, про законы Мерфи Улыбаюсь

Архитектура робастной (устойчивой к ошибкам) системы должна исходить из того, что сбой рано или поздно произойдёт. Любая часть системы сбой может: игнорировать, если это её не касается; реагировать и изменить режим работы, если сбой создаёт риск неадекватного поведения в зоне ответственности этой части; реагировать и осуществить аварийное прекращение работы, если сбой приводит к невозможности дальнейшей работы.

Как модуль будет сообщать программе об ошибках и невозможности своей работы? (Если такая ситуация возникает, трафик выходит из-под контроля, так как программа перестанет получать оперативную информацию о нём и контролировать лимиты.) Как программа будет обрабатывать такую ситуацию, и каким способом она должна быть оповещена о такой ситуации? Что делать, если модуль аварийно завершил свою работу? Может ли (и каким образом) программа опознать эту ситуацию, каков план действий программы в этом случае?

Или это всё, по-твоему, является излишеством?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Rezedent12
Участник

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

« Ответ #35 : 17-01-2010 09:22 » 

Я подумал.
Wi-Fi точку можно перевести в другой режим, у меня дома валяется D-link DWL-2100AP*, тогда внутри подсети хоста можно будет обмен между пользователями реализовать.

Файлы *.conf, конфигурирование введу через них.
Протокол обмена с модулем подсчёта можно дополнить. Если невозможна нормальная работа, то в полях обмена возвращаются в качестве адресов все нули, а в поле порта код ошибки. Например: |0.0.0.0||0.0.0.0||code error| и модуль приостанавливается. Дальше ему можно подать команды: Exit, Reboot... список можно будет расширить.

Касаемо хитрого пользователя. Даже если он и сам установит статический адрес, то ему надо неизбежно авторизироватся на сервере для доступа к инету и интрасети. Но учитывая что хакер будет очень хитрым, а добропорядочный пользователь перед тем как выключить камп не зайдёт на страницу авторизации чтоб закрыть соединение. То тогда хакер изменит MAC адрес и в ручную установит IP. (Если вы говорите о такой ситуации) То конечно же виноват пользователь (сам дверь не закрыл). Как раз для того чтоб так не было, можно раз в 3 секунды сравнивать IP и MAC и если что не так то отключать. Сомнительно что за 3 секунды можно будет перешить MAC и сменить IP. (Если же возможно то сообщите)

Кольцо - это я громко сказал. Это будет цепочка, хотя в данном случае, учитывая что сеть будет в одном сегменте, топология не важна. (Если данный проект выйдет в центр Пятигорска то там наиболее удобно будет использовать топологию "Звезда" с центром из свича и нескольких беспроводных точек типа DWL-2100AP*.)

В случае невозможности работы модуля, программа перекроет трафик, сообщит об этом админу и остановится. Если модуль аварийно завершится то программа узнает об этом по разрыву TCP соединения. Хотя можно сделать так чтоб модуль посылал UDP пакеты "Я жив!"

*- Валяется она у меня дома, я и экспериментирую с настройками.
Записан

Всё настолько сложно что непостижимо просто.
Rezedent12
Участник

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

« Ответ #36 : 18-01-2010 08:00 » 

Вопросы ещё есть?
Записан

Всё настолько сложно что непостижимо просто.
Dimka
Деятель
Команда клуба

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

« Ответ #37 : 18-01-2010 12:57 » 

Rezedent12, есть - мне сейчас не до вопросов и ответов, времени нет.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Rezedent12
Участник

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

« Ответ #38 : 18-01-2010 17:30 » 

Видимо тупик.. придётся ждать...
Записан

Всё настолько сложно что непостижимо просто.
Dimka
Деятель
Команда клуба

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

« Ответ #39 : 18-01-2010 18:10 » 

Rezedent12, нет, я просто хочу выписать все требования к запрошенному модулю как задание на поиск/разработку. Это требует некоторого времени и сил, которые у меня появятся не раньше завтрашнего вечера. Сессия - приучаю молодёжь любить ООП Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #40 : 19-01-2010 04:52 » 

Dimka, почему бы этим не заняться автору темы?
Записан

Странно всё это....
Rezedent12
Участник

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

« Ответ #41 : 19-01-2010 08:55 » 

Улыбаюсь Dimka, я рад хотя бы обещанию помощи... LogRus если бы я мог бы сам его написать, то тема бы называлась "Зырьте чё я накодил.." Отлично
Записан

Всё настолько сложно что непостижимо просто.
Dimka
Деятель
Команда клуба

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

« Ответ #42 : 19-01-2010 14:51 » 

LogRus, если он это сделает раньше - хорошо. А так мне самому интересно Улыбаюсь Стал бы я иначе тут активность проявлять?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #43 : 20-01-2010 04:58 » 

... А так мне самому интересно Улыбаюсь Стал бы я иначе тут активность проявлять?
ладно, разрешаю. проявляй активность Улыбаюсь
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

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

« Ответ #44 : 24-01-2010 14:37 » 

Вопрос по поводу подключения к Интернет. Как пить дать, на внешнем интерфейсе стоит NAT, поскольку про раздачу пользователям Интернет-адресов речи не шло.

Это означает, что подсчёт Интернет-трафика должен происходить на самом деле на внутренних интерфейсах, а не на внешнем, поскольку на внешнем после NAT уже потеряны локальные адреса пользователей.

Это правильное понимание?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Rezedent12
Участник

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

« Ответ #45 : 24-01-2010 17:23 » 

Да.. посчёт проходит на интерфейсе местной сети. (локальной) из которой люди выходят на хост. К интрасети никакие подсчёты не имеют отношения, поэтому её в принципе можно конфигурировать как угодно.
Записан

Всё настолько сложно что непостижимо просто.
Rezedent12
Участник

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

« Ответ #46 : 26-01-2010 18:47 » 

Блин, проблема.. Нет эмулятора IpTables под винду.. А линь я себе ещё не поставил...
Записан

Всё настолько сложно что непостижимо просто.
Sla
Команда клуба

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

WWW
« Ответ #47 : 26-01-2010 19:03 » 

Rezedent12, а зачем тебе эмулятор?
Что ты хочешь поиметь от IpTables?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #48 : 27-01-2010 07:26 » 

.......... накодить её максимум месяц работы ......

прошло ровно 2 недели

Блин, проблема.. Нет эмулятора IpTables под винду.. А линь я себе ещё не поставил...

 Класс! так держать
Записан

Странно всё это....
Rezedent12
Участник

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

« Ответ #49 : 27-01-2010 16:44 » 

Смейтесь, смейтесь... у меня задержки финансового характера, не могу болванки купить.. ничего, через недели 2 бабло будет и запишу линь. Хотя прогу подсчёта начну писать завтра, чтоб потом не мучится.  P.S. Поставил Denwer, буду на PHP писать интерфейс авторизации.
Записан

Всё настолько сложно что непостижимо просто.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #50 : 28-01-2010 04:52 » 

Rezedent12, я не смеюсь, а иронизирую, кроме-то того месяц это всё таки очень мало, ИМХО.
что касается болванок, то:
можно обойтись и без болванок VirtualBox + ISO образ интересующей тебя лини (можешь скачать какую-нибудь супер мелкую версию без GUI, зачем тебе гуй?)
Записан

Странно всё это....
Rezedent12
Участник

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

« Ответ #51 : 28-01-2010 16:45 » 

Ну мне комфортнее с гуем Улыбаюсь я эти 2 недели потрачу на написание каркаса и инерфейсов... А потом линь поставлю..  (просто я не считаю приличным прийти к девушке с хардом, чтоб ей пришлось крышку демонтировать...)
Записан

Всё настолько сложно что непостижимо просто.
Rezedent12
Участник

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

« Ответ #52 : 29-01-2010 21:29 » 

Открыл сайт посвящёный проекту FreeBilling http://billing.ho.ua/ Пока только статический HTML.
Записан

Всё настолько сложно что непостижимо просто.
Rezedent12
Участник

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

« Ответ #53 : 07-02-2010 21:44 » 

Код:
Attribute VB_Name = "Модуль1"
Rem Программа FreeBilling, автор Гареев Станислав Викторович 1990 г. рождения
Rem Email: rezedent12@inbox.ru   ICQ: 380736935.  Тема сообщения: Свободный биллинг
Rem Распространяется по лицензии GNU. Пишется под компилятор FreeBasic (freebasic.net)
Rem Предполагаемая ОС для использования Linux. В дальнейшем планируется портировать
Rem под FreeBSD, NetBSD, OpenBSD.. Возможно и под Windows. хотя вряд ли там появится что то типа IpTables :)
Rem Распростряняется как есть, автор не несёт никакой ответственности.
Rem При использовании в своих разработках проинформировать меня и записать в соавторы.
Rem P.S. Ознакомьтесь с лицензией GNU..


Type User 'основной тип для учёта
 Login As String * 10
 Password As String * 10
 IP As String * 23 'резерв под IPv6
 MAC As String * 16 ' стандартный MAC адрес
 
 AnLimit As Boolean ' тариф безлимитный.
 Limit As Long ' Колличество байт лимита
 Bytes As Long ' накопленые байты, вычитаются из лимита
 speed As Long ' Скорость в байт/сек, будет реализована при
  ' помощи подключаемого шейпера
 Time As Long 'Временой лимит соединения (мама выдала
  'ребёнку не более 2 часов инета в день)
 DateOver As DateDay ' дата истечкения акаунта

 LocalTraffic As Boolean ' разрешён ли локальный трафик
 InternetTraffic As Boolean 'разрешён ли глобальный трафик
 'данные переменные влияют на IpTables, этим влиянием управляет специальная процедура.
 
 
End Type


Type DateDay
 Year As Long  'год
 Month As Long ' месяц
 Day As Long   ' День

End Type

'Глобальные массивы и переменные:

Dim Users(2 To 254) As User  ' максимум к одному хосту
' будут подключены 253 пользователя, маска внутреней подсети 255.255.255.0
' первый IP не включёный в массив зарезервирован для самого хоста
Dim LocalMask As String ' Это не маска в общепринятом стандарте
' Она выглядет примерно так 010.010.010. пропущеное последнее
' число подразумевает любое значение.
' Следует быть осторожным, если в сети используются одновремено IPv4 и IPv6
' Это может приводить к непонятным эффектам, просьба разбирающимся в этом вопросе
' проинформировать меня, какие эффекты могут возникнуть....
' ПРИМЕЧАНИЕ: в данном проекте предполагается что DHPC сервер будет для внутренней
' локальной сети раздавать адреса по схеме: 010.a.b.x где:
' a - номер микрорайона или посёлка, b - номер хоста, x - номер клиента
' Значения a и b статичны и устанавливаются вручную. Значение x присваивается динамически.





''Нереализованые функции, прошу помощи в их написании:
Function GetMAC(IP As String) As String
  ' Для получения MAC адреса по IP
End Function

Function GetIP(MAC As String) As String
 ' Для получения IP адреса из MAC
 ' Данные функции работают с ARP таблицей... желательно чтоб они были кросплатфомены (Windows/Linux)
End Function








'Основные процедуры подсчёта и проверки:
Sub Traffic(IpFfrom As String, IpTo As String, L As Long)
 ' Данная процедура по сути является внешне инциализируемым событием
 ' В неё от процедуры приёма данных от модуля подсчёт через сокет, приходят:
 ' IP отправителя, IP принимающего, длинна пакета

 Dim a As Long, b As Long ' Счётчики
 Dim IpMask1 As String, IpMask2 As String ' Маски пакетов, используются при выяснении подсетей клиентов
 Dim IpKlient As String ' Пригодится :)
 Dim Debet As Boolean ' Флаговая переменная, применяется для индикации взломов.

 'проверка на предмет локальности пакета (локальный трафик не тарифицируется)
 IpMask1 = GetMASK(IpFrom): IpMask2 = GetMASK(IpTo)  ' Значения выясняются заранее и кэшируются в пременных,
 '  мало ли как эта процедура усложнится в будущем
 '  может надо будет подсчитывать и локальный трафик
 '  К тому же использовании вызова функции в предстоящем цикле очень нерационально
 If IpMask1 = "010.010." And IpMask2 = "010.010." Then
  ' трафик локальный, подсчитывать не надо, в крайнем случае можно записать в журнал
  ' Или может в будущем поставлю сюда тарификацию, мало ли до чего жаба доведёт :)
  Exit Sub ' завершение
 End If

 ' Если трафик не локальный
 If IpMask1 = "010.010." Then IpKlient = IpFrom ' трафик исходящий
 If IpMask2 = "010.010." Then IpKlient = IpTo ' трафик входящий
 ' Вот и пригодилась переменная, она обозначает IP локального клиента сети
 ' По этому IP и будем считать лимиты.
 ' Посмотрите в условия, вероятно при помощи них можно будет делать разной
 ' цену входящего и исходящего трафика.
 

 For a = 2 To 254 ' цикл выяснения принадлежности пакета
  If Users(a).IP = IpKlient Then
   ' Нашли кто нам бабло должен :)
   If AnLimit = True Then
    'Эх,Безлимитчик... Ничего, пусть Debian свободно качает
   Exit Sub
   End If
   If Anlimiit = False Then
   ' Лимитчик, наш клиент :), щас похудеет его кошелёк. Счётчик вперёд!!
    Users(a).Bytes = Users(a).Bytes + L ' тут всё немного сложнее, пока мы прибавим значение..
    'Сам вычет средств происходит в другой процедуре вызываемой по таймеру
    'Данный финт нужен лишь в целях дальнейшего расширения возможностей...
    Exit Sub ' А что там дальше то считать? :)
   End If
 
  Debet = True ' Ужас, наша сеть взломана. Надо срочно проверить политики
  ' и выслать уведомление админу.. По сути данная переменная обозначает то что
  ' кто то смог послать пакет транзитом через нашу сеть, или кто то обошёл IpTables
  ' Думаю данное событие очень серьёзно. Принимаю реализации процедур на тему "Что делать?!"
  ' Хотя кто-нибудь напишите скрипт как для указаного IP перекрыть весь трафик наглухо..

  End If
 Next
End Sub





Function GetMASK(IP As String) As String
 ' данная функция возращает первые 2 числа IP адреса для использования их как маски сетей.
 Dim b As String
 b = Mid(IP, 1, 8) ' первые 2 числа IP "010.010."
 GetMASK = b
End Function



Sub TimeBalans()
'Процедура для подсчёта бабла, в неё в дальнейшем вместо комментов -что сделать-
'ставлю конструктор инструкций для IpTables. Принимаю шаблоны для различных операций
'по управлению трафиком.
'Данная процедура вызывается событием таймера, таймер можно будет реализовать в процедуре слежения за сокетом.

Dim a As Long

For a = 2 To 254
 Users(a).Limit = Users(a).Limit - Users(a).Bytes 'из лимита вычитается израсходованый трафик

 If Users(a).Limit <= 0 And Users(a).AnLimit = False Then
  '-Перекрыть интернет трафик для данного юзера-
  ' Он не безлимитчик и лимит у него кончился.
 End If
 
 'Сейчас не обязательно, но думаю надо будет реализовать проверку временного
 'лимита.
 'Помните коммент про злую мамашу? :)

 'Так же надо будет реализовать проверку даты для безлимитчиков.
 ' If users(a).AnLimit = true then проверить дату и если
 ' уже полночь, карета анлима, превращается в дыню дисконекта.. :) (тариф "Золушка") :-D
  

Next

End Sub

'Примечание: свои дополнения и замечания, присылайте с цитирование части кода
'с подробным объяснением "почему" и справедливыми притензиями.
'Буду очень рад тем кто не только укажет на недоработки, но и исправит их.
'Даже несколько строк кода могут быть пелезны
'Данный исходник от 29 января 2010 года был написан в течении для
'на одном порыве мысли... Поэтому прошу строго не судить.
'
'К Debian никаких притензий, просто реально большой дистрибутив
'
'К психологам: мама мне инет не ограничевала, но по другим людям знаю :)
'
'Вопрос: А здесь только процедуры! Где главный код?
'Ответ: Ещё не сделал, Но думаю это будет бесконечный цикл с флагами для выхода
'и ожиданиями данных от сокетов... Если можешь то помоги накодить.
'
'
'К вопросу о процедуре авторизации. Щас кодю и испытываю на Denwer'е
'Думаю сам управлюсь, хотя предложения принимаются...
'
' Исправил некоторые ошибки


« Последнее редактирование: 08-02-2010 06:14 от Вад » Записан

Всё настолько сложно что непостижимо просто.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #54 : 08-02-2010 12:29 » 

Rezedent12, я бы на твоём месте разметил исходники в svn или git на одном из бесплатных хранилищ
например, http://code.google.com/intl/ru/projecthosting/
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

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

« Ответ #55 : 08-02-2010 12:46 » 

Rezedent12, а где основная программа? как вызываются процедуры?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Rezedent12
Участник

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

« Ответ #56 : 11-02-2010 10:59 » 

Основную программу ещё не сделал... Но сделаю... прошу идеи относительно того что там реализовать...
Записан

Всё настолько сложно что непостижимо просто.
Rezedent12
Участник

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

« Ответ #57 : 05-03-2010 11:36 » new

Медленно но верно нарастает объём кода..... пока не публиковал
Записан

Всё настолько сложно что непостижимо просто.
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines