Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2016
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.75 KB | None | 0 0
  1. bool Analizer::FindBlackwordsInData(char *Buffer, int Size, int &retWordPos)
  2. {
  3.     int counter = 0;
  4.     for (int pattern = 0; pattern < blacklist.size(); pattern++)
  5.     {
  6.         for (int i = 0; i < Size; i++)
  7.         {
  8.             if (blacklist[pattern].size() <= Size)
  9.             {
  10.                 if (Buffer[i] == blacklist[pattern].at(0))
  11.                 {
  12.                     for (int j = 0; j < blacklist[pattern].size(); j++)
  13.                     {
  14.                         if (Buffer[i + j] == blacklist[pattern].at(j))
  15.                         {
  16.                             counter++;
  17.                             if (counter == blacklist[pattern].size())
  18.                             {
  19.                                 retWordPos = pattern;
  20.                                 return true;
  21.                             }
  22.                         }
  23.                         else
  24.                         {
  25.                             counter = 0;
  26.                         }
  27.                     }
  28.                 }
  29.             }
  30.         }
  31.     }
  32.     return false;
  33. }
  34.  
  35. void Analizer::FilterTcpPacket(char *Buffer, int Size)
  36. {
  37.     unsigned short iphdrlen;
  38.  
  39.     // Накладываем IP-хедер на буффер
  40.     iphdr = (IPV4_HDR *)Buffer;
  41.     iphdrlen = iphdr->ip_header_len*4;
  42.  
  43.     memset(&source, 0, sizeof(source));
  44.     source.sin_addr.s_addr = iphdr->ip_srcaddr;
  45.  
  46.     memset(&dest, 0, sizeof(dest));
  47.     dest.sin_addr.s_addr = iphdr->ip_destaddr;
  48.  
  49.     // Накладывает TCP-хедер на буффер
  50.     tcpheader=(TCP_HDR *)(Buffer + iphdrlen);
  51.  
  52.     // Получаем IP отправителя
  53.     std::string src_ip(inet_ntoa(source.sin_addr));
  54.     // Получаем порт отправителя
  55.     int src_port = ntohs(tcpheader->source_port);
  56.     // И порт получателя
  57.     int dest_port = ntohs(tcpheader->dest_port);
  58.  
  59.     // Фильтруем по IP и порту отправителя. Если в таблице запрещенных адресов
  60.     // порт указан -1, отклоняем пакеты, отправленные с любого порта
  61.     auto it = forbidden_ip.find(src_ip);
  62.     if (it != forbidden_ip.end())
  63.     {
  64.         if (it->first == src_ip && (it->second == src_port || it->second == -1))
  65.         {
  66.             // Отбрасываем пакет
  67.             printf("\n###########################################################");
  68.             printf("\n###############  TCP PACKET REJECTED   ####################");
  69.             printf("\n##### REASON: IP = %s, PORT = %d #######", src_ip.c_str(), src_port);
  70.             printf("\n###########################################################\n");
  71.             return;
  72.         }
  73.     }
  74.  
  75.     // Фильтруем по данным
  76.     char *data = Buffer + iphdrlen + tcpheader->data_offset * 4;
  77.     int size_of_data = Size - tcpheader->data_offset * 4 - iphdr->ip_header_len * 4;
  78.     int blackword_pos = 0;
  79.     if (FindBlackwordsInData(data, size_of_data, blackword_pos))
  80.     {
  81.         // Отбрасываем пакет
  82.         printf("\n###########################################################");
  83.         printf("\n###############  TCP PACKET REJECTED   ####################");
  84.         printf("\n##### REASON: BLACKWORD %s #######", blacklist[blackword_pos]);
  85.         printf("\n###########################################################\n");
  86.         return;
  87.     }
  88.     // Пакет пропущен
  89.     PrintTcpPacket(Buffer, Size);
  90. }
  91.  
  92. void Analizer::PrintTcpPacket(char* Buffer, int Size)
  93. {
  94.     unsigned short iphdrlen;
  95.  
  96.     iphdr = (IPV4_HDR *)Buffer;
  97.     iphdrlen = iphdr->ip_header_len*4;
  98.  
  99.     tcpheader=(TCP_HDR *)(Buffer + iphdrlen);
  100.  
  101.     printf("\n\n***********************TCP Packet*************************\n");
  102.  
  103.     PrintIpHeader( Buffer );
  104.  
  105.     printf("\n");
  106.     printf("TCP Header\n");
  107.     printf(" |-Source Port : %u\n", ntohs(tcpheader->source_port));
  108.     printf(" |-Destination Port : %u\n", ntohs(tcpheader->dest_port));
  109.     printf(" |-Sequence Number : %u\n", ntohl(tcpheader->sequence));
  110.     printf(" |-Acknowledge Number : %u\n", ntohl(tcpheader->acknowledge));
  111.     printf(" |-Header Length : %d DWORDS or %d BYTES\n"
  112.     ,(unsigned int)tcpheader->data_offset,(unsigned int)tcpheader->data_offset*4);
  113.     printf(" |-CWR Flag : %d\n", (unsigned int)tcpheader->cwr);
  114.     printf(" |-ECN Flag : %d\n", (unsigned int)tcpheader->ecn);
  115.     printf(" |-Urgent Flag : %d\n", (unsigned int)tcpheader->urg);
  116.     printf(" |-Acknowledgement Flag : %d\n", (unsigned int)tcpheader->ack);
  117.     printf(" |-Push Flag : %d\n", (unsigned int)tcpheader->psh);
  118.     printf(" |-Reset Flag : %d\n", (unsigned int)tcpheader->rst);
  119.     printf(" |-Synchronise Flag : %d\n", (unsigned int)tcpheader->syn);
  120.     printf(" |-Finish Flag : %d\n", (unsigned int)tcpheader->fin);
  121.     printf(" |-Window : %d\n", ntohs(tcpheader->window));
  122.     printf(" |-Checksum : %d\n", ntohs(tcpheader->checksum));
  123.     printf(" |-Urgent Pointer : %d\n", tcpheader->urgent_pointer);
  124.     printf("\n");
  125.     printf(" DATA Dump ");
  126.     printf("\n");
  127.  
  128.     printf("IP Header\n");
  129.     PrintData(Buffer, iphdrlen);
  130.  
  131.     printf("TCP Header\n");
  132.     PrintData(Buffer+iphdrlen, tcpheader->data_offset * 4);
  133.  
  134.     printf("Data Payload\n");
  135.     PrintData(Buffer + iphdrlen + tcpheader->data_offset*4, (Size-tcpheader->data_offset * 4 - iphdr->ip_header_len * 4));
  136.  
  137.     printf("\n###########################################################");
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement