Pingen einer IP in C#

Saad Aslam 12 Oktober 2023
Pingen einer IP in C#

In diesem Tutorial erfahren Sie, wie Sie eine IP-Adresse mit der Computersprache C# anpingen.

Pingen Sie eine IP in C#

Die Send()-Funktion der Ping-Klasse nimmt den Hostnamen oder die Adresse als Parameter und einen Timeout-Wert. Wird eine Nachricht erfolgreich empfangen, gibt die Funktion Send() ein PingReply-Objekt zurück.

Dieses Objekt enthält entweder Informationen über die Echonachricht von ICMP (Internet Control Message Protocol) oder, wenn keine Nachricht erfolgreich empfangen wurde, die Ursache für den Fehler. Wenn eine ICMP-Echo-Nachricht nicht innerhalb der durch den Timeout-Parameter zugewiesenen Zeit empfangen wird, wird die Eigenschaft Status in TimedOut. geändert.

Die Eigenschaft Status wird auf Success gesetzt, wenn ein Versuch, eine ICMP-Echo-Anforderung zu senden und die zugehörige ICMP-Echo-Antwort zu erhalten, erfolgreich war.

Zunächst müssen wir die Bibliotheken importieren und dann über den Namensraum System.Net.NetworkInformation auf die Klasse Ping in unserer Anwendung zugreifen.

using System;
using System.Text;
using System.Net.NetworkInformation;

Erstellen Sie eine neue Klasse mit dem Namen PingIP, und schreiben Sie dann innerhalb dieser Klasse die Funktion main(), die zum Starten der Anwendung verwendet wird.

namespace PingProto {
  public class PingIP {
    static void Main(string[] args) {}
  }
}

Jetzt müssen wir einen try catch-Block erstellen, um zu testen, ob der Code richtig ausgeführt wird.

Wir werden implementieren, wie man eine IP im try-Block pingt. Ist dies nicht der Fall, müssen wir eine Ausnahme im catch-Block werfen.

try {
} catch {
}

Innerhalb des try-Blocks brauchen wir ein Objekt vom Typ Ping, um die Dinge in Gang zu bringen. Danach fordern wir eine Antwort von dem Gerät oder Server an, den wir anpingen.

Dazu müssen wir die Funktion Send() verwenden und dabei zwei Parameter übergeben. Der Name des Gastgebers wird zuerst angezeigt, gefolgt von der verbleibenden Zeit.

Ping myPing = new Ping();
PingReply reply = myPing.Send("192.168.18.84", 1000);

Wir wenden eine Bedingung mit einer if-Anweisung an, um sicherzustellen, dass die Antwort empfangen wird.

if (reply != null) {
}

Danach können wir den Wert über die Felder Status, Uhrzeit und Adresse abrufen.

Console.WriteLine("Status : " + reply.Status + " \nTime : " + reply.RoundtripTime.ToString() +
                  "\nAddress : " + reply.Address);

Innerhalb des catch-Blocks zeigen wir eine Fehlermeldung an, wenn der Code nicht erfolgreich ausgeführt wird.

catch {
  Console.WriteLine("An error occurred while pinging an IP");
}

Vollständiger Quellcode:

using System;
using System.Text;
using System.Net.NetworkInformation;

namespace PingProto {
  public class PingIP {
    static void Main(string[] args) {
      try {
        Ping myPing = new Ping();
        PingReply reply = myPing.Send("192.168.18.84", 1000);
        if (reply != null) {
          Console.WriteLine("Status of the Ping: " + reply.Status +
                            " \nTime of the Ping: " + reply.RoundtripTime.ToString() +
                            "\nIP Address of the Ping: " + reply.Address);
        }
      } catch {
        Console.WriteLine("An error occurred while pinging an IP");
      }
    }
  }
}

Ausgang:

Status of the Ping: Success
Time of the Ping: 0
IP Address of the Ping: 192.168.18.84

Wir haben auch eine Funktion namens SendPingAsync(), die anstelle der Send()-Methode verwendet werden kann. Diese Funktion akzeptiert eine einzelne Eingabe namens hostNameOrAddress.

PingReply reply = await myPing.SendPingAsync("192.168.18.84");

Um diese Funktion nutzen zu können, müssen wir das Schlüsselwort async verwenden, wie unten dargestellt.

static async Task Main(string[] args) {}
Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn