Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Посылка Raw IP-пакетов 
:(
    Опции темы
FF90h
Дата 10.8.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 1.7.2006
Где: Планета Земля

Репутация: нет
Всего: 1



 
   Есть у кого нибудь рабочий вариант посылки RAW пакетов? Пример из DRKB не правильно считает CheckSum  smile
 Или лучше алгоритм подсчета контрольной суммы для UDP smile  Заранее благодарен..
PM MAIL   Вверх
Snowy
Дата 10.8.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



WinCap пробовал? (PacketSendPacket)
PM MAIL   Вверх
FF90h
Дата 10.8.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 1.7.2006
Где: Планета Земля

Репутация: нет
Всего: 1



 пробовал,но ведь там же тоже нужно CheckSum считать .. 
 а как ты считал ?  smile 
PM MAIL   Вверх
Snowy
Дата 10.8.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484



Я никак не считал. Не требовалось.
А как считать - можно посмотреть в RFC.
PM MAIL   Вверх
FF90h
Дата 10.8.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 1.7.2006
Где: Планета Земля

Репутация: нет
Всего: 1





   Ох уж этот rfc ...
PM MAIL   Вверх
FF90h
Дата 11.8.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 1.7.2006
Где: Планета Земля

Репутация: нет
Всего: 1



Вот возможно кому нибудь пригодится  smile 
Под TCP только структуру поменять ..


Код

const Max_Packet = 10000;

type
  TPacketBuffer = Array[0..Max_Packet-1] of byte;

function GetCksum(
  FromIP      : String;
  iFromPort   : Word;
  ToIP        : String;
  iToPort     : Word;
  Data  : String;
  Var Buf         : TPacketBuffer
):word;
Type
  T_UDP_Header = record
    src_portno    : Word;
    dst_portno    : Word;
    udp_length    : Word;
    udp_checksum  : Word;
  end;
Var
  dwFromIP    : LongWord;
  dwToIP      : LongWord;

  iIPVersion  : Word;
  iTotalSize  : Word;
  udpHdr      : T_UDP_Header;

  iUdpSize    : Word;
  iUdpChecksumSize : Word;  
  cksum       : Word;
  ip_protocol : byte;

  Ptr         : ^Byte;

  procedure IncPtr(Value : Integer);  
  begin  
    ptr := pointer(integer(ptr) + Value);
  end;

  function checksum(var buf; len:integer):word;
  var
  p: pointer;
  sum: longint;
  i: integer;
  begin
   p:=@buf;
   sum:=0;
    for i:=1 to len div 2 do begin
     sum:=sum+word(p^);
     p:=pointer(longint(p)+2);
    end;
  if len mod 1<>0 then
    sum:=sum+byte(p^);

  sum:=(sum shr 16) + (sum and $ffff);
  sum:=sum+(sum shr 16);
  result:=word(NOT sum);
  end;

begin  
   dwFromIP    := inet_Addr(PChar(FromIP));
   dwToIP      := inet_Addr(PChar(ToIP));

    iUdpSize := sizeof(udpHdr) + length(Data);

    udpHdr.src_portno := htons(iFromPort) ;
    udpHdr.dst_portno := htons(iToPort) ;
    udpHdr.udp_length := htons(iUdpSize) ;
    udpHdr.udp_checksum := 0 ;

    iUdpChecksumSize := 0;

    ptr := @buf[0];
    FillChar(Buf, SizeOf(Buf), 0);


    Move(dwFromIP, ptr^, SizeOf(dwFromIP));
    IncPtr(SizeOf(dwFromIP));

    iUdpChecksumSize := iUdpChecksumSize + sizeof(dwFromIP);


    Move(dwToIP, ptr^, SizeOf(dwToIP));
    IncPtr(SizeOf(dwToIP));
    iUdpChecksumSize := iUdpChecksumSize + sizeof(dwToIP);

    IncPtr(1);
    inc(iUdpChecksumSize);

    ip_protocol:=$11; //UDP

    Move(ip_protocol, ptr^, sizeof(ip_protocol));
    IncPtr(sizeof(ip_protocol));
    iUdpChecksumSize := iUdpChecksumSize + sizeof(ip_protocol);


    Move(udpHdr.udp_length, ptr^, sizeof(udpHdr.udp_length));
    IncPtr(sizeof(udpHdr.udp_length));  
    iUdpChecksumSize := iUdpChecksumSize + sizeof(udpHdr.udp_length);


    move(udpHdr, ptr^, sizeof(udpHdr));
    IncPtr(sizeof(udpHdr));
    iUdpChecksumSize := iUdpCheckSumSize + sizeof(udpHdr);



    Move(Data[1], ptr^, Length(Data));
    IncPtr(Length(Data));

    iUdpChecksumSize := iUdpChecksumSize + length(Data);


    cksum := checksum(buf, iUdpChecksumSize);
    udpHdr.udp_checksum := cksum;
    result:=integer(htons(cksum));
end;


PM MAIL   Вверх
drkot
Дата 11.8.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 0
Всего: 8



FF90h, спасибо.
Пока не надо, но подход правильный - решил задачу - поделись. Чтоб люди юзая поиск найти смогли.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0455 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.