VB.NET - Obtendo o endereço MAC


Você sabe o que é o endereço MAC ?  Para compreender melhor o artigo vou dar uma breve introdução a respeito. Acompanhe-me...

MAC significa Media Access Control (Endereços MAC) e possuem 48 bits de tamanho expressos com doze dígitos hexadecimais. Eles são utilizados para identificar a placa de rede.

Os primeiros seis dígitos são administrados pelo consórcio IEEE e identificam o fabricante ou fornecedor da placa de rede ; os seis últimos são uma identificação da placa.

Não existem duas placas com o mesmo endereço MAC , ou seja, este endereço é único para cada placa de rede em cada computador. Os endereços MAC geralmente são gravados na memória ROM e copiados para a memória de RAM quando a placa de rede é iniciada.

Antes de sair da fábrica, o fabricante do hardware atribui um endereço físico a cada placa de rede. Esse endereço é programado em um chip na placa de rede. Como o endereço MAC está localizado na placa de rede, se a placa de rede fosse trocada em um computador, o endereço físico da estação mudaria para o novo endereço MAC. Há dois formatos para os endereços MAC: 0000.0c12.3456 ou 00-00-0c-12-34-56.

Em uma rede Ethernet, quando um dispositivo quer enviar dados para outro dispositivo, ele pode abrir um caminho de comunicação com o outro dispositivo usando o seu endereço MAC. Quando uma origem envia dados em uma rede, os dados carregam o endereço MAC do destino pretendido. Como esses dados trafegam pelos meios da rede, a placa de rede em cada dispositivo na rede verifica se o seu endereço MAC corresponde ao endereço de destino físico carregado pelo pacote de dados. Se não corresponder, a placa de rede descarta o pacote de dados. Se não houver correspondência, a placa de rede ignora o pacote de dados e permite que ele continue sua viajem pela rede até a estação seguinte.

Você pode obter informações sobre o endereço MAC da sua placa de rede usando o comando Ipconfig /all.

Agora que você já sabe o que o endereço MAC eu vou mostrar como você pode obter o endereço MAC da sua placa de rede usando o Visual Basic .NET.

Para poder obter sucesso neste empreitada vamos usar o namespace System.Management . Este namespace fornece um rico conjunto de informação de gerenciamento e eventos de gerenciamento sobre o sistema , dispositivos e aplicações relacionadas ao WMI - Windows Management Instrumentation. Através deles podemos consultar informações sobre aplicações , serviços e dispositivos do sistema.

Vamos então ao que interessa. Inicie um novo projeto no VS.NET do tipo Windows Application e no formulário padrão inclua um controle ListBox e um controle Button conforme figura abaixo:

Atenção :

- Eu estou usando o Visual Studio 2003 e poderá haver algumas diferenças na implementação das classes do namespace System.Management para versões anteriores.

Agora você vai precisar incluir uma referência a System.Management.dll no seu projeto. Para fazer isto clique com o botão direito sobre o nome do projeto e no menu suspenso selecione a opção : Add Reference. A seguir selecione o arquivo conforme a figura abaixo:

Feito isto você já pode partir para o código  da aplicação. No evento Click do botão de comando inclua o código abaixo:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim mc As System.Management.ManagementClass
Dim mo As System.Management.ManagementBaseObject

mc = New Management.ManagementClass("Win32_NetworkAdapterConfiguration")
Dim moc As Management.ManagementObjectCollection = mc.GetInstances

For Each mo In moc
    If mo.Item("IPenabled") = True Then
    ListBox1.Items.Add("Endereço MAC " & mo.Item("MacAddress"))
End If

Next
End Sub

Rode o projeto e clique no botão. Você irá obter o endereço MAC da placa de rede sua máquina (se ela existir ...). Abaixo o resultado para minha máquina e a comparação com o comando ipconfig /all:

Como viram o resultado obtido é idêntico ao do comando ipconfig /all. Portanto concluímos que funciona.

Se você estiver se perguntando para que serve isto eu vou dar uma pequena sugestão :

Como o endereço MAC é único você pode usar esta informação para controlar a instalação da sua aplicação em máquinas com o endereço MAC conhecidos protegendo assim sua aplicação.

Nota: Existe uma outra maneira de obter o endereço MAC usando o processo GetMac.exe. Funciona assim :

Você executa o processo GetMac.exe e redireciona o resultado para uma variável do seu programa. Este resultado é o endereço MAC. O código poderia ser implementado assim :

 Public Function EnderecoMac() As String

Dim end_Mac As String
Dim p As New Process

p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.FileName = "GetMac.exe"
p.StartInfo.Arguments = "/fo list"
p.Start()

end_Mac = p.StandardOutput.ReadLine
p.WaitForExit()
Return end_Mac.Substring(23)

End Function
 

Eu pessoalmente não recomendo muito este caminho pois ele depende de que esteja instalado o programa GetMac.exe na máquina e em testes que eu fiz o programa travou algumas vezes.

E por hoje é só ,  até mais ...


José Carlos Macoratti