Home » Tutorials » Netzwerk und Internet » Indy

Indy

ICMP (TIdICMPClient)

ICMP allgemein

ICMP (Internet Control Message Protocol) ist ein Protokoll, um Kontrollbotschaften zuversenden. Es wird insbesondere zur Diagnose von Verbindungsproblemen verwendet. Dabei werden vor allem Ping und TraceRoute verwendet. Bei Ping wird eine Anfrage an einen Host geschickt und eine Antwort aufgefangen. Dabei ist es interessant zu erfahren, ob eine Antwort zurückkommt und wie lange diese braucht. TraceRoute ist sozusagen eine Kette von Pings an verschiedene Rechner. Damit lässt sich nachverfolgen, welchen Weg eine Anfrage an einen Server nimmt. Alle Zwischenstationen melden zurück, wenn sie die Anfrage erhalten haben.
Siehe auch

IdICMPClient

Wir schreiben ein kleines Beispielprogramm, das einen Ping ausführt:

  Memo1.Clear;
  IdIcmpClient1.Host := edHost.Text;
  IdIcmpClient1.ReceiveTimeout := 5000;
  IdIcmpClient1.Ping;

  case IdIcmpClient1.ReplyStatus.ReplyStatusType of
    rsEcho:
      begin
        Memo1.Lines.Append(format('response from host %s in %d millisec.',
        [IdIcmpClient1.ReplyStatus.FromIpAddress,
        IdIcmpClient1.ReplyStatus.MsRoundTripTime]));
      end;
    rsError:
      Memo1.Lines.Append('Unknown error.');
    rsTimeOut:
      Memo1.Lines.Append('Timed out.');
    rsErrorUnreachable:
      Memo1.Lines.Append(format('Host %s reports destination network unreachable.',
      [IdIcmpClient1.ReplyStatus.FromIpAddress]));
    rsErrorTTLExceeded:
      Memo1.Lines.Append(format('Hope %d %s: TTL expired.',
      [IdIcmpClient1.ReceiveTimeout, IdIcmpClient1.ReplyStatus.FromIpAddress]));
  end; // case

Beispielprogramm