VB .NET - Obtendo informações da rede local


A plataforma .NET inclui um conjunto de classes para tratar diversos aspectos relacionados com redes. Essas classes suportam quase tudo sobre programação baeada em sockets através do protocolo de controle de transmissão (TCP/IP) para efetuar o download de arquivos e páginas HTML a partir da web sobre o protocolo HTTP.

Neste artigo abordarei como realizar algumas tarefas relacionadas com redes locais e ambiente cliente/servidor usando as classes da plataforma .NET.

1- O obtendo informações sobre a configuração da rede local

Para obter informações sobre a rede local usamos o método GetAllNetworkInterfaces da classe NetWorkInterface do namespace System.NetworkInformation.

Neste caso iremos obter um array de objetos derivados a partir da classe abstrata NetworkInterface onde cada objeto representa uma interface de rede disponível na máquina local.

Usamos os membros de cada objeto NetworkInterface para retornar a informação sobre a configuração de rede e as estatísticas para a interface. Este recurso esta disponível a partir da versão 2.0 da plataforma .NET.

A seguir temos nas tabelas abaixo as propriedades e métodos da classe NetworkInterface:

- Propriedades

Membro Descrição
Description Obtêm uma String que fornece uma descrição geral da interface.
Id Obtêm uma String que contém um identificador único da interface
isReceiveOnly Obtêm um valor boleano que indica se a interface pode somente receber ou receber/enviar dados.
Name Obtêm uma string contendo o nome da interface
NetworkInterfaceType Obtêm um valor a partir da enumeração System.Net.NetworkInformation.NetworkInterfaceType que identifica o tipo de interface. Os valores comuns incluem: Ethernet, FastEthernet and LoopBack.
OperationalStatus Obtêm um valor a partir da enumeração System.Net.NetworkInformation.OperationalStatus que identifica o estado da interface. Valores padrão incluem: Down e Up.
SupportsMulticast Obtêm um valor boleano que indica se a interface esta habilitada para receber pacotes multicast.
Speed Obtêm um valor Long que identifica a velocidade (em bits por segundo) da interface como informada pela in terface (não baseada em um cálculo dinâmico)

- Métodos

Membro Descrição
GetIPProperties Retorna um objeto System.Net.NetworkInformation.IPInterfaceProperties que fornece acesso a informação da configuração TCP/IP para a interface. As propriedades do objeto IPInterfaceProperties fornece acesso ao WINS, DNS, gateway e configuração do endereço IP.
GetIPv4Statistics Retorna um objeto System.Net.NetworkInformation.IPv4InterfaceStatistics que fornece acesso às estatísticas TCP/IP v4 para a interface. As propriedades do objeto IPv4InterfaceStatistics fornecem o acesso a informação sobre bytes enviados e recebidos, pacotes enviados e recebidos, pacotes descartados e pacotes com erros.
GetPhysicalAddress Retorna um objeto System.Net.NetworkInformation.PhysicalAddress que fornece acesso ao endereço físico da interface. Você pode obter o endereço físico como um array de Byte usando o método PhysicalAddress.GetAddressBytes ou como uma string usando PhysicalAddress.ToString.
Supports Retorna um valor boleano indicando se a interface suporta um protoco específico. Você especifica o protocolo usando um valor a partir da enumeração System.Net.NetworkInformation.NetworkInterfaceComponent. Os valores possíveis incluem IPv4 e IPv6.

A classe NetworkInterface também fornece outros membros estáticos (Shared) que podem ser úteis como:

Vejamos então um exemplo prático que usa os membros da classe NetworkInterface para exibir a informação sobre todas as interfaces de rede na máquina local:

Crie um novo projeto no Visual Basic 2008 Express Edition com o nome de infoRedeLocal;

No formulário padrão inclua os componentes: TextBox, ListBox e Button conforme o leiaute da figura abaixo:

Agora defina os namespaces que iremos usar para poder ter acesso as classes e obter informação sobre a rede local;

Imports System
Imports
System.Net.NetworkInformation

A seguir vamos definir uma rotina chamada verificaRedeLocal() que será chamada para usar as classes da plataforma .NET e obter informações da rede local. O código é dado abaixo:

Private Sub verificaRedeLocal()
 

If NetworkInterface.GetIsNetworkAvailable Then

   ' Obtem e define todos os objetos NetworkInterface para a maquina local

     Dim interfaces As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
 

    ' Percorre as interfaces e exibe informa‡Æo

    For Each ni As NetworkInterface In interfaces

         ' relatorio endere‡o fisico.

       txtEnderecoFisico.Text = " Endereco F¡sico : " & ni.GetPhysicalAddress().ToString()

        ' relatorio de informa‡Æo b sica da interface

       lstInterfaceLocal.Items.Add(" Nome da Interface: " & ni.Name)

       lstInterfaceLocal.Items.Add(" Descri‡Æo : " & ni.Description)

       lstInterfaceLocal.Items.Add(" ID : " & ni.Id)

       lstInterfaceLocal.Items.Add(" Tipo : " & ni.NetworkInterfaceType)

       lstInterfaceLocal.Items.Add(" Velocidade : " & ni.Speed)

       lstInterfaceLocal.Items.Add(" Status : " & ni.OperationalStatus)

         ' Relatorio para estatistica de rede para a i nterface

       lstInterfaceLocal.Items.Add(" Bytes enviados : " & ni.GetIPv4Statistics().BytesSent)

       lstInterfaceLocal.Items.Add(" Bytes Recebidos: " & ni.GetIPv4Statistics.BytesReceived)

          ' Informa a configura‡Æo do IP

       lstInterfaceLocal.Items.Add(" Endere‡os IP:")
 

          For Each addr As UnicastIPAddressInformation In ni.GetIPProperties.UnicastAddresses

            lstConfiguracaoIP.Items.Add("contrato/validade " & addr.Address.ToString & (DateTime.Now.AddSeconds(addr.DhcpLeaseLifetime)).ToString)

          Next

      Next

Else

     MsgBox("NÆ h  rede local dispon¡vel")

End If

End Sub

Agora no evento Click do botão de comando inclua o código abaixo que chama a rotina criada acima:

Private Sub btnExibir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExibir.Click

    verificaRedeLocal()

End Sub

Executando o projeto em minha máquina local o resultado obtido foi o seguinte:

O resultado pode variar para cada máquina dependendo da placa de rede e da configuração da mesma.

Pegue o projeto completo aqui: infoRedeLocal.zip

Eu sei é apenas VB .NET, mas eu gosto...

Referências:


José Carlos Macoratti