1. Си / Говнокод #5401

    +144

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    b1=100+(int)(255.0*rand()/(RAND_MAX+100.0));
    b2=100+(int)(255.0*rand()/(RAND_MAX+100.0));
    b3=100+(int)(255.0*rand()/(RAND_MAX+100.0));
    b4=100+(int)(255.0*rand()/(RAND_MAX+100.0)); if(b1>255)
    sprintf(b1s,"%d",b1);
    sprintf(b2s,"%d",b2);
    sprintf(b3s,"%d",b3);
    sprintf(b4s,"%d",b4);
    strcat(b1s,".");
    strcat(b2s,".");
    strcat(b3s,".");
    strcat(b1s,b2s);
    strcat(b1s,b3s);
    strcat(b1s,b4s);
    iph->ip_src.s_addr = inet_addr (b1s);

    Some firewalls, such as ZoneAlarm Pro, detect SYN Flood and block the source IP address (see Figure 1). So we need to assign our spoofed source IP address a random number as shown below:

    http://linux.sys-con.com/node/34589

    вот какой шедевр откопал

    Запостил: danilissimus, 26 Января 2011

    Комментарии (6) RSS

    • свинство.
      b1 = 100 + floorl(drand48()*(255-100));
      b2 = 100 + floorl(drand48()*(255-100));
      b3 = 100 + floorl(drand48()*(255-100));
      b4 = 100 + floorl(drand48()*(255-100));
      iph->ip_src.s_addr = (b1<<24)|(b2<<16)|(b3<<8)|b4;

      или что-то в этом духе.
      самое смешное, что так как адрес все равно спуфнутый, то даже нетворк байт ордер не нужен...
      Ответить
      • iph->ip_src.s_addr = (int) (rand() << 16) | rand();

        а так не проще?
        Ответить
        • хез.

          оригинальный код пытается что бы все числа в адресе были в диапазоне от 100 до 255. (хотя по уму надо было бы до 254 - что бы случаем бродкаст адрес не получился.)

          ЗЫ ты исходишь из того RAND_MAX == 32767. хотя меньше оно не будет, а если и больше - то хуже не будет...
          Ответить
          • 255 совсем не обязательно быть широковещательным
            Ответить
            • тоже правда. проще было бы наверное просто самый нижний бит убить. тогда бы этот адрес не мог бы случайно совпасть с широковещательным.
              Ответить
          • >а если и больше - то хуже не будет...
            Будет: некоторые биты будут OR'ом двух рандомов. Т.е. распределение будет 0- 1/4 1 - 3/4. Если делать говнокодом то:
            (rand() << 16) ^ rand()
            А если немного нормально:
            COMPILE_TIME_ASSERT (RAND_MAX >= 32767);
            ip = (rand() << 16) | (rand() & 0xffff);
            Ответить

    Добавить комментарий