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…