|
Создание мониторинга - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
26.12.2013, 17:37
|
#1
|
|
|
|
Разведчик
|
Регистрация: 05.11.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Создание мониторинга
Добрый день!
Пришла идея в офисе установить программку на сервере, которая бы контролировала включение клиентских ПК.
Алгоритм:
- Бросаем пинг на каждый ip если пинг проходит удачно (3 пакета из 3) записываем время включения.
В офисе сеть построена на рабочей группе.
Вопрос: как организовать команду ping?
Желательно примерчик программки или кода (работоспособного) команды пинг
Использую Delphi XE 4
Последний раз редактировалось vim.adm; 26.12.2013 в 17:41.
|
|
|
05.01.2014, 11:34
|
#2
|
|
|
|
Разведчик
|
Регистрация: 05.11.2011
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Создание мониторинга
Задача решена, тема не актуальна.
кидаю кусок кода отвечающий за пинг
|
Цитата: |
|
|
|
|
|
|
|
|
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';
implementation
procedure TForm1.ip022Timer(Sender: TObject);
var
hIP : THandle;
pingBuffer : array [0..31] of Char;
pIpe : ^icmp_echo_reply;
pHostEn : PHostEnt;
wVersionRequested : WORD;
lwsaData : WSAData;
error : DWORD;
destAddress : In_Addr;
begin
try
// Создаем 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
Exit;
end;
pHostEn := gethostbyname('192.168.0.22');
error := GetLastError();
if (error <> 0) then
begin
if Label12.Caption='Доступен' then
begin
Label12.Caption:='Недоступен';
UniQuery4.SQL.Clear;
UniQuery4.SQL.Add('Insert INTO Status Value (''Зубарева Светлана Барисовна'',''192.168.0.22'','''+Label1.Caption+'' ','''+Label4.Caption+''',''Выключен'',''-'');');
UniQuery4.Active:=True;
end;
Exit;
end;
destAddress := PInAddr(pHostEn^.h_addr_list^)^;
IcmpSendEcho(hIP,
destAddress.S_addr,
@pingBuffer,
sizeof(pingBuffer),
Nil,
pIpe,
sizeof(icmp_echo_reply) + sizeof(pingBuffer),
100);
error := GetLastError();
if (error <> 0) then
begin
{ошибка или пинг не идет}
if Label12.Caption='Доступен' then
begin
Label12.Caption:='Недоступен';
UniQuery4.SQL.Clear;
UniQuery4.SQL.Add('Insert INTO Status Value (''Зубарева Светлана Барисовна'',''192.168.0.22'','''+Label1.Caption+'' ','''+Label4.Caption+''',''Выключен'',''-'');');
UniQuery4.Active:=True;
end;
Exit;
end;
{пинг прошел}
//pIpe.RTTime - показывает пинг
if Label12.Caption='Недоступен' then
begin
Label12.Caption:='Доступен';
UniQuery4.SQL.Clear;
UniQuery4.SQL.Add('Insert INTO Status Value (''Зубарева Светлана Барисовна'',''192.168.0.22'','''+Label1.Caption+'' ','''+Label4.Caption+''',''Включен'','''+IntToStr( pIpe.RTTime)+''');');
UniQuery4.Active:=True;
end;
IcmpCloseHandle(hIP);
WSACleanup();
FreeMem(pIpe);
except
end;
end; |
|
|
|
|
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 07:02.
|
|