Помогите посчитать сетевой трафик!!
От: Leader Россия  
Дата: 30.09.02 14:07
Оценка:
Недавно был топик про программу слежения за расходом сетевого трафика (NetXRay) под разные порты.
Дело в том, что мне надо написать точно такую же программу самому (курсовая), а я нигде не могу найти инфу по этой теме. Если у кого есть примеры реализации такой проги (язык значения не имеет) или нормальная документация, поделитесь плиз....
Re: Помогите посчитать сетевой трафик!!
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.09.02 14:26
Оценка:
Здравствуйте Leader, Вы писали:

L>Недавно был топик про программу слежения за расходом сетевого трафика (NetXRay) под разные порты.

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

Есть кое что такое.
Под 2000 сокетами можно ловить пакеты все подряд.

Твоя задача — разобрать пакет по простому —

Определить тип пакета и тип протокола
Выдрать из IP пакета соответсвующий TCP/UDP
Определить входящий/исходящий адрес/порт

Все...
Re[2]: Помогите посчитать сетевой трафик!!
От: JazzzMan Россия  
Дата: 30.09.02 14:44
Оценка:
Здравствуйте old Dutchman, Вы писали:

OD>Есть кое что такое.

OD>Под 2000 сокетами можно ловить пакеты все подряд.

OD>Твоя задача — разобрать пакет по простому -


OD>Определить тип пакета и тип протокола

OD>Выдрать из IP пакета соответсвующий TCP/UDP
OD>Определить входящий/исходящий адрес/порт

OD>Все...


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

Хм...Ну а если свести задачу к более простой — тупо считать весь интернет трафик целиком без углубления в дебри протоколов?? Может так будет легче??
Re[3]: Помогите посчитать сетевой трафик!!
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 30.09.02 14:49
Оценка:
Здравствуйте JazzzMan, Вы писали:

OD>>Твоя задача — разобрать пакет по простому -


OD>>Определить тип пакета и тип протокола

OD>>Выдрать из IP пакета соответсвующий TCP/UDP
OD>>Определить входящий/исходящий адрес/порт

OD>>Все...


JM>Но как это сделать?? Я даже не знаю с чего начать, в каком направлении копаться...

JM>К тому же для сети ничего почти раньше не писал....

JM>Хм...Ну а если свести задачу к более простой — тупо считать весь интернет трафик целиком без углубления в дебри протоколов?? Может так будет легче??


Фи...

Тут писанины на две недели максимум вместе разбиранием с апи и протоколами и компиляцией и пивом и тд.
Re: Помогите посчитать сетевой трафик!!
От: Kubyshev Andrey  
Дата: 02.10.02 07:13
Оценка:
L>Недавно был топик про программу слежения за расходом сетевого трафика (NetXRay) под разные порты.
L>Дело в том, что мне надо написать точно такую же программу самому (курсовая), а я нигде не могу найти инфу по этой теме. Если у кого есть примеры реализации такой проги (язык значения не имеет) или нормальная документация, поделитесь плиз....

можно заити на ввв.сф.нет и там поискатъ по слову траффиc , будет много проектов среди них что то вроде траффиc он линуx, его пишет русскии паренъ, скачаи соурcес посмотри , что не понятно будет наверно можно будет аск его где об етом прочитат. Еше можно взят соурcес тcпдумп и винпcап ...
Re: Помогите посчитать сетевой трафик!!
От: Corvin Украина  
Дата: 02.10.02 12:00
Оценка: 41 (6)
Здравствуйте Leader, Вы писали:

L>Недавно был топик про программу слежения за расходом сетевого трафика (NetXRay) под разные порты.

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

Кушайте на здоровье, — сам недавно писал.
#include "IpHlpApi.h"
#include "WinSock2.h"

#define MAX_SIZE 65535
SOCKADDR_IN            addr; //адрес куда ты сокет будешь биндить
int                 nactive = TRUE;

IN_ADDR                NetworkAddr; //адрес локальной сети, нужен если ты не хочешь считать пакеты из локалки
IN_ADDR                NetworkMask; //маска локалки, - нужна для того же


typedef struct _tagippacket {
    unsigned long l1;
    unsigned long l2;
    unsigned long l3;
    IN_ADDR     Src;
    IN_ADDR     Dst;
    unsigned long l6;

} IPHEADER;

