Thema: LuckiePing

Einzelnen Beitrag anzeigen

Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#164

AW: LuckiePing

  Alt 26. Aug 2010, 15:46
Hallo Speedy08,

ich bin zwar nicht der Luckie, ich hab es mir aber trotzdem mal angeschaut. Dadurch, dass die Sourcen dabei sind, kannst du dir ja die EXE selber neu bauen. Du brauchst nur in der Unit retPing.pas in der function ICMPPing(Ip: DWORD): boolean; in der Zeile DW := IcmpSendEcho(Handle, in_addr(Ip), nil, 0, nil, @rep, 128, 0); aus dem letzten Parameter (der ist zuständig für den TimeOut aus der 0 z.B. eine 100 machen (= 100 ms).

Dann scheint es schon zu Funktionieren.

Wenn man es Debuggen möchte kann man sich auch noch etwas mehr Infos dazu holen. Einfach folgendes noch nach dieser Zeile einfügen:
Delphi-Quellcode:
  if DW = 0 then
  begin
    DW := GetLastError;
    OutputDebugString(PChar(SysErrorMessage(DW) + ' -> ' + IntToStr(DW)));
  end;
Mit hilfe der folgenden Tabelle die ich von hier habe, kann man aus den Codes wie ich finde noch etwas mehr lesen:
Delphi-Quellcode:
   Const IP_SUCCESS = 0
   Const INADDR_NONE = &HFFFFFFFF
   Const IP_BUF_TOO_SMALL = (11000 + 1)
   Const IP_DEST_NET_UNREACHABLE = (11000 + 2)
   Const IP_DEST_HOST_UNREACHABLE = (11000 + 3)
   Const IP_DEST_PROT_UNREACHABLE = (11000 + 4)
   Const IP_DEST_PORT_UNREACHABLE = (11000 + 5)
   Const IP_NO_RESOURCES = (11000 + 6)
   Const IP_BAD_OPTION = (11000 + 7)
   Const IP_HW_ERROR = (11000 + 8)
   Const IP_PACKET_TOO_BIG = (11000 + 9)
   Const IP_REQ_TIMED_OUT = (11000 + 10)
   Const IP_BAD_REQ = (11000 + 11)
   Const IP_BAD_ROUTE = (11000 + 12)
   Const IP_TTL_EXPIRED_TRANSIT = (11000 + 13)
   Const IP_TTL_EXPIRED_REASSEM = (11000 + 14)
   Const IP_PARAM_PROBLEM = (11000 + 15)
   Const IP_SOURCE_QUENCH = (11000 + 16)
   Const IP_OPTION_TOO_BIG = (11000 + 17)
   Const IP_BAD_DESTINATION = (11000 + 18)
   Const IP_ADDR_DELETED = (11000 + 19)
   Const IP_SPEC_MTU_CHANGE = (11000 + 20)
   Const IP_MTU_CHANGE = (11000 + 21)
   Const IP_UNLOAD = (11000 + 22)
   Const IP_ADDR_ADDED = (11000 + 23)
   Const IP_GENERAL_FAILURE = (11000 + 50)
   Const IP_PENDING = (11000 + 255)
   Const PING_TIMEOUT = 500
@Luckie:
Ich weiß ja, dass diese Unit's nicht von Dir sind, dennoch würde ich hier bei anders vorgehen:
Delphi-Quellcode:
function ICMPPing(Ip: DWORD): boolean;
var
  Handle : THandle;
  DW : DWORD;
  rep : ICMP_ECHO_REPLY;// hier nicht ein Array von 1..128 of Byte
begin
  result := false;
  Handle := IcmpCreateFile;
  if Handle = INVALID_HANDLE_VALUE then Exit;
  DW := IcmpSendEcho(Handle, in_addr(Ip), nil, 0, nil, @rep, sizeOf(rep), 100); // hier immer sizeOf(rep) anstatt fix die Zahl 128
  Result := (DW <> 0);
  if DW = 0 then
  begin
    DW := GetLastError;
    OutputDebugString(PChar(SysErrorMessage(DW) + ' -> ' + IntToStr(DW)));
  end;
  
  IcmpCloseHandle(Handle);
end;
Aber das nur anbei. Es funktioniert ja auch so wie es ist, wenn man noch den TimeOut hinzufügt.

Gruß, Chris
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat