//mac 地址 import fsys.file; import inet.adapter; import wsock.tcp.client; namespace inet.mac; getPermanentAddress = function(adapterName){ if(!adapterName) error("请使用参数 @1 指定网卡ID",2); var permanentMac; var file = ..fsys.file("\\.\"+adapterName,"r+") if( file ){ var address = { BYTE permanentAddress[6] }; if( file.deviceIoControl( 0x00170002/*_IOCTL_NDIS_QUERY_GLOBAL_STATS*/,{ int n = 0x01010101/*_PERMANENT_ADDRESS*/},address ) ){ var a = address.permanentAddress; permanentMac = ..string.format("%02X-%02X-%02X-%02X-%02X-%02X", a[1],a[2],a[3],a[4],a[5],a[6] ) } file.close() } return permanentMac; } getAddress = function(host,port){ var localIp; if(host) { var c = ..wsock.tcp.client(); if( c.connect(host,port : 80) ){ localIp = c.getLocalIp() } c.close() } for adptInfo in ..inet.adapter.each() { for( addrInfo in adptInfo.ipAddressList.eachAddress() ){ if( (localIp == addrInfo.ipAddress) || (localIp === null) ){ return adptInfo.mac,getPermanentAddress(adptInfo.adapterName); } } } } /**intellisense(inet) mac = 用于获取 MAC(Media Access Control)地址。 mac.getPermanentAddress(.("网卡ID") = 返回硬件 MAC 地址 - OID_802_3_PERMANENT_ADDRESS mac.getAddress(.("IP或域名",端口) = 返回当前联网的网卡的 MAC 地址,\n- 参数 @1 可选指定连接的目标域名或 IP。\n- 参数 @2 可选指定端口(默认值为 80)。\n如果不指定参数 @1 则返回找到的第一个网卡的 MAC 地址。\n\n返回值都是字符串表示的以太网适配器(遵循 IEEE 802.3 标准)的 MAC 地址。\n- 返回值 1 为 当前实际使用的 MAC 地址( OID_802_3_CURRENT_ADDRESS 地址)。\n- 返回值 2 为 出厂时烧录在硬件上的永久物理地址( OID_802_3_PERMANENT_ADDRESS 地址)。\n一般情况下两个返回值是一样的,但当前 MAC 是可能变更的。\n无法连接目标主机时返回第一个网卡的 MAC 地址。 end intellisense**/