http://citforum.ru/nets/articles/ping/ Теперь для реализации пинга хоста мы:
создаем соединение;
вызываем ICMPSendEcho;
обрабатываем результат;
закрываем соединение.
Эти действия удобно оформить в виде процедуры:
procedure Ping (const Address, EchoString: PChar;
var PingReply: TsmICMP_Echo_Reply;
const PingTimeout: Integer = 500);
var
IPAddress: TipAddr;
ICMPPort: THandle;
begin
// Конвертация IP в понятный для API формат
IPAddress:= inet_addr (Address);
// Проверка корректности конвертации
if (IPAddress = INADDR_NONE) then
begin
raise Exception.Create ('Function call inet_addr failed. ' +
'The IP address is probably invalid.');
end;
// Открытие соединения
ICMPPort:= IcmpCreateFile ();
// Проверка правильности открытия
if (ICMPPort = INVALID_HANDLE_VALUE) then
begin
raise Exception.Create ('Function call IcmpCreateFile failed.');
end;
// Отправка запроса "пинг"
IcmpSendEcho (ICMPPort, IPAddress,
EchoString, Length (EchoString), nil,
@PingReply, SizeOf (PingReply), PingTimeout);
// Закрытие соединения
IcmpCloseHandle (ICMPPort);
end;
Теперь при использовании в коде программы конструкции:
Ping ('127.0.0.1',nil,Reply,5000);
в переменной Reply мы получим результат пинга.