none
Obtener MAC de la maquina y no la del servidor RRS feed

  • Pregunta

  • Buen dia tengo un problema que quisiera me ayudaran a resolver, actualmente estoy guardando un registro en la base de datos del cual necesito identificar que usuario lo ha hecho pero como en esa parte de mi desarrollo no hay logueo, decidí realizarlo guardando la MAC del equipo y mientras probe el proyecto local me funciono perfectamente pero al montarlo a un servidor no me funciona igual debido a que todos los registros se me guardan con la misma MAC asi se hagan desde equipos diferentes, pienso que es por que me esta capturando la MAC del servidor y no la del equipo, Quisiera que me ayudaran a resolve este problema.

    El fragmento de codigo con el que capturo la mac es este 

     public string GetMACAddress()
            {
                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();
                        sMacAddress = adapter.GetPhysicalAddress().ToString();
                    }
                } return sMacAddress;
            }

    Gracias a quien pueda ayudarme

     
    martes, 15 de diciembre de 2015 19:28

Respuestas

  • hola

    No puedes obtener la MAC de la pc del usuario

    todo codigo .net que ejecutes estara en el servidor, para que funcione en el cliente debe ser codigo javascript

    pero javascript por temas de seguridad no pueden acceder a los recursos de la pc y menos aun a los datos de la placa de red

    Lo que planteas no se puede lograr, aconsejaria que implementes autenticacion, o quizas si estas en la misma red seguridad integrada con windows para que pasen las credenciales directamente al servidor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta El aprendiz martes, 15 de diciembre de 2015 21:51
    martes, 15 de diciembre de 2015 21:30

Todas las respuestas

  • hola

    No puedes obtener la MAC de la pc del usuario

    todo codigo .net que ejecutes estara en el servidor, para que funcione en el cliente debe ser codigo javascript

    pero javascript por temas de seguridad no pueden acceder a los recursos de la pc y menos aun a los datos de la placa de red

    Lo que planteas no se puede lograr, aconsejaria que implementes autenticacion, o quizas si estas en la misma red seguridad integrada con windows para que pasen las credenciales directamente al servidor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta El aprendiz martes, 15 de diciembre de 2015 21:51
    martes, 15 de diciembre de 2015 21:30
  • Buenas tardes estimado, 

    Estas en lo cierto ese código solo te almacena la MAC del servidor, en una aplicación de escritorio si funcionaría, por acá te dejo un código que me ha funcionado, espero también te funcione.

    public String ObtenerMac() {
                String ipUsuario = System.Web.HttpContext.Current.Request.UserHostAddress;
                String clienteIP = System.Web.HttpContext.Current.Request.UserHostAddress.ToString().Trim();
                Int32 ldest = inet_addr(clienteIP);
                Int32 lhost = inet_addr("");
                Int64 macinfo = new Int64();
                Int32 len = 6;
                int res = SendARP(ldest, 0, ref macinfo, ref len);
                String mac_src = macinfo.ToString("X");
                while (mac_src.Length < 12) {
                    mac_src = mac_src.Insert(0, "0");
                }
                String mac_dest = "";

                for (int i = 0; i < 11; i++) {
                    if (0 == (i % 2)) {
                        if (i == 10) {
                            mac_dest = mac_dest.Insert(0, mac_src.Substring(i, 2));
                        }
                        else {
                            mac_dest = "-" + mac_dest.Insert(0, mac_src.Substring(i, 2));
                        }
                    }
                }
                return mac_dest;
            }

    Saludos,



    Gerald Ortega Espinoza Managua, Nicaragua

    martes, 15 de diciembre de 2015 22:34
  • Está bien lo de enviar un ARP para obtener la MAC del equipo remoto... pero solo funciona si se encuentra en la misma red local que el servidor, los ARP no atraviesan los routers.
    miércoles, 16 de diciembre de 2015 15:47
  • Gerald gracias buen dia, el codigo me genera un error en las siquientes lineas

     Int32 ldest = inet_addr(clienteIP);
    Int32 lhost = inet_addr("");

    int res = SendARP(ldest, 0, ref macinfo, ref len);

    me subraya en rojo el inet_addr y SendARP

    no se si sea algo que uses en otro metodo o si se requiera algun Using para esto.

     
    miércoles, 16 de diciembre de 2015 15:58
  • Lo siento, se me olvidaba que tenes que tener definidos esos metodos

     

    [DllImport("Ws2_32.dll")]
            private static extern Int32 inet_addr(String ip);

            [DllImport("Iphlpapi.dll")]
            private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);

    Saludos


    Gerald Ortega Espinoza Managua, Nicaragua

    viernes, 18 de diciembre de 2015 23:10