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

Вниз

Функция типа ping а   Найти похожие ветки 

 
Саша ©   (2002-11-14 13:02) [0]

Нужна такая функция, пингавалка компа, если комп пингуется она возвращает true если нет false, подскажите как это реализовать. Заранее балодарен.


 
Kaban ©   (2002-11-14 14:38) [1]

см. статью реализация PING с помощью ICMP API. (


 
Ryser   (2002-11-14 14:50) [2]

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

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

PIPINFO = ^ip_option_information;
PVOID = Pointer;

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



Далее на какое-нибудь событие вызываешь следующее. Лишнее вырезал, так что могут остаться лишние begin, end - разберешся

// Создаем 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
Memo1.SetTextBuf("Error in call to "+
"WSAStartup().");
Memo1.Lines.Add("Error code: "+IntToStr(error));
//********************* НЕТ КАНАЛА

end;
pHostEn := gethostbyname(s);
error := GetLastError();
if (error <> 0) then
begin
Memo1.SetTextBuf("Error in call to"+
"gethostbyname().");
Memo1.Lines.Add("Error code: "+IntToStr(error));
//********************* НЕТ КАНАЛА

end;

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

// Посылаем ping-пакет
Memo1.Lines.Add("Pinging " +
pHostEn^.h_name+" ["+
inet_ntoa(destAddress)+"] "+
" with "+
IntToStr(sizeof(pingBuffer)) +
" bytes of data:");

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

error := GetLastError();
if (error <> 0) then
begin
Memo1.SetTextBuf("Error in call to "+
"IcmpSendEcho()");
Memo1.Lines.Add("Error code: "+IntToStr(error));




end;

// Смотрим некоторые из вернувшихся данных
Memo1.Lines.Add("Reply from "+
IntToStr(LoByte(LoWord(pIpe^.Address)))+"."+
IntToStr(HiByte(LoWord(pIpe^.Address)))+"."+
IntToStr(LoByte(HiWord(pIpe^.Address)))+"."+
IntToStr(HiByte(HiWord(pIpe^.Address))));
Memo1.Lines.Add("Reply time: "+IntToStr(pIpe.RTTime)+" ms");
IcmpCloseHandle(hIP);
WSACleanup();
FreeMem(pIpe);

end;



 
саша ©   (2002-11-15 07:22) [3]

Спасибо попробую.



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

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

Наверх




Память: 0.47 MB
Время: 0.019 c
1-82713
Kinda
2002-11-13 17:41
2002.11.25
Управление окнами


6-82885
VIB
2002-09-28 15:51
2002.11.25
Удаленнй сервис


6-82894
Serg T
2002-09-21 22:27
2002.11.25
Как скачать URL


3-82656
Geka
2002-11-06 09:01
2002.11.25
fast report


7-83015
dr.karter
2002-09-25 15:23
2002.11.25
Реестр