int MatchNetwork(IN_ADDR Ip, IN_ADDR Mask, IN_ADDR Net) //определяет принадлежит ли пакет локалке
{
    return (Ip.S_un.S_addr & Mask.S_un.S_addr) == Net.S_un.S_addr;
}

UINT TrafThread(LPVOID p)
{
        int Traffic=0;
    WORD                wVersionRequested;
    int                err;
    DWORD                dwCByte, dwFlag=0;
    WSADATA                wsaData;
    SOCKET                sock;
    WSABUF                wsabuf;
    IPHEADER            *pIP;
    BYTE                *lBuf;
    int                    nIndex;

    NetworkAddr.S_un.S_addr = 0;

    NetworkMask.S_un.S_addr = 0;

    wVersionRequested = MAKEWORD(2,0);
    err = WSAStartup(wVersionRequested,&wsaData); //инициализируем WinSock

    if (err != 0)
        return 0;
    
    if ( LOBYTE( wsaData.wVersion ) != 2 ) 
    {
        WSACleanup( );
        return 0; 
    }

    sock = WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,0);//Создаем сокет, - 
//ответственный момент ибо здесь мы наделяем сокет способностью ловить ВСЕ пакеты, 
//проходящие через сетевую плату.

    if (sock == INVALID_SOCKET)
    {
        WSACleanup( );
        return 0; 
    }

    addr.sin_family = AF_INET;
    addr.sin_port = htons(0);

    MIB_IPADDRTABLE AdapterInfo;
    unsigned long dwBytes=100;

    if (GetIpAddrTable(&AdapterInfo,&dwBytes,true)!=NO_ERROR)
    {
        closesocket(sock);
        WSACleanup( );
        ErrorBox(GetLastError(),"GetIpTab");
        return 0;
    }
    addr.sin_addr.S_un.S_addr=AdapterInfo.table[0].dwAddr;//тут будет твой ИП


    NetworkAddr.S_un.S_un_b.s_b1=ххх;
    NetworkAddr.S_un.S_un_b.s_b2=ххх;
    NetworkAddr.S_un.S_un_b.s_b3=ххх;
    NetworkAddr.S_un.S_un_b.s_b4=ххх;

    NetworkMask.S_un.S_un_b.s_b1=ххх;
    NetworkMask.S_un.S_un_b.s_b2=ххх;
    NetworkMask.S_un.S_un_b.s_b3=ххх;
    NetworkMask.S_un.S_un_b.s_b4=ххх;

    if (bind(sock,(SOCKADDR *)&addr,sizeof(addr)) == SOCKET_ERROR)//привязываем сокет к адресу и порту
    {
        closesocket(sock);
                WSACleanup( );
        return 0; 
    } 

    err=1;

    if (WSAIoctl(sock,SIO_RCVALL,&err,sizeof(err),NULL,0,&dwCByte,NULL,NULL) == SOCKET_ERROR) //здесь мы говорим сокету, чтобы ловил все пакеты
    {
        closesocket(sock);
        WSACleanup( );
        return 0; 
    }

    wsabuf.len = MAX_SIZE;
    wsabuf.buf = (char *) malloc(MAX_SIZE*sizeof(char));


    while (nactive)
    {        if (WSARecv(sock,&wsabuf,1,&dwCByte,&dwFlag,NULL,NULL)!=SOCKET_ERROR)
        {
            pIP=(IPHEADER *)wsabuf.buf;
            lBuf=(BYTE *)wsabuf.buf;
            if ( (MatchNetwork(pIP->Src,NetworkMask,NetworkAddr) && !MatchNetwork(pIP->Dst,NetworkMask,NetworkAddr)) ||
                (!MatchNetwork(pIP->Src,NetworkMask,NetworkAddr) && MatchNetwork(pIP->Dst,NetworkMask,NetworkAddr)) )
            {
                           Traffic +=(ntohl(pIP->l1)&0x0000FFFFL);
            }
        }
    }

    if (wsabuf.buf) 
        free(wsabuf.buf);
    closesocket(sock);
    WSACleanup();

    return 0;
}

Вот и все, — запускаешь такое нитью и в Traffic будет твой траффик.
Не забудь вколючить прект либы к тем двум хедерам
Re[2]: Помогите посчитать сетевой трафик!!
От: Spider84 Россия http://spider.vc
Дата: 22.11.02 13:56
Оценка:
Здравствуйте, Corvin, Вы писали:

