Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

PING   Найти похожие ветки 

 
Deimos ©   (2004-05-21 14:47) [0]

как организовать PING средствами KOL ?


 
Gandalf ©   (2004-05-21 15:48) [1]

В KOLIndy несмотря на то что он закрыт ping пашет, в KOLICS тоже...  
Последний работает через icmp.dll потом блокируемый.


 
Deimos ©   (2004-05-30 01:16) [2]

При попытке компиляции с использованием KOLICS компилятор выдает трёхэтажный мат по поводу KOLSysUtils мол, ошибки там.. и прочее
в чем дело??
KOLSysUtils лежал в пачке вместе с KOLICS.
компилятор - Delphi 5 + KOL 1.91


 
salut   (2004-05-30 20:30) [3]

comment on peut faire un proramme de ping avec delphi
est que il ya un composant delphi qui nous aide.
merci


 
Deimos ©   (2004-05-31 15:58) [4]

господа, если кто может перевести, переведите пожалуйста, а то я кроме английского и финского больше языков не знаю :((


 
Viman ©   (2004-06-01 11:01) [5]

2 Deimos
Не волнуйся, там похоже ничего существенного нет, на выпендреж смахивает :)
Найди если не знаешь как воспользоваться KOLIndy или KOLICS, то найди в инете на компонентик для ping(или исходник модуля(функции) просто - бывает)и переделай под KOL - изменения в отличие от Indy и ICS будут минимальными.


 
Gandalf ©   (2004-06-01 11:17) [6]

Под delphi5 нужен исправленый KOLSysutils


 
Deimos ©   (2004-06-02 00:50) [7]

как понять "исправленный " ?


 
maxx0   (2004-06-02 09:49) [8]

Зачем, простите, нужен КОЛ если это всё на API делается. Пример здесь же на сайте лежит. Адрес не помню, но поиск есть... На его основе сделано (почти без изменений):

unit ICMP;

interface

uses
 Windows, SysUtils, WinSock;

function ICMPInit(var ErrorMessage:String):Boolean;
function ICMPPing(Host:String;var ErrorMessage:String):Boolean;
function HostNameByAddress(Address:Integer):String;
function IpToString(IP:Cardinal):String;

type
 // Информация заголовка IP (Наполнение этой структуры и формат полей описан в RFC791.
 ip_option_information=packed record
   Ttl:Byte;  // Время жизни (используется traceroute-ом)
   Tos:Byte;  // Тип обслуживания, обычно 0
   Flags:Byte;  // Флаги заголовка IP, обычно 0
   OptionsSize:Byte; // Размер данных в заголовке, обычно 0, максимум 40
   OptionsData:Pointer;// Указатель на данные
 end;

 icmp_echo_reply=packed record
   Address:Cardinal; // Адрес отвечающего
   Status:Cardinal;    // IP_STATUS (см. ниже)
   RTTime:Cardinal;    // Время между эхо-запросом и эхо-ответом в миллисекундах
   DataSize:Word; // Размер возвращенных данных
   Reserved:Word; // Зарезервировано
   Data:Pointer; // Указатель на возвращенные данные
   Options:ip_option_information; // Информация из заголовка IP
 end;

 PIPINFO=^ip_option_information;
 PVOID=Pointer;

 TIcmpCreateFile=function:THandle;stdcall;
 TIcmpCloseHandle=function(IcmpHandle:THandle):BOOL;stdcall;
 TIcmpSendEcho=function(IcmpHandle:THandle;    // handle, возвращенный IcmpCreateFile()
                        DestAddress:Cardinal;    // Адрес получателя (в сетевом порядке)
                        RequestData:PVOID;     // Указатель на посылаемые данные
                        RequestSize:Word;      // Размер посылаемых данных
                        RequestOptns:PIPINFO;  // Указатель на посылаемую структуру
                                         // ip_option_information (может быть nil)
                        ReplyBuffer:PVOID;     // Указатель на буфер, содержащий ответы.
                        ReplySize:DWORD;       // Размер буфера ответов
                        Timeout:DWORD          // Время ожидания ответа в миллисекундах
                        ):DWORD;stdcall;

var
 IcmpCreateFile:TIcmpCreateFile;
 IcmpCloseHandle:TIcmpCloseHandle;
 IcmpSendEcho:TIcmpSendEcho;

 LibraryIsLoaded:Boolean=False;
 hLib:THandle;

implementation

function GetLastErrorMsg(Error:Cardinal):String;overload;
var
 Msg:array [Byte] of Char;
begin
 Error:=GetLastError;
 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,nil,Error,0,@Msg,255,nil);
 Result:=StrPas(@Msg);
end;

function GetLastErrorMsg:String;overload;
var
 Error:Cardinal;
begin
 Error:=GetLastError;
 Result:=GetLastErrorMsg(Error);
end;

function IpToString(IP:Cardinal):String;
var
 IPArr:packed record
   a4,a3,a2,a1:Byte;
 end absolute IP;
begin
 Result:=Format("%d.%d.%d.%d",[IPArr.a4,IPArr.a3,IPArr.a2,IPArr.a1]);
end;

function HostNameByAddress(Address:Integer):String;
var
 HostEnt:PHostEnt;
begin
 Result:="";
 HostEnt:=GetHostByAddr(@Address,4,PF_INET);
 if HostEnt<>nil then
   Result:=HostEnt^.h_name;
end;

