javascript利用wmi获取客户端网卡信息
本文系转载 近因工作所需,需要获取客户端网卡信息,试过多种方法,如使用VC写Activex控件,但此法需对控件签名,否则如果IE浏览器安全级别设置较高控件可能经常被提示 而且很有可能无法运行;另又发现了使用VBscript也可以获取客户端网卡信息,稍候附上代码,但使用此法IE可能会提示无法'创建对象',暂无发现良好解决办法,最 终找到了一种简便且有效的方法,即使用使用JavascriptSWbemLocator对象操作WMI 的 Win32_NetworkAdapterConfiguration来获取所需信息. 什么是WMI WMI是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object Manager),是一个描述操作系统构成单元的对象数据库,为MMC和脚本程序提供了一个访问操作系统构成单元的公共接口。有了WMI ,工具软件和脚本程序访问操作系统的不同部分时不需要使用不同的API;相反,操作系统的不同部分都可以插入WMI,工具软件和WMI可以方便地读写WMI,所以不 只Javascript可以连接WMI,VBscript,C#等语言亦可。 什么是Win32_NetworkAdapterConfiguration Win32_NetworkAdapterConfiguration描述了一个网络适配器的属性及行为,此类包括支持TCP/IP管理及与相对网络适配器独立的IPX协议的额外属性及方法 下面简单翻译一下来自MSDN的关于Win32_NetworkAdapterConfiguration的主要属性及方法,详细资料请参考http://msdn.microsoft.com/en- us/library/aa394217(VS.85).aspx class Win32_NetworkAdapterConfiguration : CIM_Setting { boolean ArpAlwaysSourceRoute; boolean ArpUseEtherSNAP; string Caption;//CIM_Setting对象的描述,该属性从CIM_Setting继承 string DatabasePath; boolean DeadGWDetectEnabled; string DefaultIPGateway[];//默认网关,注意该类型为数组 uint8 DefaultTOS; uint8 DefaultTTL;//IP包头的默认TTL值 string Description;//CIM_Setting对象的描述,该属性从CIM_Setting继承 boolean DHCPEnabled;//是否允许DHCP,如果允许在建立网络连接的时候由DHCP服务器来分配地址 datetime DHCPLeaseExpires;//DHCP租用有效期 datetime DHCPLeaseObtained;//DHCP租用获取时间 string DHCPServer;//DHCP服务器 string DNSDomain;//DHCP服务器域 string DNSDomainSuffixSearchOrder[]; boolean DNSEnabledForWINSResolution; string DNSHostName; string DNSServerSearchOrder[]; boolean DomainDNSRegistrationEnabled; uint32 ForwardBufferMemory; boolean FullDNSRegistrationEnabled; uint16 GatewayCostMetric[]; uint8 IGMPLevel; uint32 Index; uint32 InterfaceIndex; string IPAddress[];//IP地址,该类型为数组 uint32 IPConnectionMetric; boolean IPEnabled;//TCP/IP在该网络适配器上是否被激活 boolean IPFilterSecurityEnabled; boolean IPPortSecurityEnabled; string IPSecPermitIPProtocols[]; string IPSecPermitTCPPorts[]; string IPSecPermitUDPPorts[]; string IPSubnet[];//子网掩码,如"255.255.0.0" boolean IPUseZeroBroadcast; string IPXAddress;//IPX地址 boolean IPXEnabled;//IPX是否允许 uint32 IPXFrameType[]; uint32 IPXMediaType; string IPXNetworkNumber[]; string IPXVirtualNetNumber; uint32 KeepAliveInterval; uint32 KeepAliveTime; string MACAddress; uint32 MTU;//最大传输单元 uint32 NumForwardPackets; boolean PMTUBHDetectEnabled; boolean PMTUDiscoveryEnabled; string ServiceName; string SettingID; uint32 TcpipNetbiosOptions; uint32 TcpMaxConnectRetransmissions; uint32 TcpMaxDataRetransmissions; uint32 TcpNumConnections; boolean TcpUseRFC1122UrgentPointer; uint16 TcpWindowSize; boolean WINSEnableLMHostsLookup; string WINSHostLookupFile; string WINSPrimaryServer; string WINSScopeID; string WINSSecondaryServer; }; 主要方法 DisableIPSec 在该被激的TCP/IP网络适配器是禁用IPSec EnableDHCP 启用DHCP EnableDNS 启用DNS EnableIPFilterSec 启用IPFilterSec EnableIPSec 启用IPSec. EnableStatic 目标网络适配器上应用静态TCP/IP寻址 EnableWINS 启用WINS,但独立于网络适配器. ReleaseDHCPLease 释放绑定在已激DHCP的网络适配器上的IP地址 ReleaseDHCPLeaseAll 释放所有绑定在已激DHCP的网络适配器上的IP地址. RenewDHCPLease Renews 绑定在已激DHCP的网络适配器上的IP地址 RenewDHCPLeaseAll Renews所有绑定在已激DHCP的网络适配器上的IP地址 SetArpAlwaysSourceRoute SetArpUseEtherSNAP 使用 802.3 SNAP 编码允许Ethernet packets SetDatabasePath 设置标准INTERNET数据文件的路径(HOSTS, LMHOSTS, NETWORKS, and PROTOCOLS). SetDeadGWDetect 启用死网关探测. SetDefaultTOS (过时) SetDefaultTTL 设置默认TTL值 SetDNSDomain 设置DNS域名. SetDNSServerSearchOrder 设置DNS服务器搜索顺序 SetDNSSuffixSearchOrder SetDynamicDNSRegistration SetForwardBufferMemory SetGateways 设置网关 SetIGMPLevel 设置IGMP级别 SetIPConnectionMetric 设置routing metric . SetIPXFrameTypeNetworkPairs SetKeepAliveTime 设置通过发送一个Keep Alive 包来确定TCP尝试校验一个空闲连接是否可用的时间 SetMTU 设置最大传输单元MTU不再被支持 SetNumForwardPackets 设置路由包数据包队列分配的IP包头数 SetPMTUBHDetect 允许Black Hole routers探测. SetPMTUDiscovery 允许MTU discovery. SetTcpipNetbios 设置TCP/IP上的NETBIOS操作 Windows 2000 and Windows NT 4.0: 此属性不可用 SetTcpMaxConnectRetransmissions 设置TCP在重新发送连接请求的尝试次数 SetTcpMaxDataRetransmissions Sets the number of times TCP will retransmit an individual data segment before aborting the connection. SetTcpNumConnections TCP最大并发连接数. SetTcpUseRFC1122UrgentPointer 指定是否TCP使用RFC1122规范,或BSD系统使用的模式 SetTcpWindowSize 设置TCP窗口大小. SetWINSServer 设置WINS服务器 操作代码 Javascript代码 <script language="javascript"> <!-- function GetAdapterInfo() { var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); var service = locator.ConnectServer("."); //连接本机服务器 var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration"); //查询使用SQL标准 var e = new Enumerator (properties); for (;!e.atEnd();e.moveNext ()) { var p = e.item (); document.write("Caption:" + p.Caption + " "); //网卡描述,也可以使用Description document.write("IP:" + p.IPAddress(0) + " ");//IP地址为数组类型,子网俺码及默认网关亦同 document.write("Net MASK:" + p.IPSubnet(0) + " "); document.write("Default gateway:" + p.DefaultIPGateway(0) + " "); document.write("MAC:" + p.MACAddress + " "); //网卡物理地址 document.write("<hr>"); } } GetAdapterInfo(); //--> </script> 将以上代码放在HTML代码中可以看到JS输出的详细信息,如显示更详细信息请参照以上的列出的属性 如果机器安装了多块网卡,只想得到某一块网卡,可使用查询过滤的方法得到如安装了intel和Realtek的网卡,获取Realtek的网卡只需要使用SQL查询即可,如下 var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration where description like '%Realtek%'"); Vbscript代码 strComputer = "." Set objWMIService = GetObject( _ "winmgmts:\\" & strComputer & "\root\cimv2") Set IPConfigSet = objWMIService.ExecQuery _ ("Select IPAddress from Win32_NetworkAdapterConfiguration" _ & " where Description like '%Realtek%'") For Each IPConfig in IPConfigSet If Not IsNull(IPConfig.IPAddress) Then For i=LBound(IPConfig.IPAddress) _ to UBound(IPConfig.IPAddress) WScript.Echo IPConfig.IPAddress(i) Next End If Next 将以上文本保存为test.vbs,双击即可 |
- 上一篇 »php可获取客户端信息
- 下一篇 »Java 获取客户端浏览器中的语言设置