none
Obter o MAC Address de Uma Maquina Desligada Na Rede RRS feed

  • Pergunta

  • Pessoal, Bom Dia.

    Hoje tem alguns softwares que faz isso, obter o MAC com as maquinas desligadas na rede, mas gostaria de saber se tem alguma rotina em C# que possa fazer a mesma coisa.

    Tenho varias maquinas aqui na empresa e preciso ligar elas remotamente, nesse caso preciso do MAC para ligar elas. Tenho um aplicativo em C# que faz varias rotinas, e gostaria de integrar essa função a ele.

    O código abaixo obtém o MAC, porem só se a maquina estiver ligada, passando o IP da maquina como parâmetro me retorna o MAC da maquina.

    public string MAC(string IPPC)
            {
                string MacPC = "";
                try
                {
    
                    IPAddress IP = IPAddress.Parse(IPPC);
                    byte[] macAddr = new byte[6];
                    uint macAddrLen = (uint)macAddr.Length;
    
                    if (SendARP((int)IP.Address, 0, macAddr, ref macAddrLen) != 0)
                        throw new Exception("Erro");
    
                    string[] str = new string[(int)macAddrLen];
                    for (int i = 0; i < macAddrLen; i++)
                        str[i] = macAddr[i].ToString("x2");
    
                    MacPC = string.Join(":", str);
    
    
                }
                catch (Exception x)
                {
                    MessageBox.Show("erro :" + x.Message.ToString());
                }
                return MacPC;
            }

    * OBS.  As maquinas já estão com a função wake on lan ativada.

    Desde já agradeço.

     


    domingo, 5 de junho de 2016 13:00

Respostas

  • Boa tarde Diogo,

    aqui segue dois exemplos de como obter o endereço MAC de máquinas off-line.

    public static string GetMACAddress1()
    {
        ManagementObjectSearcher objMOS = new ManagementObjectSearcher("Select * FROM Win32_NetworkAdapterConfiguration");
        ManagementObjectCollection objMOC = objMOS.Get();
        string macAddress = String.Empty;
        foreach (ManagementObject objMO in objMOC)
        {
            object tempMacAddrObj = objMO["MacAddress"];
    
            if (tempMacAddrObj == null) //Skip objects without a MACAddress
            {
                continue;
            }
            if (macAddress == String.Empty) // only return MAC Address from first card that has a MAC Address
            {
                macAddress = tempMacAddrObj.ToString();              
            }
            objMO.Dispose();
        }
        macAddress = macAddress.Replace(":", "");
        return macAddress;
    }

    public static string GetMACAddress2()
    {
        NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
        String sMacAddress = string.Empty;
        foreach (NetworkInterface adapter in nics)
        {
            if (sMacAddress == String.Empty)// only return MAC Address from first card  
            {
                //IPInterfaceProperties properties = adapter.GetIPProperties(); Line is not required
                sMacAddress = adapter.GetPhysicalAddress().ToString();
            }
        } return sMacAddress;
    }

    Atenciosamente.


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Thales F Quintas terça-feira, 21 de junho de 2016 20:41
    terça-feira, 21 de junho de 2016 19:27
    Moderador