  | 
	
		
	
	
		Создание мониторинга - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе | 
	 
	 
	
	
	
	
	
	
	
	
	
	
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            26.12.2013, 18:37
            
            
         | 
        
             
            #1
            
         | 
    
 
    
    
  
    | 
    
     | 
     
  
    | 
    
     | 
    
    
     | 
   
  
    
        Разведчик  
     | 
     
 
    
      
  
            
    
      
    
            
                 Регистрация: 05.11.2011  
                
                
                
                 Сообщений: 0
                   
 Популярность: 10  
                  
	 Сказал(а) спасибо: 0  
	
		
			
				Поблагодарили 0 раз(а) в 0 сообщениях
			
		
	 
     
 
             
                
               
                
       
                  
     | 
    
    
    
        
        
            
            
                 
                Создание мониторинга
             
             
            
        
        
        
            
               
    Добрый день! 
 
Пришла идея в офисе установить программку на сервере, которая бы контролировала включение клиентских ПК. 
Алгоритм: 
- Бросаем пинг на каждый ip если пинг проходит удачно (3 пакета из 3) записываем время включения. 
В офисе сеть построена на рабочей группе. 
 
Вопрос: как организовать команду ping? 
Желательно примерчик программки или кода (работоспособного) команды пинг 
 
Использую Delphi XE 4
     
         
        
        
        
        
        
        
        
        
            
                 
                
                    
                        Последний раз редактировалось vim.adm; 26.12.2013 в 18:41.
                    
                    
                
             
        
        
      | 
 
    | 
        
        
        
        
         
     | 
    
    
    
        
        
        
        
             
        
        
        
        
        
        
        
            
        
        
        
     | 
 
 
 
  
	 
	
		 
	 
 
	
	
		
	
	
    
        
            
             
            05.01.2014, 12: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, время: 16:23. 
		 
	 
 
 | 
  |