方法一:
调用Windows的DOS命令,从输出结果中读取MAC地址:
public static String getMACAddress() {
String address = "";
String os = System.getProperty("os.name");if ( os != null && os.startsWith("Windows")) { try { String command = "cmd.exe /c ipconfig /all";Process p = Runtime.getRuntime().exec(command);BufferedReader br =new BufferedReader(new InputStreamReader(p.getInputStream()));String line;while ((line = br.readLine()) != null) { if (line.indexOf("Physical Address") > 0) { int index = line.indexOf(":");index += 2;address = line.substring(index);break;}}br.close();return address.trim();}catch (IOException e) { }}return address;}We can replace the "ipconfig" to "ping x.x.x.x" and "arp -a"...We can get the mac list...haha!!
缺点:只能取得服务器端MAC地址.如果要取得客户端的MAC地址,需用Applet.只针对MS-WIN系统.
方法二:
可以用JS或vbscript来调用WMI接口来获取Client端的MAC地址.
<html>
<head> <title>WMI Scripting HTML</title> <script FOR="foo" EVENT="OnCompleted(hResult,pErrorObject, pAsyncContext)" LANGUAGE="JScript">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> <script FOR="foo" EVENT="OnObjectReady(objObject,objAsyncContext)" LANGUAGE="JScript">if(objObject.IPEnabled != null && objObject.IPEnabled != "undefined" && objObject.IPEnabled == true)
{if(objObject.MACAddress != null && objObject.MACAddress != "undefined")
MACAddr = objObject.MACAddress;if(objObject.IPEnabled && objObject.IPAddress(0) != null && objObject.IPAddress(0) != "undefined")
IPAddr = objObject.IPAddress(0);if(objObject.DNSHostName != null && objObject.DNSHostName != "undefined")
sDNSName = objObject.DNSHostName;}
</script> </head> <body> <object classid="CLSID:76A64158-CB41-11D1-8B02-00600806D9B6" id="locator" VIEWASTEXT> </object> <object classid="CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223" id="foo"> </object><script LANGUAGE="JScript">
var service = locator.ConnectServer(); var MACAddr ; var IPAddr ; var DomainAddr; var sDNSName; service.Security_.ImpersonationLevel=3; service.InstancesOfAsync(foo, 'Win32_NetworkAdapterConfiguration'); </script> <form method="POST" action="NICPost.asp" id="formfoo" name="formbar"><input type=text name="txtMACAddr">
<input type=text name="txtIPAddr"> <input type=text name="txtDNSName"></form>
</body></html>关于WMI的详细信息可以参看MSDN:
平心而论,WMI的很强大的。原先需要动用重量级编程工具才能做到的事,现在用js/vbscript就可以做了。
获取多块网卡的MAC地址:if(objObject.MACAddress != null && objObject.MACAddress != "undefined"){
MACAddr = objObject.MACAddress; alert( MACAddr ); } 缺点:需要ActiveX支持.对MS-WIN系统有效.方法三:
想137口发送UDP查询:
WINDOWS平台的客户端(当获取时它转换为服务端角色),NETBIOS协议在137口上,我们只要向它的137口发送UDP查询,获取它的返回值就可以获取到它所有的网卡地址
.Net 技术探讨群 4151320
欢迎大家加入!!!