Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Перехват пакетов (https://forum.antichat.xyz/showthread.php?t=102108)

WON 19.01.2009 22:31

Перехват пакетов
 
Решил написать программку для пеерхвата пакетов только для моего компьютера, для начала хотя бы читать их содержимое...
Начал писать на С++, но прога не очень то и работает... Непонятно когда и по каким принцыпам(лично для меня так) она выводит содержимое пакетов(и то не всё)... Может мне ктонибудь подскажет аглоритм и программые методы для осуществение моей цели...

Код:

#include <winsock2.h>
#include <windows.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>

#pragma comment( lib, "wsock32.lib" )

int main()
{
        WSADATA wd;
        char buff[1000];
        SOCKET s, news;
        sockaddr_in sin, newsin;

        sin.sin_family = AF_INET;
        sin.sin_port = htons(2593);
        sin.sin_addr.s_addr = inet_addr("127.0.0.1");
       
        if(FAILED(WSAStartup( MAKEWORD(2,2), &wd)) )
        {
                cout<<"WSA error - "<<WSAGetLastError()<<endl;
                return -1;
        }

        if( (s=socket(AF_INET,SOCK_STREAM,0)) == -1 )
        {
                cout<<"WSA error - "<<WSAGetLastError()<<endl;
                return -1;
        }

    if(bind(s, (sockaddr*)&sin, sizeof(sin) ) == -1 )
    {
          cout<<"Can't bind"<<endl;
          return -1;
    }

        cout<<"Wait for connections..."<<endl;
        int i=0, len = sizeof(newsin);
        if(listen(s,5) == -1)
        {
                cout<<"Cant listen"<<endl;
        }
        int c = 0, tmp;
        while( c < 1 )
        {
                if( (news = accept(s, (sockaddr*)&newsin, &len)) == INVALID_SOCKET )
                {
                        cout<<"Accept failed"<<endl;
                        getch();
                        return -1;
                }
                else
                {
                        cout<<"New client "<<c<<endl;
                        int msg;
                        if(FAILED(msg = recv(news, buff, sizeof(buff),0 )))
                                return E_FAIL;
                        for(int i = 0; i < 1000; i++)
                                if( isalnum(buff[i]) )
                                        cout<<buff[i];
                        cout<<endl;
                        //closesocket(news);
                        ++c;
                }
        }

                tmp = recv(news,buff, sizeof(buff),0 );
                if( tmp != SOCKET_ERROR )
                        for(int i = 0; i < 1000; i++)
                                if( isalnum(buff[i]) )
                                        cout<<buff[i];
                tmp = recv(news,buff, sizeof(buff),0 );
                if( tmp != SOCKET_ERROR )
                        for(int i = 0; i < 1000; i++)
                                if( isalnum(buff[i]) )
                                        cout<<buff[i];

        closesocket(s);
        closesocket(news);
        WSACleanup();

        return 0;
}

Код как я сам понимаю - бред...

Qws 19.01.2009 22:43

Почемуже бред?В некоторих местах криво,хотя в полне прилично))))
Зы:Я новичок:))))

criz 19.01.2009 22:45

эммм...у меня глюк или ты не перевел интерфейс в promisc-режим?
http://forum.antichat.ru/showthread.php?p=1011673
ТС, твой код пример обычного клиент/сервернго приложения...тока без клиента)))

WON 19.01.2009 23:54

Цитата:

Сообщение от Qws
Почемуже бред?В некоторих местах криво,хотя в полне прилично))))
Зы:Я новичок:))))

Я например захожу в КС... оно должно мне выводить на экран содержимое пакетов при игре а оно мне выводит пустоту напостой..

Цитата:

Сообщение от criz
эммм...у меня глюк или ты не перевел интерфейс в promisc-режим?
http://forum.antichat.ru/showthread.php?p=1011673
ТС, твой код пример обычного клиент/сервернго приложения...тока без клиента)))

это да... за ссылочку спасибо.. но там заумный для меня код... может есть что по проще... может на Delphi... И ещё по той ссылке что ты мне дал упоминался WinAPI и сетевые протоколы низких уровней... Может они проще...

SlyBit 20.01.2009 00:49

WON

Твой код не предназначен для перехвата пакетов.

Тут http://www.ntkernel.com/w&p.php?id=14 расписаны методы перехвата пакетов, позволяющие их редактировать.

Самый простой способ внедрять в каждый процесс библиотеку, перехватывающую функции для работы с сокетами (модификация IAT или сплайзинг connect, send, sendto, WSASend, WSASendTo, recv, recvfrom, WSARecv).

Dr Flint 20.01.2009 00:51

чем тебе пабликовские сниферы не нравятся?)

criz 20.01.2009 07:51

Цитата:

Сообщение от WON
но там заумный для меня код... может есть что по проще... может на Delphi... И ещё по той ссылке что ты мне дал упоминался WinAPI и сетевые протоколы низких уровней... Может они проще...

В первом твоем посте С-шный код, я тебе дал ссылку на С-шный код.
Может тебе надо сначала ознакомиться с документацией по TCP/IP? Потом код не будет казаться "заумным" ;)

WON 20.01.2009 16:42

Цитата:

Сообщение от criz
В первом твоем посте С-шный код, я тебе дал ссылку на С-шный код.
Может тебе надо сначала ознакомиться с документацией по TCP/IP? Потом код не будет казаться "заумным" ;)

Чесно говря я не пытался казаться "заумным", просто в той ссылке что ты мне дал говорилось что есть готовые WinAPI функции и что с ними легче рабаотать... Спасибо... буду разбираться с тем кодом что есть...

Pernat1y 20.01.2009 16:46

глянь сорцы того-же wireshark'a. он на Сях-же, вроде

criz 20.01.2009 16:51

WON, твой код отличается несколькими строчками: нет перевода интерфейса в promisc-режим и другой вывод информации ;)
З.Ы. ну еще там IP-заголовок описан.


Время: 02:39