在ASP中用组件检测当前网卡地址的代码
2018-09-06 12:28
OptionExplicit
PrivateConstNCBASTAT=&H33
PrivateConstNCBNAMSZ=16
PrivateConstHEAP_ZERO_MEMORY=&H8
PrivateConstHEAP_GENERATE_EXCEPTIONS=&H4
PrivateConstNCBRESET=&H32
PrivateTypeNCB
ncb_commandAsByteInteger
ncb_retcodeAsByteInteger
ncb_lsnAsByteInteger
ncb_numAsByteInteger
ncb_bufferAsLongString
ncb_lengthAsInteger
ncb_callnameAsString*NCBNAMSZ
ncb_nameAsString*NCBNAMSZ
ncb_rtoAsByteInteger
ncb_stoAsByteInteger
ncb_postAsLong
ncb_lana_numAsByteInteger
ncb_cmd_cpltAsByteInteger
ncb_reserve(9)AsByteReserved,mustbe0
ncb_eventAsLong
EndType
PrivateTypeADAPTER_STATUS
adapter_address(5)AsByteAsString*6
rev_majorAsByteInteger
reserved0AsByteInteger
adapter_typeAsByteInteger
rev_minorAsByteInteger
durationAsInteger
frmr_recvAsInteger
frmr_xmitAsInteger
iframe_recv_errAsInteger
xmit_abortsAsInteger
xmit_successAsLong
recv_successAsLong
iframe_xmit_errAsInteger
recv_buff_unavailAsInteger
t1_timeoutsAsInteger
ti_timeoutsAsInteger
Reserved1AsLong
free_ncbsAsInteger
max_cfg_ncbsAsInteger
max_ncbsAsInteger
xmit_buf_unavailAsInteger
max_dgram_sizeAsInteger
pending_sessAsInteger
max_cfg_sessAsInteger
max_sessAsInteger
max_sess_pkt_sizeAsInteger
name_countAsInteger
EndType
PrivateTypeNAME_BUFFER
nameAsString*NCBNAMSZ
name_numAsInteger
name_flagsAsInteger
EndType
PrivateTypeASTAT
adaptAsADAPTER_STATUS
NameBuff(30)AsNAME_BUFFER
EndType
PrivateDeclareFunctionNetbiosLibnetapi32.dll_
(pncbAsNCB)AsByte
PrivateDeclareSubCopyMemoryLibkernel32AliasRtlMoveMemory(_
hpvDestAsAny,ByValhpvSourceAsLong,ByValcbCopyAsLong)
PrivateDeclareFunctionGetProcessHeapLibkernel32()AsLong
PrivateDeclareFunctionHeapAllocLibkernel32_
(ByValhHeapAsLong,ByValdwFlagsAsLong,_
ByValdwBytesAsLong)AsLong
PrivateDeclareFunctionHeapFreeLibkernel32(ByValhHeapAsLong,_
ByValdwFlagsAsLong,lpMemAsAny)AsLong
PublicFunctionGetMACAddress(sIPAsString)AsString
DimsRtnAsString
DimmyNcbAsNCB
DimbRetAsByte
DimaIP()AsString
DimxAsLong
DimnIPAsString
IfInStr(sIP,.)=0Then
GetMACAddress=无效的IP地址.
ExitFunction
EndIf
aIP=Split(sIP,.,-1,vbTextCompare)
IfUBound(aIP())<>3Then
GetMACAddress=无效的IP地址.
ExitFunction
EndIf
Forx=0ToUBound(aIP())
IfLen(aIP(x))>3Then
GetMACAddress=无效的IP地址
ExitFunction
EndIf
IfIsNumeric(aIP(x))=FalseThen
GetMACAddress=无效的IP地址
ExitFunction
EndIf
IfInStr(aIP(x),,)<>0Then
GetMACAddress=无效的IP地址
ExitFunction
EndIf
IfCLng(aIP(x))>255Then
GetMACAddress=无效的IP地址
ExitFunction
EndIf
IfnIP=Then
nIP=String(3-Len(aIP(x)),0)&aIP(x)
Else
nIP=nIP&.&String(3-Len(aIP(x)),0)&aIP(x)
EndIf
Next
sRtn=
myNcb.ncb_command=NCBRESET
bRet=Netbios(myNcb)
myNcb.ncb_command=NCBASTAT
myNcb.ncb_lana_num=0
myNcb.ncb_callname=nIP&Chr(0)
DimmyASTATAsASTAT,tempASTATAsASTAT
DimpASTATAsLong
myNcb.ncb_length=Len(myASTAT)
pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONSOrHEAP_ZERO_MEMORY,myNcb.ncb_length)
IfpASTAT=0Then
GetMACAddress=memoryallcoationfailed!
ExitFunction
EndIf
myNcb.ncb_buffer=pASTAT
bRet=Netbios(myNcb)
IfbRet<>0Then
GetMACAddress=不能从当前IP地址获得MAC,当前IP地址:&sIP
ExitFunction
EndIf
CopyMemorymyASTAT,myNcb.ncb_buffer,Len(myASTAT)
DimsTempAsString
DimiAsLong
Fori=0To5
sTemp=Hex(myASTAT.adapt.adapter_address(i))
Ifi=0Then
sRtn=IIf(Len(sTemp)<2,0&sTemp,sTemp)
Else
sRtn=sRtn&Space(1)&IIf(Len(sTemp)<2,0&sTemp,sTemp)
EndIf
Next
HeapFreeGetProcessHeap(),0,pASTAT
GetMACAddress=sRtn
EndFunction
使用方法:
setS_MAC=server.CreateObject(工程名.类名)
response.writeS_MAC.GetMACAddress(Request.Servervariables(REMOTE_HOST))
setS_MAC=nothing
上一篇:使用ASP删除指定IIS站点
下一篇:给blog加上运行代码功能