Анализатор трафика

Тема в разделе "MS Visual C++", создана пользователем opium star, 19 апр 2007.

Статус темы:
Закрыта.
  1. opium star

    opium star Гость

    Здрасте! )

    Вот вопрос на счет трафика... Короче делаю анализатор трафика. Как входящий посчитать все понятно и ясно, но вот как быть с исходящим? Подскажите плиз B)

    зы: была на этом форуме такая темка, но ее грохнули и я не успел туда заглянуть (

    ззы: заранее признателен
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    Как вариант LSP
     
  3. opium star

    opium star Гость

    Прости, но я не понял :( Можно по подробней? :( Я очень начинающий )))

    И есче 2 вопроса:

    1. че у меня стопорится проект на строке включения сокета в режим прослушивания (ioctlsocket(s, SIO_RCVALL, &flag) ) ???

    2. sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr - это строка с примера! Вот зачем все так сложно? Зачем так все запутанно? Я так понял это здесь выбирается ИП адрес хоста, который связывается с прослушивающим сокетом (ИП адрес моей машины). Почему нельзя просто присвоить 0 и принимать пакеты на все ИП? Вот здесь у меня пробел, который хотелось бы заполнить.


    Посмотрите плиз исходник и скажите, хоть в правильном направлении я иду?

    Код (Text):
    void CTraficatorDlg::OnBnClickedStart()
    {
    iSS = 1;

    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;

    WSADATA  wsadata;  
    char        name[128];
    HOSTENT*    phe;     
    SOCKADDR_IN sa;    
    IN_ADDR sa1;       
    unsigned long       flag = 1; // Flag PROMISC On/Off.

    unsigned short lowbyte;
    unsigned short hibyte;

    char Buffer[0x10000]; //64 Kb

    char chInfo[64];
    char *sizePack;

    CWnd *pStatic = GetDlgItem(IDC_ERRORS);

    if (WSAStartup(0x0202, &wsadata))
    {
    MessageBox("WSAStartup error !", NULL, 0);
    WSACleanup();
    }
    else pStatic->SetWindowTextA("Winsock initial OK !");


    if (gethostname(chInfo,sizeof(chInfo)))
    {
    MessageBox("Not local host", 0, 0);
    exit(1);
    }
    else
    {  
    pStatic->SetWindowTextA(chInfo);
    }

    phe = gethostbyname( name );

    s = socket(AF_INET, SOCK_RAW, IPPROTO_IP );
    if (s == INVALID_SOCKET)
    {
    MessageBox("Error create socket", 0, 0);
    exit(1);
    }

    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = ((struct in_addr*)phe->h_addr_list[0])->s_addr;

    if (bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR)))
    {
    MessageBox("Error bind", 0, 0);
    exit(1);
    }
    else pStatic->SetWindowTextA("Bind OK !!!");

    // Enable promiscuous mode.
    ioctlsocket(s, SIO_RCVALL, &flag);

    pStatic->SetWindowTextA("Promiscuous mode is enable!!!");

    while (iSS == 1)
    {
    int count;
    count = recv( s, Buffer, sizeof(Buffer), 0 );

    if( count >= sizeof(IPHeader) )
    {
    IPHeader* hdr = (IPHeader *)Buffer;

    lowbyte = hdr->iph_length>>8;
    hibyte = hdr->iph_length<<8;
    hibyte = hibyte + lowbyte;
    sizePack = itoa(hibyte,"",10);
    pStatic->SetWindowTextA(sizePack);
    }
    }
    }
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей