Cuando hago ping a un sistema remoto con Windows, dice que no hay respuesta, pero cuando hago ping con c # dice éxito. Windows es correcto, el dispositivo no está conectado. ¿Por qué mi código puede hacer ping con éxito cuando Windows no?
Aquí está mi código:
Ping p1 = new Ping();
PingReply PR = p1.Send("192.168.2.18");
// check when the ping is not success
while (!PR.Status.ToString().Equals("Success"))
{
Console.WriteLine(PR.Status.ToString());
PR = p1.Send("192.168.2.18");
}
// check after the ping is n success
while (PR.Status.ToString().Equals("Success"))
{
Console.WriteLine(PR.Status.ToString());
PR = p1.Send("192.168.2.18");
}

PR.Address,PR.RoundtripTime,PR.reply.Buffer.Length, yPR.Options.Ttl)? ¿También está seguro de que tiene la dirección IP correcta en su código y no una dirección IP de prueba?Respuestas:
using System.Net.NetworkInformation; public static bool PingHost(string nameOrAddress) { bool pingable = false; Ping pinger = null; try { pinger = new Ping(); PingReply reply = pinger.Send(nameOrAddress); pingable = reply.Status == IPStatus.Success; } catch (PingException) { // Discard PingExceptions and return false; } finally { if (pinger != null) { pinger.Dispose(); } } return pingable; }fuente
using (var pinger = new Ping()) { .. }y son tan malos los retornos anticipados?usingen su lugar, y se prefiere en este caso.El uso de ping en C # se logra mediante el método
Ping.Send(System.Net.IPAddress), que ejecuta una solicitud de ping a la dirección IP o URL proporcionada (válida) y obtiene una respuesta que se denomina paquete de Protocolo de mensajes de control de Internet (ICMP) . El paquete contiene un encabezado de 20 bytes que contiene los datos de respuesta del servidor que recibió la solicitud de ping. ElSystem.Net.NetworkInformationespacio de nombres de .Net framework contiene una clase llamadaPingReplyque tiene propiedades diseñadas para traducir laICMPrespuesta y brindar información útil sobre el servidor al que se hizo ping, como:El siguiente es un ejemplo simple que se usa
WinFormspara demostrar cómo funciona el ping en c #. Al proporcionar una dirección IP válidatextBox1y hacer clicbutton1, estamos creando una instancia de laPingclase, una variable localPingReplyy una cadena para almacenar la dirección IP o URL. AsignamosPingReplyalSendmétodo de ping , luego inspeccionamos si la solicitud fue exitosa comparando el estado de la respuesta con elIPAddress.Successestado de la propiedad . Finalmente, extraemos dePingReplyla información que necesitamos mostrar al usuario, que se describe anteriormente.using System; using System.Net.NetworkInformation; using System.Windows.Forms; namespace PingTest1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Ping p = new Ping(); PingReply r; string s; s = textBox1.Text; r = p.Send(s); if (r.Status == IPStatus.Success) { lblResult.Text = "Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful" + " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n"; } } private void textBox1_Validated(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(textBox1.Text) || textBox1.Text == "") { MessageBox.Show("Please use valid IP or web address!!"); } } } }fuente
Importaciones System.Net.NetworkInformation
Función pública PingHost (ByVal nameOrAddress As String) As Boolean Dim pingable As Boolean = False Dim pinger Como Ping Dim lPingReply Como PingReply
Try pinger = New Ping() lPingReply = pinger.Send(nameOrAddress) MessageBox.Show(lPingReply.Status) If lPingReply.Status = IPStatus.Success Then pingable = True Else pingable = False End If Catch PingException As Exception pingable = False End Try Return pingable End Functionfuente
private void button26_Click(object sender, EventArgs e) { System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo(); proc.FileName = @"C:\windows\system32\cmd.exe"; proc.Arguments = "/c ping -t " + tx1.Text + " "; System.Diagnostics.Process.Start(proc); tx1.Focus(); } private void button27_Click(object sender, EventArgs e) { System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo(); proc.FileName = @"C:\windows\system32\cmd.exe"; proc.Arguments = "/c ping " + tx2.Text + " "; System.Diagnostics.Process.Start(proc); tx2.Focus(); }fuente