![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Подсчет траффик на Delphi |
|
Delphi - Подсчет траффик на Delphi
|
![]() Ветеран Сообщения: 637 |
Помогите написать подсчет траффик на Delphi... Я бы хотел чтобы она могла считать и локальный и глобальный траффик. Киньте сорцы или дайте линк плиз...
|
|
Отправлено: 10:16, 17-12-2004 |
![]() Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать Мне надо чтобы программа просто перехватывала траффик с подключения. Как это сделать?
![]() |
Отправлено: 16:21, 20-12-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать #include <conio.h> #include <stdio.h> #include <winsock2.h> #define MAX_PACKET_SIZE 0x10000 #define SIO_RCVALL 0x98000001 // Буфер для приёма данных char Buffer[MAX_PACKET_SIZE]; // 64 Kb //Структура заголовка IP-пакета typedef struct IPHeader { UCHAR iph_verlen; // версия и длина заголовка UCHAR iph_tos; // тип сервиса USHORT iph_length; // длина всего пакета USHORT iph_id; // Идентификация USHORT iph_offset; // флаги и смещения UCHAR iph_ttl; // время жизни пакета UCHAR iph_protocol; // протокол USHORT iph_xsum; // контрольная сумма ULONG iph_src; // IP-адрес отправителя ULONG iph_dest; // IP-адрес назначения } IPHeader; char src[10]; char dest[10]; char ds[15]; unsigned short lowbyte; unsigned short hibyte; void main() { WSADATA wsadata; // Инициализация WinSock. SOCKET s; // Cлущающий сокет. char name[128]; // Имя хоста (компьютера). HOSTENT* phe; // Информация о хосте. SOCKADDR_IN sa; // Адрес хоста IN_ADDR sa1; // unsigned long flag = 1; // Флаг PROMISC Вкл/выкл. // инициализация WSAStartup(MAKEWORD(2,2), &wsadata); s = socket( AF_INET, SOCK_RAW, IPPROTO_IP ); gethostname(name, sizeof(name)); phe = gethostbyname( name ); ZeroMemory( &sa, sizeof(sa) ); sa.sin_family = AF_INET; sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr; bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR)); // Включение promiscuous mode. ioctlsocket(s, SIO_RCVALL, &flag); // Бесконечный цикл приёма IP-пакетов. while( !_kbhit() ) { int count; count = recv( s, Buffer, sizeof(Buffer), 0 ); // обработка IP-пакета if( count >= sizeof(IPHeader) ) { IPHeader* hdr = (IPHeader *)Buffer; //Начинаем разбор пакета... strcpy(src,"Пакет: "); CharToOem(src,dest); printf(dest); // Преобразуем в понятный вид адрес отправителя. printf("From "); sa1.s_addr = hdr->iph_src; printf(inet_ntoa(sa1)); // Преобразуем в понятный вид адрес получателя. printf(" To "); sa1.s_addr = hdr->iph_dest; printf(inet_ntoa(sa1)); // Вычисляем протокол. Полный список этих констант // содержится в файле winsock2.h printf(" Prot: "); if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP "); if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP "); // Вычисляем размер. Так как в сети принят прямой порядок // байтов, а не обратный, то прийдётся поменять байты местами. printf("Size: "); lowbyte = hdr->iph_length>>8; hibyte = hdr->iph_length<<8; hibyte = hibyte + lowbyte; printf("%s",itoa(hibyte,"",10)); // Вычисляем время жизни пакета. printf(" TTL:%s",itoa(hdr->iph_ttl,"",10)); printf("\n"); } } closesocket( s ); WSACleanup(); } ![]() |
Отправлено: 16:39, 20-12-2004 | #3 |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать (C) Ishodnik.ru... Подумал... Так... Для справки
![]() |
Отправлено: 16:42, 20-12-2004 | #4 |
![]() Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать Netscaper
Блин... вроде это на С++ ![]() А на этом сайте нету кода на дельфи ![]() Я в С++ вообще не соображаю, если кто сможет переписать плз ![]() |
|
Отправлено: 17:29, 20-12-2004 | #5 |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать Я перепишу на Delphi как только время появится... Завтра, скорее.
|
Отправлено: 18:09, 20-12-2004 | #6 |
![]() Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать Netscaper
Ок спасибо огромное. Ты настоящий друг ![]() |
Отправлено: 19:27, 20-12-2004 | #7 |
Пользователь Сообщения: 84
|
Профиль | Отправить PM | Цитировать Держи. Конечно, в Delphi такое лучше не делать - мозги свернешь...
Рабочая консольная версия. Всё же рекомендуется поизучать socket'ы. У меня вроде работает... Оказывается в сетке два компа broadcast шлют, может, игровые серверы? program Sniffer; // Translated by Netscaper :) {$APPTYPE CONSOLE} uses SysUtils, Windows, WinSock; const // Максимальный размер пакета MaxPacketSize = 65536; // Принимаем все пакеты SIO_RCVALL = $98000001; type // Список адресов машины PInAddrList = ^TInAddrList; TInAddrList = Array[0..255] of PInAddr; // Заголовок Ip4 PIPHeader = ^TIPHeader; TIPHeader = record verlen, tos : Byte; length, id, offset : Word; ttl, protocol : Byte; xsum : Word; src, dest : Cardinal; end; // Получаем IP-адрес (ненавижу PChar и inet_ntoa) function get_ip4(ip4 : Cardinal): string; begin Result := IntToStr(Lo(LoWord(ip4))) + '.' + IntToStr(Hi(LoWord(ip4))) + '.' + IntToStr(Lo(HiWord(ip4))) + '.' + IntToStr(Hi(HiWord(ip4))); end; var // практически всё то же, что и на C++ hdr : PIPHeader; buffer : Array[0..MaxPacketSize - 1] of byte; wsa : WSADATA; s, size : Integer; hostname : Array[0..127] of char; phe : Phostent; sa : sockaddr_in; flag : Integer; Len : Word; outstr : String; inaddrlist : PInAddrlist; begin flag := 1; // Иницилизируем WSAStartup(2, wsa); s := socket(AF_INET, SOCK_RAW, IPPROTO_IP); // Получаем название нашего хоста gethostname(@hostname, 128); // Получаем информацию о хосте phe := gethostbyname(@hostname); FillChar(sa, sizeof(sa), 0); inaddrlist := PInAddrList(phe.h_addr_list); // Привязываемся к нашему сокету :) sa.sin_family := AF_INET; sa.sin_addr.S_addr := inaddrlist^[0].S_addr; if (bind(s, sa, sizeof(sa)) = SOCKET_ERROR) then begin // Ошибка flag := WSAGetLastError; writeln('bind fails.result=',flag); readln; halt; end; // Выбираем режим "прослушки" ioctlsocket(s, SIO_RCVALL, flag); while(true) do begin // Ждем пакет :) size := recv(s, Buffer, sizeof(Buffer), 0); if (size = SOCKET_ERROR) then begin // Бывают же глюки :) flag := WSAGetLastError; break; end; // Если пакет имеет размер с заголовок или больше, то это - хорошо :) if (size >= sizeof(TIPHeader)) then begin // Печатаем hdr := PIPHeader(@Buffer); outstr := 'Packet from ' + get_ip4(hdr.src) + ' to ' + get_ip4(hdr.dest) + ', protocol '; if hdr.protocol = IPPROTO_TCP then outstr := outstr + 'TCP'; if hdr.protocol = IPPROTO_UDP then outstr := outstr + 'UDP'; outstr := outstr + ', size '; Len := hdr.length shl 8 + hdr.length shr 8; outstr := outstr + IntToStr(Len) + ', TTL ' + IntToStr(hdr.ttl); writeln(outstr); end; end; // Теоретически, у нас бесконечный цикл, но после использования лучше // закрыть сокет и освободить WS2_32.DLL writeln('flag=',flag); readln; closesocket(s); WSACleanup; end. |
Отправлено: 01:09, 21-12-2004 | #8 |
![]() Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать Netscaper Нда уж... тут ты прав (про мозги)
![]() Сейчас попробую.. спасибо. |
Отправлено: 07:50, 21-12-2004 | #9 |
![]() Ветеран Сообщения: 637
|
Профиль | Сайт | Отправить PM | Цитировать Если кто-нибудь найдет другую реализацию, пожалуйста выкладывайте сюда
![]() |
Отправлено: 10:13, 21-12-2004 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интернет - Интеренет траффик | GooTTaLiN | Microsoft Windows 7 | 1 | 26-10-2009 06:27 | |
Фильтры в Траффик Инспекторе... | minion | Сетевые технологии | 3 | 06-04-2007 08:27 | |
Траффик в IE - ограничение | maximys_ | Сетевые технологии | 4 | 19-10-2005 16:01 | |
Дорогой траффик!! Help!! | Falaut | Сетевые технологии | 3 | 25-06-2005 15:48 | |
Траффик | KILLOR666 | Сетевые технологии | 4 | 17-06-2005 17:45 |
|