![]() |
Подсчет траффик на Delphi
Помогите написать подсчет траффик на Delphi... Я бы хотел чтобы она могла считать и локальный и глобальный траффик. Киньте сорцы или дайте линк плиз...
|
Мне надо чтобы программа просто перехватывала траффик с подключения. Как это сделать? :(
|
Код:
#include <conio.h> |
(C) Ishodnik.ru... Подумал... Так... Для справки :)
|
Netscaper
Блин... вроде это на С++ :) А на этом сайте нету кода на дельфи :( Я в С++ вообще не соображаю, если кто сможет переписать плз :) |
Я перепишу на Delphi как только время появится... Завтра, скорее.
|
Netscaper
Ок спасибо огромное. Ты настоящий друг :) |
Держи. Конечно, в Delphi такое лучше не делать - мозги свернешь...
Рабочая консольная версия. Всё же рекомендуется поизучать socket'ы. У меня вроде работает... Оказывается в сетке два компа broadcast шлют, может, игровые серверы? Код:
program Sniffer; |
Netscaper Нда уж... тут ты прав (про мозги) :)
Сейчас попробую.. спасибо. |
Если кто-нибудь найдет другую реализацию, пожалуйста выкладывайте сюда :)
|
В чём проблема? Нельзя сосчитать исходящий/входящий трафик? Сделай фильтр по нужным хостам.
|
Netscaper
Да нет, все ок... впринципе можно сделать все :) Перепишу только ее под форму и тогда вообще ок будет.. Просто может быть у кого-нибудь есть еще варианты :) У меня вот еще вопрос... размер пакета указывается ведь в байтах? |
Разумеется, всё в байтах. Лучше запихни обработку в отдельный Thread, а то у тебя же тогда накроется основной поток, т.к. recv ожидает пакеты, т.е. во время ожидания будет «накрывать» основной поток.
|
Netscaper
Что-то у меня не получается под форму засунуть :(((((((((( |
В плане?
|
Вот, то же самое, только на Delphi c окошками.
[Вложение удалено] |
Netscaper
Ок спасибо, сейчас посмотрю Аааааа :) все донал... |
Слушай... дак тут пакеты то не только которые идут ко мне... тут вообще какие-то левые пакеты?!
Или это все пакеты идут ко мне? Хм... а как мне ловить не сетевой траффик, а инетовский? :) Сори если надоел... я программер самоучка ;) |
Естественно, мне тоже. Оставляй те, которые идут от тебя или к тебе. Инетовский очень просто - трафик на шлюз или прокси (конкрентный компьютер в сети).
|
Netscaper
Ок. Ясно. Пойду пробовать, если что напишу :) Кст. А как отфильтровать на себя или от себя? |
Сделал фильтр. Укажи в полях "dest" и "src" IP-адреса твоей машины и шлюза в интернет. Посмотри, как работает (т.е. зайди на какой-нибудь сайт). Останутся входящие и исходящие твои.
[Вложение удалено] |
Хммм.. А dest и src за что отвечают? dest это локальный адрес машины, а src адрес шлюза в инет? Интересно... а если вообще как-нибудть левый тип юзает мою прогу :D ... ему что сорцы тепепрь менят..
А никак нельзя просто перехватить значения с соединения (будь этот инет или лвс)? Просто те которые указаны там "Отправлено" и "Получено". Мне впринципе кроме этих параметров ничего и не надо... Нифига мы с тобой уже вторую страницу открыли ;) Кстати, как ты подгружаешь файлы? |
Понимаешь, программа ловит все, которые валятся к тебе, даже если они напрямую твоему хосту не предназначены. Иными словами, тебе приходят пакеты у которых в заголовке указано, хост-получатель и хост-отправитель (dest и src). Например, ты работаешь в сети со шлюзом (твой-192.168.0.1, шлюз-192.168.0.2). Когда ты делаешь запрос на какой-то сайт, ты отправляешь сообщения (dest-192.168.0.2,src-192.168.0.1) шлюзу, когда получаешь ответ (страницы HTML, файлы и т.п), ты получаешь сообщения от шлюза (dest-192.168.0.1,src-192.168.0.2). Таким образом, тебе надо оставлять сообщения, у которых dest твой и шлюза и src твой и шлюза (трафик в обоих направлениях). Если ты хочешь посчитать только входящий трафик, то тебе надо оставлять сообщения, где dest - твой компьютер, а src - шлюз.
Цитата:
Цитата:
|
Netscaper
ясно. А нельзя никак отловить от соединения? Я имею ввиду что когда к инету цепляешься, в трее появляются телеки :) вот в них написаны сколько отправлено и получено, оттуда нельзя выдернуть никак? |
Можно. Слушай, скачай себе какой-нибудь TMeter и посмотри как он работает, а то, я подозреваю, что ты не очень разбираешься в сетях :lamer:
|
Netscaper Хехе.. в сетях то разбираюсь... не разбираюсь в программирование :) А ты думаешь есть компоненты для подсчета траффика? Тогда чего я геморрой ловлю?!
|
|
Netscaper
Ок.. ща гляну |
Что-то вроде нету :(
А ты знаешь как реализовать перехват с соединения? :) |
Последний вариант. Я не знаю какой компьютер у тебя в сети выполняет роль шлюза или прокси, так что разбирайся сам, как тебе его определять для подсчёта интернет-трафика. Указываешь машину в сети для которой следует считать трафик, прога тебе все посчитает.
|
Netscaper
Спасибо. |
Пожалуйста :oszone:
|
Вобщем если кто знает как в соединении отлавливать траффик пишите сюда. Или может у кого есть компонент..
|
Народ, а можно с помощью этой проги еще порт посмотреть? Если можно, то что нужно добавить?
|
DeaDMan77
Навреное можно, раз определяется его протокол, значит и сам номер можно :) Netscaper Помогай, без тебя не справимся :) |
По заявкам... Добавил в код сниффера заголовки TCP и UDP, которые содержат номера портов. Программа не претендует на эффективность и оптимальность, но суть, на мой взгляд, отражает. Краткое пояснение. Заголовки TCP и UDP вкладываются внутрь сообщение протокола TCP/IP. Иначе, сначала идет заголовок IP (структура IPHeader) в котором указывается, какой протокол будет использоваться TCP или UDP, в зависимости от этого далее идет либо заголовок TCP (TTCPHeader) или UDP (TUDPHeader). Исходный код прилагается, надеюсь, что страждущие всё же разберутся...
|
Вери велл сенькаю :)
А можно еще вопрос? :) Можноли ненужные пакеты блокировать и как насчет других протоколов, типа ICMP? |
|
Netscaper
Благодарю Вас :) |
Только мне не понятно зачем ты два раза прописал hdr.protocol?
Код:
case hdr.protocol of |
Я же ясно сказал, что
Цитата:
Кстати, о птичках... Зацени проект http://delphi.about.com/od/fullcodep.../aa112903a.htm |
Че-то ничего по этой ссылке не кажет :(
И я не просил идеальной проги, проще уже было попросить написать ее для меня :) Просто хочется разобраться... Этож если научиться блокировать порты, то получится не просто считалка трафа, но и простенький файрволл. Вот чтобы сделать его не простеньким нужно постараться :) |
|
Netscaper
Да я уже просек... у них порты то могут быть разные, я первый раз не сообразил :) Ща зацению проект, отпишусь... |
Netscaper
Слушай... а вот эти левые пакеты которые летают, это бродкосные? Т.е. фактически они нафиг не нужны... так мусор летающий по сети. DeaDMan77 Интересно как ты собираешься блокировать? :) Если найдешь что-нить интересное создай тему... Netscaper Это что пага с компонентами и статьями? :) |
fossil
Вовсе не обязательно... Broadcast, это, скорее те, у которых destination ip - 255.255.255.255 или, например, 192.168.0.127/24. Может попасться пакет, который к твоему компу вообще отношения не имеет, но, в основном, broadcast. Про прогу.Эта программка считает траффик с помощью Microsoft IP Helper. Библиотечка такая есть, которая позволяет получать и/или изменять текущие сетевые настройки (сетевые интерфейсы, их IP-адреса, маршрутизацией и т.д. С помощью неё можно отслеживать текущие TCP соединения (UDP прослушки) и их состояние, но, насколько я знаю, нельзя получить объем входящих/исходящих данных. Однако, с помощью неё можно создавать фильтры. Обидно то, что в Platform SDK сказано, что эти функции поддерживаются только серверными системами Windows 2000, 2003. Но я не поленился заглянуть в библиотечку (у меня 2000 Proffesional). Оказалось, что там эти функции есть. Я ещё в сомнениях, но они должны работать... Скачать конкретно её так - http://delphi.about.com/library/week.../src112903.zip |
Netscaper
Я так и понял... Сейчас скачаю эту библиотеку, посмотрим чего там :) Жаль что не выдирает траф |
Netscaper
Хм.... прикольная штучка, правда она у меня какие-то ошибки выдавала на Код:
self.FAverageOutPerSec := OutTotal div ActiveCountOut Вроде запустилась и работат, только траффик немного не совпадает с тем который в соединении (примерно на 100 Кб). Пойду еще в ней поковыряюсь... |
Я ошибся, все ок. Подсчитывает правильно :) Прога просто рулез... Просто у нее другой метод подсчета и иногда может не соответствовать, но в конечном результате все практически сходится... (расходятся только последнии цифры байтов)
Народ если у кого есть еще какие-нить проги или компоненты или статьи, выкладывайте их сюда :) |
Разумеется, всё в байтах. Лучше запихни обработку в отдельный Thread, а то у тебя же тогда накроется основной поток, т.к. recv ожидает пакеты, т.е. во время ожидания будет «накрывать» основной поток.
блин а я и смотрю у меня этот сниффер лагает пипец как. а как же сделать два раздельных потока? знает кто? |
Время: 01:50. |
Время: 01:50.
© OSzone.net 2001-