Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
14-1103697842
syte_ser78
2004-12-22 09:44
2005.01.23
Обращение к Харьковчанам.


14-1104479081
Vlad Oshin
2004-12-31 10:44
2005.01.23
Мир ПК номинировал в 2004г. сайты:


3-1103439966
Black
2004-12-19 10:06
2005.01.23
Пользаватели в SQL Server 2000


3-1103622666
ksa2002
2004-12-21 12:51
2005.01.23
Вопрос по типу данных Float


1-1105450596
VfloverW
2005-01-11 16:36
2005.01.23
Прозразчный TImage