Javascript获取客户端IP和Mac的问题

曼尼叔叔 2011-10-09 01:48:36
用JavaScript获取客户端IP和Mac,在网上找的大多数都是类似方法,代码如下
<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<SCRIPT language=JScript event="OnCompleted(hResult,pErrorObject, pAsyncContext)" for=foo>
document.forms[0].txtMACAddr.value<iframe></iframe>=unescape(MACAddr);
document.forms[0].txtIPAddr.value=unescape(IPAddr);
document.forms[0].txtDNSName.value=unescape(sDNSName);
//document.formbar.submit();
</SCRIPT>

<SCRIPT language=JScript event=OnObjectReady(objObject,objAsyncContext) for=foo>
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>

<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY>
<OBJECT id=locator classid=CLSID:76A64158-CB41-11D1-8B02-00600806D9B6 VIEWASTEXT></OBJECT>
<OBJECT id=foo classid=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></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 id="formfoo" name="formbar" action="index.do" method="post"><INPUT value="00-11-11-B4-52-EF" name="txtMACAddr"> <INPUT value="210.42.38.50" name="txtIPAddr"> <INPUT value="zhupan" name="txtDNSName"> </FORM></BODY></HTML>


问题:
执行到var service = locator.ConnectServer();这句时报错,
Microsoft JScript 运行时错误: 对象不支持此属性或方法
上述代码保存到单独的html文件可以执行,请问是什么原因,或者还有其他更好的办法没?
...全文
403 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mcrotry 2011-10-09
  • 打赏
  • 举报
回复
人家把答案告诉你了,你视而不见
另外要补充几点:
1.此方案只能用于IE+windows客户端;
2.此方案适用于web应用程序,让客户端将应用程序站点放入安全站点,并确保启用activeX和js;
3.很多电脑有多个网络:1394接口,lan,wlan,3G上网卡,以及各种虚拟网络,
你需要区分这些网络,并且很多虚拟网络(比如互联星空)的MAC地址在所有的电脑上都是一样的,
如果你获取到这样的MAC地址是没有意义的

曼尼叔叔 2011-10-09
  • 打赏
  • 举报
回复
自己顶起来
曼尼叔叔 2011-10-09
  • 打赏
  • 举报
回复

<script id="clientEventHandlersJS" type="text/javascript" language="javascript">
function GetLocalNetInfo() {
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration");
var e = new Enumerator(properties);

for (; !e.atEnd(); e.moveNext()) {
var p = e.item();
if (p.IPAddress==null) {
continue;
}
document.write(p.IPAddress(0));
document.write(p.MACAddress);
document.write("<br/>");
}
}
GetLocalNetInfo()

</script>
用此法,则报错:Microsoft JScript 运行时错误: Automation 服务器不能创建对象。
求解
archu 2011-10-09
  • 打赏
  • 举报
回复
1. 使用IE浏览器访问这个页面URL,不是直接打开html文件之类
2. 工具->Internet 选项->安全,选择“自定义级别”,然后把以下两项设为“启用”
对标记为可安全执行脚本的ActiveX控件执行脚本
对没有标记为安全的ActiveX控件进行初始化和脚本运行
曼尼叔叔 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bossma 的回复:]

一个网页能获取客户端的Mac地址是危险的。

建议通过AJAX方式提交后台程序获取。
[/Quote]

你说的情况对,现在弹出框框没什么,只要取得的结果正确就行,如果知道的话,帮忙分析一下原因
曼尼叔叔 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gch_519 的回复:]

错误是在VS2010中执行时弹出的
[/Quote]

服务器端程序能取得到客户端机器IP和Mac,不能吧。
萤火架构 2011-10-09
  • 打赏
  • 举报
回复
在网络上运行时,一般会被阻止运行。
truecoffeefox 2011-10-09
  • 打赏
  • 举报
回复
必须用ie
然后在安全设置里选中启用为标记为安全的activex
萤火架构 2011-10-09
  • 打赏
  • 举报
回复
一个网页能获取客户端的Mac地址是危险的。

建议通过AJAX方式提交后台程序获取。
曼尼叔叔 2011-10-09
  • 打赏
  • 举报
回复
错误是在VS2010中执行时弹出的

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