Al construir un sistema con una estructura B/S, a menudo necesitamos obtener cierta información sobre el cliente, como IP y MAC, para poder combinarla con la autenticación de identidad. En ASP.NET, es fácil obtener la dirección MAC del servidor, pero requiere mucho esfuerzo obtener la dirección MAC del cliente. El método habitual es llamar a Win32API o llamar directamente al comando nbtstat. Hay muchos problemas con esto, y el otro El primer método es usar directamente scripts del lado del cliente. Aquí usamos Javascript. La ventaja de esto es que no requiere procesamiento del lado del servidor. al lado del servidor, y la velocidad y confiabilidad son mejores que obtenerlo en el lado del servidor.
La implementación específica de html y javascript es la siguiente:
<HTML><HEAD><TITLE>HTML de secuencias de comandos WMI</TITLE>
<META http-equiv=Tipo de contenido content="text/html; charset=gb2312">
<lenguaje SCRIPT=evento JScript="OnCompleted(hResult,pErrorObject, pAsyncContext)" para=foo>
document.forms[0].txtMACADdr.value=unescape(MACADdr);
document.forms[0].txtIPAddr.value=unescape(IPAddr);
document.forms[0].txtDNSName.value=unescape(sDNSName);
//document.formbar.submit();
</SCRIPT>
<lenguaje SCRIPT=evento JScript=OnObjectReady(objObject,objAsyncContext) for=foo>
if(objObject.IPEnabled!= nulo && objObject.IPEnabled!= "indefinido" && objObject.IPEnabled == verdadero)
{
if(objObject.MACAddress!= null && objObject.MACAddress!= "indefinido")
MACAddr = objObject.MACAddress;
if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "indefinido")
IPAddr = objObject.IPAddress(0);
if(objObject.DNSHostName!= null && objObject.DNSHostName!= "indefinido")
sDNSName = objObject.DNSHostName;
}
</SCRIPT>
<META content="MSHTML 6.00.2800.1106" nombre=GENERADOR></HEAD>
<CUERPO>
<OBJECT id=localizador classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
<lenguaje SCRIPT=JScript>
var servicio = localizador.ConnectServer();
varMACADr;
varIPAddr;
var DirecciónDominio;
var sDNSName;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
</SCRIPT>
<FORM id=formfoo nombre=formbar acción=NICPost.asp método=post><INPUT valor=00:05:5D:0E:C7:FA nombre=txtMACAddr> <INPUT valor=192.168.0.2 nombre=txtIPAddr > <valor de ENTRADA=tipo nombre=txtDNSName> </FORM></BODY></HTML>
La clave es utilizar dos ActiveX:
<OBJECT id=localizador classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
Sin embargo, estos dos ActiveX vienen con el sistema y no es necesario descargarlos ni registrarlos.
El siguiente paso es utilizar un script para interactuar con ActiveX. El script puede ser js o Vbs. A mí personalmente me gusta usar js.