L>>Недавно был топик про программу слежения за расходом сетевого трафика (NetXRay) под разные порты.

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

C>Кушайте на здоровье, — сам недавно писал.

[skip]
C>Вот и все, — запускаешь такое нитью и в Traffic будет твой траффик.
МНе кажеться или этот код ловит только входящий трафик? А исходящий?
Re[3]: Помогите посчитать сетевой трафик!!
От: Corvin Украина  
Дата: 22.11.02 14:43
Оценка:
Здравствуйте, Spider84, Вы писали:

S>МНе кажеться или этот код ловит только входящий трафик? А исходящий?

Ну почему же?

if ( (MatchNetwork(pIP->Src,NetworkMask,NetworkAddr) && !MatchNetwork(pIP->Dst,NetworkMask,NetworkAddr)) 
|| (!MatchNetwork(pIP->Src,NetworkMask,NetworkAddr) && MatchNetwork(pIP->Dst,NetworkMask,NetworkAddr)) )

Если источник пакета в локалке, а направление не в локалке, (исходящий траффик) или источник не в локалке, а направление в локалке, (входящий траффик) то пакет считаем
Re[4]: Помогите посчитать сетевой трафик!!
От: Spider84 Россия http://spider.vc
Дата: 22.11.02 15:48
Оценка:
Здравствуйте, Corvin, Вы писали:

S>>МНе кажеться или этот код ловит только входящий трафик? А исходящий?

C>Ну почему же?
if ( (MatchNetwork(pIP->Src,NetworkMask,NetworkAddr) && !MatchNetwork(pIP->Dst,NetworkMask,NetworkAddr)) 
|| (!MatchNetwork(pIP->Src,NetworkMask,NetworkAddr) && MatchNetwork(pIP->Dst,NetworkMask,NetworkAddr)) )

C>Если источник пакета в локалке, а направление не в локалке, (исходящий траффик) или источник не в локалке, а направление в локалке, (входящий траффик) то пакет считаем
Я этот кусок вообще опустил и пишу в лог все пакеты, потом посмотрел, и обнаружил одну странную вещь. Все Dst имеют мой ИП ни одного Src == MyIP
Re[2]: Помогите посчитать сетевой трафик!!
От: Romaxa  
Дата: 29.11.02 17:33
Оценка:
Народ я ничего не понимаю!!!!
Реализую код этого сниффера в Visual Studio .NET — всё нормально
делаю тоже самое в Visual Studio 6.0 — сокет не инициализируется!!??
Re: Помогите посчитать сетевой трафик!!
От: Romaxa  
Дата: 29.11.02 17:54
Оценка:
Здравствуйте, Leader, Вы писали:

L>Недавно был топик про программу слежения за расходом сетевого трафика (NetXRay) под разные порты.

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

всё разобрался, там почему-то надо было сначала считать IP из APR таблицы а потом сокет инициализировать ????!!!
Re[2]: Помогите посчитать сетевой трафик!!
От: HighTower Россия http://pbudget.ru
Дата: 21.02.03 18:06
Оценка:
Здравствуйте, Corvin, Вы писали:

C>Кушайте на здоровье, — сам недавно писал.


Пытаюсь пустить под ВСВ 6.0 и ловлю ошибку на

ccode]
if (WSAIoctl(sock,SIO_RCVALL,&err,sizeof(err),NULL,0,&dwCByte,NULL,NULL) == SOCKET_ERROR) //здесь мы говорим сокету, чтобы ловил все пакеты
[/ccode]

"An invalig argument has supplied" (1447)

Может это ио-за того, что неправильно вписал
NetworkAddr.S_un.S_un_b.s_b1=192;
NetworkAddr.S_un.S_un_b.s_b2=168;
NetworkAddr.S_un.S_un_b.s_b3=0;
NetworkAddr.S_un.S_un_b.s_b4=15;

NetworkMask.S_un.S_un_b.s_b1=255;
NetworkMask.S_un.S_un_b.s_b2=255;
NetworkMask.S_un.S_un_b.s_b3=255;
NetworkMask.S_un.S_un_b.s_b4=255;

(через ipconfig смотрел)

Где грабли???
Бог у всех один — провайдеры разные...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.