function ICMPInit(var ErrorMessage:String):Boolean;
const
 ModuleName="icmp.dll";
 sIcmpCreateFile="IcmpCreateFile";
 sIcmpCloseHandle="IcmpCloseHandle";
 sIcmpSendEcho="IcmpSendEcho";
var
 lwsaData:WSAData;
begin
 ErrorMessage:="";
 Result:=False;

 hLib:=LoadLibrary("icmp.dll");
 if hLib=0 then begin
   ErrorMessage:=GetLastErrorMsg+" ("+ModuleName+")";
   Exit;
 end;

 IcmpCreateFile:=GetProcAddress(hLib,sIcmpCreateFile);
 if @IcmpCreateFile=nil then begin
   ErrorMessage:=sIcmpCreateFile+": "+GetLastErrorMsg;
   Exit;
 end;

 IcmpCloseHandle:=GetProcAddress(hLib,sIcmpCloseHandle);
 if @IcmpCreateFile=nil then begin
   ErrorMessage:=sIcmpCloseHandle+": "+GetLastErrorMsg;
   Exit;
 end;

 IcmpSendEcho:=GetProcAddress(hLib,sIcmpSendEcho);
 if @IcmpCreateFile=nil then begin
   ErrorMessage:=sIcmpSendEcho+": "+GetLastErrorMsg;
   Exit;
 end;

 Result:=True;
 LibraryIsLoaded:=True;

 if Result then begin
   WSAStartup($0101,lwsaData);
 end;
end;

function ICMPPing(Host:String;var ErrorMessage:String):Boolean;
var
 hIP:THandle;
 pingBuffer:array [0..31] of Char;
 pIpe:^icmp_echo_reply;
 pHostEn:PHostEnt;
 lwsaData:WSAData;
 Error:DWORD;
 destAddress:In_Addr;
 wVersionRequested : WORD;
begin
 Result:=False;
 // Создаем handle
 hIP := IcmpCreateFile();

 GetMem(pIpe,sizeof(icmp_echo_reply) + sizeof(pingBuffer));
 pIpe.Data := @pingBuffer;
 pIpe.DataSize := sizeof(pingBuffer);

 wVersionRequested:=MakeWord(1,1);
 Error:=WSAStartup(wVersionRequested,lwsaData);
 if (Error<>0) then begin
   ErrorMessage:=Trim(GetLastErrorMsg);
   Exit;
 end;

 pHostEn:=gethostbyname(PChar(Host));
 Error:=GetLastError();
 if (Error<>0) then begin
   ErrorMessage:=Trim(GetLastErrorMsg(Error))+" "+Host;
   Exit;
 end;

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

 IcmpSendEcho(hIP,
              destAddress.S_addr,
              @pingBuffer,
              sizeof(pingBuffer),
              nil,
              pIpe,
              sizeof(icmp_echo_reply) + sizeof(pingBuffer),
              5000);

 Error:=GetLastError();
 if (Error<>0) then begin
   ErrorMessage:=Trim(GetLastErrorMsg(Error));
   Exit;
 end;

 ErrorMessage:="Ответ от "+
               IntToStr(LoByte(LoWord(pIpe^.Address)))+"."+
               IntToStr(HiByte(LoWord(pIpe^.Address)))+"."+
               IntToStr(LoByte(HiWord(pIpe^.Address)))+"."+
               IntToStr(HiByte(HiWord(pIpe^.Address)))+
               " Время ответа: "+IntToStr(pIpe.RTTime)+" мсек";

 IcmpCloseHandle(hIP);
 WSACleanup();
 FreeMem(pIpe);

 Result:=True;
end;

end.

Сначала ICMPInit, потом ICMPPing


 
maxx0   (2004-06-02 09:52) [9]

Забыл сказать, что то лучше в отельном потоке делать :)


 
Gandalf ©   (2004-06-02 20:01) [10]

Пожалуй уже не в тему... icmp.dll тормознуто и блокируемо.

ЗЫ: Правда ICS так же сделано - я спрашивал автора, он говорит - меня все устраивает, а делать на RAW сокетах лень... В indy там постарались :)


 
iddqd   (2004-06-03 13:15) [11]

Если ещё интересно, то вот есть пример:
исходники - http://www.zahodi.o5.ru/files/pingator_sources.rar
exe-шник - http://www.zahodi.o5.ru/files/pingator.rar


 
Deimos ©   (2004-06-04 00:39) [12]

хм .. спасибо..
но кстати я слышал что майкрософт не собирается поддерживать icmp.dll в следующих версиях винд..
и вполне возможно, что один из следующих сервис-паков его уберет и из XP...
может на raw сокетах есть пример у кого ?
все unix-ы через них пингуют.. чем винды хуже ??


 
Gandalf ©   (2004-06-04 18:40) [13]

Indy разгреби... там это не сложно, в инете море примеров пинговалок, бери любую на api. Когда icmp.dll уберут ICS обновиться :) Если совсем лень могу порыть - но потоки сам будешь прикручивать :)



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.037 c
1-1105218966
Луарвик
2005-01-09 00:16
2005.01.23
Как склеить части файла?


1-1105425401
Коба
2005-01-11 09:36
2005.01.23
Запрет копирования в буфер из tRichEdit


1-1105280027
Skiner_Y
2005-01-09 17:13
2005.01.23
Как грузить DLL в ToolBar


1-1105516584
Zilog
2005-01-12 10:56
2005.01.23
Посоветуйте статью, где описано как писать плагины для своей прог


1-1105539322
Mishenka
2005-01-12 17:15
2005.01.23
Как из переменной типа TDateTime извлечь отдельно Time и Date?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский