Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

утилита для пингования   Найти похожие ветки 

 
bles   (2004-08-12 04:24) [0]

Коллеги! У меня WAN сеть, на ее концах сидят домохозяйки. Требуется очень дружественная утилита для пингованяи сети со стороны клиента. Воспользовался компонентом IdIcmpClient на вкладке Indy Clients. Отлично все работает, но только под Администратором, а под Юзером не хочет, пишет ...socket error...Access denied.
Может подскажете другой способ пингования. Или как этому компоненту разрешить пинговать от Юзера? Ответ типа ... посмотри политики безопасности неподходит.


 
TUser ©   (2004-08-12 04:47) [1]


> Или как этому компоненту разрешить пинговать от Юзера?

не работал я с indy, но думаю, что в больей степени это зависит от настроек системы, чем от компонента.


 
Fay ©   (2004-08-12 06:56) [2]

Попробуй synapse или ics


 
TUser ©   (2004-08-12 07:08) [3]

Там скорее всего обнаружится такая же фича. Видимо юзеру не позволено этого делать.


 
Fay ©   (2004-08-12 07:11) [4]

Написать службу, установить её под админом, юзать по юзерами, идти пить пиво.


 
Anatoly Podgoretsky ©   (2004-08-12 09:21) [5]

Зачем домохозяйкам пинговать, делать им больше нечего.


 
Vlad Oshin ©   (2004-08-12 10:12) [6]

запустить процесс от имени
попробовать вызвать ping.exe с перенаправлением


 
REA ©   (2004-08-12 10:25) [7]

Вот, например. Насчет дружественности не знаю.

Unit ICMP;

Interface
Uses Windows, Winsock, SysUtils;

Type

PIPOptions = ^TIPOptions;

TIPOptions = Packed Record
 Ttl: Byte;             // time to live
 Tos: Byte;             // type of service (usually 0)
 Flags: Byte;           // IP header flags (usually 0)
 OptionsSize: Byte;     // size of options data (usually 0, max 40)
 OptionsData: Pointer;  // options data buffer
End;

 PICMPEchoReply = ^TICMPEchoReply;

 TICMPEchoReply = Packed Record
   Address : Cardinal;      // source address
   Status  : Cardinal;      // IP status
   Rttime  : Cardinal;      // rount trip time in milliseconds
   Datasize: Word;          // reply data size
   Reserved: Word;          // who knows
   Data    : Pointer;       // reply data buffer
   Ip_options:TIPOptions;   // reply options
 End;

Const ICMPDLL = "ICMP.DLL";

 Function ICMPCreateFile:THandle; Stdcall; External ICMPDLL Name "IcmpCreateFile";
 Function ICMPCloseHandle(ICMPHandle: THandle):Boolean; Stdcall; External ICMPDLL Name "IcmpCloseHandle";
 Function ICMPSendEcho(ICMPHandle: THandle;      // handle returned from ICMPCreateHandle
                       DestAddress: Longint;      // destination IP address (network order)
                       RequestData: Pointer;      // pointer to buffer to send
                       RequestSize: Word;         // length of data in buffer
                       RequestOptns: PIPOptions;
                       ReplyBuffer: Pointer;      // see note
                       Replysize: DWORD;          // length of reply, minimum 1 reply
                       Timeout: DWORD            // time in milliseconds to wait for reply
                       ):DWORD; Stdcall; External ICMPDLL Name "IcmpSendEcho";

Function Ping(Host: String; Var PingTime: Integer; BlockSize, Timeout, TimeToLive: Integer): Boolean;

Implementation
Var WSAData: TWSAData;

Function Ping(Host: String; Var PingTime: Integer; BlockSize, Timeout, TimeToLive: Integer): Boolean;
Var ICMPHandle: THandle;
    RequestData, ReplyBuffer: Pointer;
    ReplySize: Integer;
    RequestOptions: TIPOptions;
    Address: Longint;
    RemoteHost: PHostEnt;
