Вопрос по сырым сокетам

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 9 Nov 2007.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Вот нашел пару примеров http://komsoft.ru/pma/gen_packet.htm
    http://milw0rm.com/exploits/1599 с сырыми сокетами.Но вот только все никак немогу понять каким местом и на какое крепятся все эти struct igmphdr struct ip_header struct udp_header и подобные к сокету :confused: :confused: Обьясните плиз кто знает.
     
  2. __mad

    __mad Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    100
    Likes Received:
    38
    Reputations:
    7
    они не к нему не крепятся... это структуры для разбора пакетов... заполнили и отправил пакет... и также принимать... кароч чтоб удобней было... канеш если ты все протоколы знаешь на изусь то можно просто вручную писать типа buf[]="\0x2\0x23.... так вот чтоб этого не делать и созданы эти структуры... знаю что не оч понятно объяснил, сорь : D
     
  3. gevara

    gevara Elder - Старейшина

    Joined:
    29 Nov 2006
    Messages:
    47
    Likes Received:
    7
    Reputations:
    5
    у каждого пакета есть IP заголовок - ip_header. это типа реализация IP протокола. на его основе может быть реализован более высокоуровневый протокол. например udp. таким образм получается след:

    ip_header
    udp_header

    или, скажем, tcp:

    ip_header
    tcp_header

    по сути дела структуры в буффере идут друг за другом. на практике лучше выделить буффер. указатель на начало буффера - указатель на структуру ip_header. затем указатель на структуру upd_header...
    Code:
    char packet[256];
    ip_header *p_iph;
    udp_header *p_udph;
    
    p_iph = (ip_header*)packet;
    p_udph = (udp_header*)(packet + sizeof(ip_header));
    ...
     
  4. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    А куда пихать данные которые к примеру нужно передать через Udp пакеты,и какой максимальный обьем данных можно передать в одном пакете транспортного протокола(к примеру того же Udp)?
     
  5. Delimiter

    Delimiter Banned

    Joined:
    8 Apr 2005
    Messages:
    317
    Likes Received:
    173
    Reputations:
    12
    протокольные пакеты вкладываются друг дружке в поле данных как МАТРЕШКА!
    данное действие называется ИНКАПСУЛЯЦИЕЙ.
    Вопрос должен все таки содержать информацию о том что ты собираешься делать
    разбирать пакеты на составляющие либо собираешься их собирать(КРАФТИТЬ)
    но в любом случае начинать освоение следует с переводных rfc которые лежат на
    citforum.ru
    .......
    теперь осталось сразу раставить точки ! Если собираешься работать слишком низко
    и разбирать даже ethernet пакеты , то забудь о RAW-socket , роусокеты ввели в w2k
    и постоянно пытаются заблокировать (они как правило не пропускают пакеты(ioctlsock) если нет
    приложения готового их обработать, поэтому снифинг будет урезанный.... крафтинг
    так же будет урезанный)
    Поэтому WinPcap тебе в руки!!! ЭТО НЕ RAW_SOCKET!!!
    Почуствуешь себя человеком -100%!
    По поводу максимального размера пакета для UDP ! Поскольку UDP пакеты не
    поддерживают дефрагментацию, то то что пошлешь то и получат ( на этом были
    построены первые Nuker-Ы. Модемы падали как яблоки , побеждал тот у кого скорость
    больше!)
     
    #5 Delimiter, 15 Nov 2007
    Last edited: 15 Nov 2007