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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Братья и сетры подскажите по Icmp.dll, Братья и сетры подскажите по Icmp.dll 
:(
    Опции темы
GoingOnward
Дата 19.4.2007, 03:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.4.2007

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



Код

procedure ;
var
    hIP : THandle;
    pingBuffer : array of char;
    pIpe : ^icmp_echo_reply;
    pHostEn : PHostEnt;
    wVersionRequested : WORD;
    lwsaData : WSAData;
    error : DWORD;
    destAddress : In_Addr;
begin
   SetLength(pingBuffer,PackSize );
Try
    If Assigned(parent.FOnStart) Then parent.FOnStart(parent);
    parent.FIP := '';
    hIP := IcmpCreateFile();
    GetMem( pIpe, sizeof(icmp_echo_reply) + sizeof(pingBuffer));
    pIpe.Data := @pingBuffer;
    pIpe.DataSize := sizeof(pingBuffer);
    pIpe.Options.Ttl := parent.FTTL;

    wVersionRequested := MakeWord(1,1);
    error := WSAStartup(wVersionRequested,lwsaData);
    if (error <> 0) then
    begin
         parent.AddS('Ошибка при выполнении Ping : '+InttoStr(error));
         Exit;
    end;

    pHostEn := gethostbyname(pchar(parent.fHost));
    error := GetLastError();
    if (error <> 0) then
    begin
         parent.AddS('Ошибка при выполнении Ping : '+InttoStr(error));
         Exit;
    end;

     destAddress := PInAddr(pHostEn^.h_addr_list^)^;

    parent.FIP := inet_ntoa(destAddress);
    IcmpSendEcho(hIP,
                 destAddress.S_addr,
                 pingBuffer,
                 sizeof(pingBuffer),
                 Nil,
                 pIpe,
                 sizeof(icmp_echo_reply) + sizeof(pingBuffer),
                 parent.FTimeOut);

error := GetLastError();
if (error <> 0) then
begin
parent.AddS('Ошибка при выполнении Ping : '+InttoStr(error));
Exit;
end;

IcmpCloseHandle(hIP);
WSACleanup();
FreeMem(pIpe);
If Not Terminated Then
Pointer(parent.FPingThread) := Nil;
If Assigned(parent.FOnEnd) Then parent.FOnEnd(parent);
except
ShowMessage('Ошибка процедуры Execute!');
end;
end;


У меня одна трудная проблема, код я смог написать а вот проблему не решил :
В самом начале есть такая переменная - pingBuffer : array of char;
она служит для передачи инфы Рамера пакета для пинга.
В этом и есть проблема если я укажу так pingBuffer : array[0..19] of char;
то размер пакета будет 20 байт.
Вот собствено и проблема как мне указать на размер пакета из переменной
например есть переменная PackSize ??
Я пробывал SetLength(pingBuffer,PackSize );
не как вообще не идёт,IcmpSendEcho считает его за 0-е составляющие..
Вот и всё.
Можно ещё и так задать - как в этом коде можно указать чтоб размер пакета брлся из переменной PackSize : Integer;
Это вопрос думаю сложный так что нужен гуру как я ...... ахахахха

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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