Begin
 Result := False;
 Try
  Address   := Winsock.Inet_Addr(PChar(Host));
  If (Address = SOCKET_ERROR) Then
  Begin
   RemoteHost:= Winsock.GetHostByName(PChar(Host));
   If (RemoteHost=Nil) Or (RemoteHost^.h_length<=0) Then Raise Exception.Create("Invalid host");
   Address   := Longint(Pointer(RemoteHost^.h_addr_list^)^);
  End;
  ICMPHandle := ICMPCreateFile;
  ReplySize:=16 + Sizeof(TICMPEchoReply) + BlockSize;
  GetMem(RequestData,BlockSize);
  FillChar(RequestData^,BlockSize,#0);
  GetMem(ReplyBuffer,ReplySize);
  Try
   With RequestOptions Do
   Begin
    TTL  := TimeToLive;    // a ping should live near infinity
    TOS  := 0;
    Flags:= 0;
    OptionsSize:=0;
    OptionsData:=Nil;
   End;
   If ICMPSendEcho(ICMPHandle,Address,RequestData,BlockSize,
                   @RequestOptions,ReplyBuffer,ReplySize,
                   Timeout) = 1 Then
   With  PICMPEchoReply(ReplyBuffer)^ Do
   Begin
    Result   := (Status = 0);
    PingTime := RTTime;
   End;
  Finally
   FreeMem(RequestData);
   FreeMem(ReplyBuffer);
   ICMPCloseHandle(ICMPHandle);
  End;
 Except End;
End;

Procedure Startup;
Var
 ErrorCode: Integer;
Begin
 ErrorCode := WSAStartup($0101, WSAData);
 If ErrorCode <> 0 Then Raise Exception.Create("WSAStartup bug");
End;

Procedure Cleanup;
Var
 ErrorCode: Integer;
Begin
 ErrorCode := WSACleanup;
 If ErrorCode <> 0 Then Raise Exception.Create("WSACleanup  bug");
End;

Initialization
 Startup;
Finalization
 Cleanup;
End.


 
Alex Konshin ©   (2004-08-12 10:26) [8]

Кого пинговать надо?
Используй UDP.


 
bles   (2004-08-13 07:30) [9]

Огромное спасибо REA.
Кокретный ответ на конкретный вопрос.
По поводу домохозяек, я могу только подсказать, что на каждый комп не хватит программеров, кто-то должен на каком нибудь полустанке вводить информацию о проходящих вагонах например. Найти на каждый пост продвинутого - не надо быть крупным руководителем, что бы понять, что это невозможно.
Вопрос ведь не стоял: надо пинговать или нет, а вопрос был: "...может кто подскажет как эту проблему решить средствами Дельфи." Как ее решить на Бэйсике я знаю, а надо на Дельфи.
С уважением,
P.S.
to РЕА    надеюсь код рабочий!  :-)


 
[serzh]   (2004-08-13 12:25) [10]

используй TPing из ICS! У меня пинговалка именно на нем сделана!


 
bles   (2004-08-18 06:22) [11]

To serzh

К сожалению не знаю, что такое ICS, это наверно Visual Component Lib?
Пожалуйста подскажите где ее взять.

С уважением,



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

Форум: "Сети";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.033 c
6-1092720965
serg128
2004-08-17 09:36
2004.10.24
Как принимать/отправлять сообщения при помощи TNMUDP?


1-1097529298
Интересующийся
2004-10-12 01:14
2004.10.24
Защита программы


3-1096451320
Term
2004-09-29 13:48
2004.10.24
Есть ли какиелибо утилиты для работы с MSSQL2000


1-1097470536
BillyJeans
2004-10-11 08:55
2004.10.24
Регулятор громкости на панели задач...


14-1096884524
WondeRu
2004-10-04 14:08
2004.10.24
Diamondback (delphi 9) - новая версия!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский