Hello. I'll ask you to write a simple program to look at the trep on the blue. Everything's going, but it's not working. Help me.



  • #include <stdio.h>//Пишем как клиент
    #include <WinSock2.h>
    #include <conio.h>
    
    #define SIO_RCVALL 0x98000001
    #define MAX_PACKET_SIZE 0x10000
    
    typedef struct IPHeder {
        unsigned char version;
        unsigned char typeserv;
        unsigned short lenght;
        unsigned short id;
        unsigned short flag;
        unsigned char timelive;
        unsigned char protocol;
        unsigned short headersum;
        unsigned int sourceaddr;
        unsigned int destaddr;
        unsigned char data[];
    } IPHeader; // Структура для вывода ip заголовка
    
    int main() {
        WSADATA wsd;
        SOCKET s;
        HOSTENT* hst;
        struct sockaddr_in saddr;
        //SOCKADDR_IN saddr;
        IN_ADDR iaddr;
        char name[128];
        int err;
    
        err = WSAStartup(MAKEWORD(2, 2), &wsd); // Инициализация винсок
    
        if (err != 0) { // Проверка инициализации винсок
            printf("WinSock error\n");
            WSAGetLastError();
            return 1;
        } else {
            printf("WinSock OK\n");
        }
    
        s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); // Инициализация сокета
    
        if (s == INVALID_SOCKET) { // Проверка сокета
            printf("Socket error", err);
            WSAGetLastError();
            WSACleanup();
            closesocket(s);
        } else {
            printf("Socket OK\n");
        }
    
    
        err = gethostname(name, sizeof(name)); // Имя машины
        if (err) {
            printf("gethostname function failed %d\n", err);
            WSACleanup();
            return 1;
        } else 
            printf("Host name: %s\n", name);
    
        hst = gethostbyname(name); // Адрес машины
        err = WSAGetLastError();
        if (err) {
            printf("gethostbyname function failed %d\n", err);
            WSACleanup();
            return 1;
        }
        //memcpy(&saddr.sin_addr.s_addr, hst->h_addr_list[1], sizeof(saddr.sin_addr.s_addr)); // Имя хоста копируем в saddr
        ZeroMemory(&saddr, sizeof(saddr));
        saddr.sin_family = AF_INET; // Заполняем поля структуры saddr
        saddr.sin_addr.s_addr = ((struct in_addr*)hst->h_addr_list[1])->s_addr;
        
        err = bind(s, (struct sockaddr_in*)&saddr, sizeof(saddr)); // Привязка сокета
        
        if (err == SOCKET_ERROR) { // Проверка 
            printf("Bind error\n", err);
            closesocket(s);
            WSACleanup();
            return 1;
        } else {
            printf("Bind OK\n");
        }
    
        unsigned long flag = 1;
        char buff[MAX_PACKET_SIZE]; // 
        ioctlsocket(s, SIO_RCVALL, &flag);
        IPHeader* header;
        while (1) { 
            err = recv(s, buff, sizeof(buff), 0);
            if(err == SOCKET_ERROR) {
                printf("Recv error", err);
                closesocket(s);
                WSACleanup();
                return 1;
            } else {
                header = (IPHeader*)buff;
                iaddr.s_addr = header->sourceaddr;
                printf("Source", inet_ntoa(iaddr));
                iaddr.s_addr = header->destaddr;
                printf("Destaddr", inet_ntoa(iaddr));
            }
        }
        closesocket(s);
        WSACleanup();
        return 0;
    }
    


  • I don't see traffic. The mistake doesn't turn out

    And why is your program should To see someone else's traffic? :- For this capture of a foreign traffic, three conditions must be met:

    1. The program should be launched with the privileges of the super-user.

    2. Socket's got to open "spawn." There you go.

      s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);

    3. A built-in skate has to be allowed to work in a thrill mode. There you go.

      ioctlsocket(socket, SIO_RCVALL, &quot;RS_Flag);

    In short, I strongly advise you to read this article:

    https://habr.com/ru/post/164901/



Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2