Principales respuestas
Obtener MAC de la maquina y no la del servidor

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