Lors de la construction d'un système avec une structure B/S, nous avons souvent besoin d'obtenir certaines informations sur le client, telles que IP et MAC, afin de les combiner avec l'authentification d'identité. Dans ASP.NET, il est facile d'obtenir l'adresse MAC du serveur, mais cela demande beaucoup d'efforts pour obtenir l'adresse MAC du client. La méthode habituelle consiste à appeler Win32API ou à appeler directement la commande nbtstat. Il y a beaucoup de problèmes avec cela, et l'autre La première méthode consiste à utiliser directement des scripts côté client. Nous utilisons ici Javascript. L'avantage est qu'il ne nécessite pas de traitement côté serveur. côté serveur, et la vitesse et la fiabilité sont meilleures que celles obtenues côté serveur.
L'implémentation spécifique de HTML et Javascript est la suivante :
<HTML><HEAD><TITLE>Script HTML WMI</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<SCRIPT langage=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
document.forms[0].txtMACAdr.value=unescape(MACAdr);
document.forms[0].txtIPAddr.value=unescape(IPAddr);
document.forms[0].txtDNSName.value=unescape(sDNSName);
//document.formbar.submit();
</SCRIPT>
<SCRIPT langage=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
if(objObject.IPEnabled != null && objObject.IPEnabled != "indéfini" && objObject.IPEnabled == true)
{
if(objObject.MACAddress != null && objObject.MACAddress != "indéfini")
MACAddr = objObject.MACAddress ;
if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "indéfini")
AdresseIP = objObject.IPAddress(0);
if(objObject.DNSHostName != null && objObject.DNSHostName != "indéfini")
sDNSName = objObject.DNSHostName ;
}
</SCRIPT>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<CORPS>
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
<Langage SCRIPT=JScript>
var service = localisateur.ConnectServer();
varMACAdr;
varIPAdr;
var DomainAddr;
var NomSDNS ;
service.Security_.ImpersonationLevel=3;
service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration');
</SCRIPT>
<FORM id=formfoo name=formbar action=NICPost.asp method=post><INPUT value=00:05:5D:0E:C7:FA name=txtMACAdr> <INPUT value=192.168.0.2 name=txtIPAddr > <INPUT value=typ name=txtDNSName> </FORM></BODY></HTML>
La clé est d'utiliser deux ActiveX :
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></OBJECT>
Cependant, ces deux ActiveX sont fournis avec le système et n'ont pas besoin d'être téléchargés ou enregistrés.
L'étape suivante consiste à utiliser un script pour interagir avec ActiveX. Le script peut être js ou Vbs. J'aime personnellement utiliser js.