.NET

30 jul, 2009

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

Publicidade

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 veremos 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 está 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 está habilitada para
receber pacotes multicast.
Speed Obtém um valor
Long que identifica a velocidade (em bits por segundo) da
interface como informada pela interface (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 à informação da configuração TCP/IP
para a interface. As propriedades do objeto
IPInterfaceProperties fornecem 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 à 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:

  • A propriedade LoopbackInterfaceIndex
    que retorna um inteiro identificando o índice da
    interface loopback no interior do array NetworkInterface
    retornado pelo método GetAllNetworkInterfaces;
  • O método GetIsNetworkAvailable
    que retorna um valor boleano indicando se qualquer
    conexão de rede está disponível, ou seja, o valor de OperationalStatus
    está definido como Up.

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 às 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 endereco fisico.

txtEnderecoFisico.Text = " Endereco Fisico : " & ni.GetPhysicalAddress().ToString()

' relatorio de informacao basica da interface

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

lstInterfaceLocal.Items.Add(" Descricao : " & 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 interface

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

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

' Informa a configuracao do IP

lstInterfaceLocal.Items.Add(" Enderecos 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("Nao ha rede local disponivel")

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…