C# - Fazendo um ping via código


  Se você deseja verificar a disponibilidade de uma máquina na rede, pode fazer um ping via código usando a linguagem C#.

Ping é um programa básico da Internet que permite que um usuário verifique se um determinado endereço IP existe e pode aceitar requisições.



O ping é usado para fazer um diagnóstico e garantir que o computador host que o usuário está tentando acessar esteja realmente operando. Ele funciona enviando uma requisição de eco do Protocolo de Mensagens de Controle da Internet (ICMP) para uma interface especificada na rede e aguardando uma resposta.
(acesso em novembro/2011 - https://searchnetworking.techtarget.com/definition/ping )

Na linguagem C# temos a classe Ping do namespace System.Net.NetworkInformation para determinar se uma máquina esta disponível.

Os principais métodos da classe Ping são:

OnPingCompleted Aciona o evento PingCompleted
SendAsync Tentar enviar uma mensagem de echo do protocolo ICMP a um computador e receber uma mensagem de resposta de eco ICMP;
SendPingAsync Cancela todas as solicitações assíncronas pendentes para enviar uma mensagem de eco do protocolo ICMP e receber uma mensagem de resposta de eco ICMP;

A classe PingReply é usada para fornecer informações sobre status e os dados resultantes de uma operação Send ou SendAsync.

Vejamos um exemplo usando uma aplicação do tipo Console App(.NET Framework) no Visual Studio 2017 Community.

Este projeto usa a versão 7.3 da linguagem C# que incorpora novos recursos como Async Main, interpolação de strings ($ {}), diretiva using static, etc.

1- Os namespaces usados no projeto :

using System;
using System.Net.NetworkInformation;
using System.Threading.Tasks;
using static System.Console;

2 - No método Main

No método Main() temos um laço infinito onde o usuário informa a url que deseja pingar e a seguir chama o método TestaPing() passando a url informada.  Para sair basta teclar Enter.

3 - O método TestaPing()

O método TestaPing, crie uma instância da classe Ping e envia uma requisição ping usando o método SendPingAsync que é assíncrono e quando awaited retorna um PingReply que podemos examinar.

Usamos o evento PingCompleted para obter informações sobre o status da conclusão e os dados coletadaos pela chamada SendPingAsync.

4 -  O Evento PingCompleted

O evento PingCompleted usa o tipo de argumento PingCompletedEventArgs e. Se o ping foi cancelado ou ocorreu uma exceção essa informação pode ser acessada via propriedades Cancelled ou Error (que não estou tratando).

5 - O método ExibeInfoRepostaPing()

O método ExibeInfoRepostaPing mostra algumas das partes mais comuns dos dados que desejamos obter de um ping, como o RoundtripTime e o Status da resposta e podem ser acessados a partir das propriedades no PingReply.

Executando o projeto teremos o seguinte resultado:

A classe Ping usa uma mensagem de requisição de eco do ICMP (Internet Control Message Protocol)
definida no RFC 792. Se um computador não for atingido com sucesso pela solicitação de ping, não significa necessariamente que o computador está inacessível.

Muitos fatores podem evitar um ping com sucesso, além de a máquina estar off-line, a topologia de rede, firewalls, filtros de pacotes e servidores proxy todos podem interromper o fluxo normal de um pedido ping.

Por padrão, o Firewall do Windows desativa o tráfego ICMP, portanto, se você tiver dificuldades em pingar uma máquina, verifique as configurações do firewall nessa máquina.

Pegue o código do projeto aqui:   CShp_Ping.zip

"E disse Jesus: As raposas têm covis, e as aves do céu têm ninhos, mas o Filho do homem não tem onde reclinar a cabeça."
Mateus 8:20

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti