Hacer ping a una IP en C#

Saad Aslam 12 octubre 2023
Hacer ping a una IP en C#

Este tutorial le enseñará cómo hacer ping a una dirección IP utilizando el lenguaje informático C#.

Hacer ping a una IP en C#

La función Send() de la clase Ping toma el nombre de host o la dirección como sus parámetros y un valor de tiempo de espera. Si un mensaje se recibe con éxito, la función Send() devolverá un objeto PingReply.

Este objeto contendrá información sobre el mensaje de eco ICMP (Protocolo de mensajes de control de Internet) o, si no se recibe ningún mensaje correctamente, indicará la causa del error. Si no se recibe un mensaje de eco ICMP dentro del tiempo asignado por el parámetro de tiempo de espera, la propiedad Estado se cambiará a Tiempo agotado.

La propiedad Estado se establecerá en Éxito si un intento de enviar una solicitud de eco ICMP y obtener la respuesta de eco ICMP asociada tiene éxito.

Para comenzar, necesitaremos importar las bibliotecas y luego acceder a la clase Ping dentro de nuestra aplicación usando el espacio de nombres System.Net.NetworkInformation.

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

Cree una nueva clase llamada PingIP,, y luego, dentro de esa clase, escriba la función main() que se usará para iniciar la aplicación.

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

Ahora, necesitamos hacer un bloque try catch para probar si el código se está ejecutando correctamente.

Implementaremos cómo hacer ping a una IP en el bloque try. Si este no es el caso, debemos lanzar una excepción en el bloque catch.

try {
} catch {
}

Dentro del bloque try, necesitamos un objeto de tipo Ping para que todo funcione. Luego, solicitamos una respuesta del dispositivo o servidor al que hacemos ping.

Para hacer esto, debemos usar la función Send() mientras pasamos dos parámetros. El nombre del anfitrión aparecerá primero, seguido del tiempo restante.

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

Aplicamos una condición mediante una declaración if para garantizar que se reciba la respuesta.

if (reply != null) {
}

Después de eso, podemos obtener el valor usando los campos Estado, Hora y Dirección.

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

Dentro del bloque catch, mostraremos un mensaje de error si el código no se ejecuta correctamente.

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

Código fuente completo:

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");
      }
    }
  }
}

Producción :

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

También tenemos una función conocida como SendPingAsync() que puede usarse en lugar del método Send(). Esta función acepta una única entrada denominada hostNameOrAddress.

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

Para utilizar esta función, necesitamos usar la palabra clave async, como se ilustra a continuación.

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