Advertisement
Guest User

Untitled

a guest
Nov 27th, 2016
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.72 KB | None | 0 0
  1. #include <Winsock2.h>
  2. #include <Windows.h>
  3. #include <iostream>
  4.  
  5. #pragma comment(lib, "Ws2_32.lib")
  6.  
  7. #define SIO_RCVALL 0x98000001
  8. #define MAX_PACKET_SIZE 0x10000
  9.  
  10. typedef struct tagIPHeader
  11. {
  12.   unsigned char  ver_len;       // версия и длина заголовка
  13.   unsigned char  tos;           // тип сервиса
  14.   unsigned short length;        // длина всего пакета
  15.   unsigned short id;            // Id
  16.   unsigned short flgs_offset;       // флаги и смещение
  17.   unsigned char  ttl;           // время жизни
  18.   unsigned char  protocol;      // протокол
  19.   unsigned short xsum;          // контрольная сумма
  20.   unsigned long  src;           // IP-адрес отправителя
  21.   unsigned long  dest;          // IP-адрес назначения
  22.   unsigned short *params;       // параметры (до 320 бит)
  23.   unsigned char  *data;         // данные (до 65535 октетов)
  24. } IPHeader;
  25.  
  26. void ShowError()
  27. {
  28.         LPVOID lpMsgBuf = NULL;
  29.         FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
  30.             NULL,
  31.             WSAGetLastError(),
  32.             MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
  33.             (LPTSTR)&lpMsgBuf,0,NULL);
  34.         std::cout << (LPCTSTR)lpMsgBuf << std::endl;
  35.         LocalFree(lpMsgBuf);
  36. }
  37.  
  38. IPHeader* sniff(SOCKET sock)
  39. {
  40.     IPHeader *hdr;
  41.     char buffer[MAX_PACKET_SIZE];
  42.     int count = 0;
  43.  
  44.     count = recv(sock, buffer, sizeof(buffer), 0);
  45.     if (count >= sizeof(IPHeader))
  46.     {
  47.         hdr = (IPHeader *)malloc(MAX_PACKET_SIZE);
  48.         memcpy(hdr, buffer, MAX_PACKET_SIZE);
  49.         return hdr;
  50.     }
  51.     else
  52.         return 0;
  53. }
  54.  
  55. int main()
  56. {
  57.         WSADATA wsaData;
  58.         unsigned long flag = 1;
  59.  
  60.         if(WSAStartup(0x0202, &wsaData)){ ShowError(); }
  61.         else
  62.         {
  63.                 std::cout << "WSAStartup - OK" << std::endl;
  64.                 SOCKET sock;
  65.                 sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);   // Create raw socket
  66.                 if(sock == INVALID_SOCKET){ ShowError(); }
  67.                 {
  68.                         std::cout << "Raw scoket is created" << std::endl;
  69.                         if(closesocket(sock)== SOCKET_ERROR) { ShowError(); }
  70.                 }
  71.  
  72.                 ioctlsocket(sock, SIO_RCVALL, &flag);
  73.  
  74.                 // Analyze packets
  75.                 while (true)
  76.                 {
  77.                         IPHeader* hdr = sniff(sock);
  78.                         // обработка IP-пакета
  79.                         if (hdr)
  80.                         {
  81.                                 unsigned char *byte_iterator = (unsigned char *)hdr;
  82.                                 for (int i = 0; i < sizeof(IPHeader); i++)
  83.                                 {
  84.                                         printf("%02x", *byte_iterator);
  85.                                         ++byte_iterator;
  86.                                 }
  87.                         }
  88.                 }
  89.                
  90.                 if(WSACleanup()) { ShowError(); }
  91.                 else
  92.                 { std::cout << "WSACleanup - OK" << std::endl;}
  93.         }
  94.        
  95.         return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement