Desenvolvimento - Visual Basic .NET

Introdução ao namespace System.Net.NetworkInformation do .NET 2.0

O .NET Framework 2.0 vem com diversos namespaces novos e o System.Net.NetworkInformation é um deles. Esse namespace contém classes para a manipulação de informações sobre uma rede, tais como a detecção de mudança de endereço, interfacess de redes conectadas, bytes enviados e recebidos, status da rede, etc.

por José Antonio Leal de Farias



Introdução

O .NET Framework 2.0 vem com diversos namespaces novos e o System.Net.NetworkInformation é um deles. Esse namespace contém classes para a manipulação de informações sobre uma rede, tais como a detecção de mudança de endereço, interfacess de redes conectadas, bytes enviados e recebidos, status da rede, etc. Neste artigo iremos discutir algumas destas classes.

A classe mais interessante deste namespace é a classe NetworkChange, que notifica uma aplicação sobre a mudança na rede em uma interface específica, tais como mudanças no estado de conexão. O MSN Messenger é um bom exemplo de aplicação que se conecta automaticamente quando uma rede está disponível e se desconecta automaticamente quando não há mais conexão com a internet.

A classe NetworkChange contém dois eventos estáticos chamados NetWorkAvailabilityChanged e NetworkAddressChanged que informam a aplicação da mudança de uma informação particular da rede. O exemplo a seguir informa ao usuário sobre mudanças na rede:

static void

{

NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged);

NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);

Console.WriteLine("Pressione Enter para sair...");

Console.ReadLine();

}

static void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)

{

Console.WriteLine("O endereço da rede foi modificado.");

}

static void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)

{

if (e.IsAvailable)

Console.WriteLine("Rede conectada");

else

Console.WriteLine("Rede desconectada");

}

Enumerando as interfaces de rede

A classe NetworkInterface é a classe que fornece acesso a uma placa ou interface de rede em particular. Ela contém várias propriedades, tais como Velocidade, Status, Tipo e o endereço MAC. O seguinte exemplo enumera todas as interfaces de rede instaladas no sistema:

NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

foreach (NetworkInterface ni in networkInterfaces)

{

Console.WriteLine("{0}, {1}, {2}, {3}", ni.Name, ni.Speed, ni.OperationalStatus, ni.NetworkInterfaceType);

}

Acessando estatísticas do protocolo IP

A classe IPv4InterfaceStatistics fornece acesso a informações estatísticas do protocolo IPv4 tais como bytes enviados/recebidos, pacotes enviados/recebidos, etc. Nós podemos acesso o objeto IPv4InterfaceStatistics chamando o método GetIPv4Statistics() do objeto NetworkInterface, como a seguir:

Console.WriteLine("Exibe o status do protocolo IPv4:");

NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

foreach (NetworkInterface ni in networkInterfaces)

{

Console.WriteLine(ni.Name);

IPv4InterfaceStatistics ipstats = ni.GetIPv4Statistics();

Console.WriteLine(ipstats.BytesReceived);

Console.WriteLine(ipstats.BytesSent);

}

Pingando uma interface de rede

Checar o estado de uma interface de rede (pingar) é um dos mais comuns problemas que os desenvolvedores encontram quando desenvolvem alguma aplicação em rede. O .NET 2.0 resolve esse problema simplesmente fornecendo a classe Ping que contém uma implementação padrão do protocolo ICMP. Veja o exemplo a seguir:

Ping p = new ();

PingReply reply = p.Send("127.0.0.1");

Console.WriteLine("Host respondeu em {0} ms", reply.RoundtripTime);

Console.WriteLine("Ping Status {0}", reply.Status);

Propriedades globais do IP

Se você perdeu qualquer informação de sua rede até agora você pode obtê-las de volta através das classes IPGlobalProperties e IPGlobalStatistics que contém diversos métodos e propriedades para se obter informações detalhadas da rede. A seguir dois exemplos de importantes tarefas que podem ser feitas com essas classes.

Enumerando os Listeners TCP ativos

IPGlobalProperties ipprops = IPGlobalProperties.GetIPGlobalProperties();

foreach (IPEndPoint listener in ipprops.GetActiveTcpListeners())

{

Console.WriteLine("Endereço = {0}, Porta = {1}",listener.AddressFamily, listener.Port);

}

Enumerando as conexões ativas e seus status

IPGlobalProperties ipprops = IPGlobalProperties.GetIPGlobalProperties();

foreach (TcpConnectionInformation conn in ipprops.GetActiveTcpConnections())

{

Console.WriteLine("De = {0}, Até = {1}, Status = {2}",

conn.LocalEndPoint.Address,

conn.RemoteEndPoint.Address,

conn.State);

}

Enumerando a configuração do IP Global

A classe IPGlobalProperties fornece informações detalhadas sobre praticamente todos os protocolos IP instalados no sistema, como o número IP de cada interface, routers, etc, como a seguir:

IPGlobalProperties ipprops = IPGlobalProperties.GetIPGlobalProperties();

IPGlobalStatistics ipstats = ipprops.GetIPv4GlobalStatistics();

Console.WriteLine(ipstats.NumberOfInterfaces);

Console.WriteLine(ipstats.NumberOfRoutes);

Console.WriteLine(ipstats.ReceivedPackets);

Conclusão

O .NET Framework 2.0 vem com um namespace chamado System.Net.NetworkInformation que fornece diversas classes para visualizar importantes informações de uma rede, sendo a mais importante delas a classe NetworkChange que envia notificações para mudanças na rede, tais como conexão, desconexão, mudança de endereço, etc.

José Antonio Leal de Farias

José Antonio Leal de Farias - Bacharel em ciências da computação pela UFCG e atualmente é Gerente de Pesquisa e Desenvolvimento da Light Infocon S.A. É programador profissional nas linguagens C++ e C#, líder do grupo de usuários CGSharp e adora Smartphones!
Veja seu blog em
http://thespoke.net/blogs/jalf/default.aspx.