Usando ping em c #

Quando faço ping em um sistema remoto com windows ele diz que não há resposta, mas quando eu ping com c # ele diz sucesso. O Windows está correto, o dispositivo não está conectado. Por que meu código consegue executar o ping com sucesso quando o Windows não está?

Aqui está o meu 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"); } 

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

O uso do ping em C # é obtido usando o método Ping.Send(System.Net.IPAddress) , que executa uma solicitação de ping para o endereço IP ou URL válido fornecido e obtém uma resposta em retorno chamada Internet Control Message Protocol (ICMP). ) Pacote que contém um header de 20 bytes que contém os dados de resposta do servidor ping que recebeu a solicitação ping, o namespace .Net framework System.Net.NetworkInformation contém uma class chamada PingReply Class que possui propriedades projetadas para traduzir a resposta ICMP e fornecer informações úteis sobre a rede do servidor pingado, como:

  • IPStatus : Obtém o endereço do host que envia a resposta de eco do Protocolo de Mensagens de Controle da Internet (ICMP).
  • IPAddress : Obtém o número de milissegundos necessários para enviar uma solicitação de eco ICMP (Internet Control Message Protocol) e receber a mensagem de resposta de eco ICMP correspondente.
  • RoundtripTime (System.Int64) : Obtém as opções usadas para transmitir a resposta a uma solicitação de eco ICMP (Internet Control Message Protocol).
  • PingOptions (System.Byte []) : Obtém o buffer de dados recebidos em uma mensagem de resposta de eco ICMP (Internet Control Message Protocol).

A seguir, um exemplo simples usando WinForms para demonstrar como o ping funciona em c #, fornecendo endereço IP válido em textBox1 e clicando em button1 , estamos criando uma instância da Ping class , uma variável local de PingReply , string de variável local para armazenar o IP ou URL address, então nós atribuímos a variável local PingReply que criamos para o método ping Send, então nós inspecionamos se a requisição foi bem sucedida comparando o status da resposta com a propriedade IPAddress.Success status, em seguida extraímos da variável local PingReply informações que precisamos exibir para o usuário, que são descritas acima:

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