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
SystemA 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