分享
 
 
 

在ASP中用组件检测当前网卡地址

王朝asp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

* written by Jaron ,2003-11-21 */

/* 原出处:CSDN文档中心 http://www.csdn.net/develop WEB技术中文网 http://www.jaron.cn */

/* 转载请注明出处和保留此版权信息 */

/* 欢迎使用SiteManager-CMS Server 网站管理系统 http://sitemanager.cnzone.net */

/* 检测MAC的组件(ActiveX DLL)源代码

/* 在ASP中,通过自写组件的方式获取服务器当前的网卡地址

Option Explicit

Private Const NCBASTAT = &H33

Private Const NCBNAMSZ = 16

Private Const HEAP_ZERO_MEMORY = &H8

Private Const HEAP_GENERATE_EXCEPTIONS = &H4

Private Const NCBRESET = &H32

Private Type NCB

ncb_command As Byte 'Integer

ncb_retcode As Byte 'Integer

ncb_lsn As Byte 'Integer

ncb_num As Byte ' Integer

ncb_buffer As Long 'String

ncb_length As Integer

ncb_callname As String * NCBNAMSZ

ncb_name As String * NCBNAMSZ

ncb_rto As Byte 'Integer

ncb_sto As Byte ' Integer

ncb_post As Long

ncb_lana_num As Byte 'Integer

ncb_cmd_cplt As Byte 'Integer

ncb_reserve(9) As Byte ' Reserved, must be 0

ncb_event As Long

End Type

Private Type ADAPTER_STATUS

adapter_address(5) As Byte 'As String * 6

rev_major As Byte 'Integer

reserved0 As Byte 'Integer

adapter_type As Byte 'Integer

rev_minor As Byte 'Integer

duration As Integer

frmr_recv As Integer

frmr_xmit As Integer

iframe_recv_err As Integer

xmit_aborts As Integer

xmit_success As Long

recv_success As Long

iframe_xmit_err As Integer

recv_buff_unavail As Integer

t1_timeouts As Integer

ti_timeouts As Integer

Reserved1 As Long

free_ncbs As Integer

max_cfg_ncbs As Integer

max_ncbs As Integer

xmit_buf_unavail As Integer

max_dgram_size As Integer

pending_sess As Integer

max_cfg_sess As Integer

max_sess As Integer

max_sess_pkt_size As Integer

name_count As Integer

End Type

Private Type NAME_BUFFER

name As String * NCBNAMSZ

name_num As Integer

name_flags As Integer

End Type

Private Type ASTAT

adapt As ADAPTER_STATUS

NameBuff(30) As NAME_BUFFER

End Type

Private Declare Function Netbios Lib "netapi32.dll" _

(pncb As NCB) As Byte

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _

hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)

Private Declare Function GetProcessHeap Lib "kernel32" () As Long

Private Declare Function HeapAlloc Lib "kernel32" _

(ByVal hHeap As Long, ByVal dwFlags As Long, _

ByVal dwBytes As Long) As Long

Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, _

ByVal dwFlags As Long, lpMem As Any) As Long

Public Function GetMACAddress(sIP As String) As String

Dim sRtn As String

Dim myNcb As NCB

Dim bRet As Byte

Dim aIP() As String

Dim x As Long

Dim nIP As String

If InStr(sIP, ".") = 0 Then

GetMACAddress = "无效的IP地址."

Exit Function

End If

aIP = Split(sIP, ".", -1, vbTextCompare)

If UBound(aIP()) <> 3 Then

GetMACAddress = "无效的IP地址."

Exit Function

End If

For x = 0 To UBound(aIP())

If Len(aIP(x)) > 3 Then

GetMACAddress = "无效的IP地址"

Exit Function

End If

If IsNumeric(aIP(x)) = False Then

GetMACAddress = "无效的IP地址"

Exit Function

End If

If InStr(aIP(x), ",") <> 0 Then

GetMACAddress = "无效的IP地址"

Exit Function

End If

If CLng(aIP(x)) > 255 Then

GetMACAddress = "无效的IP地址"

Exit Function

End If

If nIP = "" Then

nIP = String(3 - Len(aIP(x)), "0") & aIP(x)

Else

nIP = nIP & "." & String(3 - Len(aIP(x)), "0") & aIP(x)

End If

Next

sRtn = ""

myNcb.ncb_command = NCBRESET

bRet = Netbios(myNcb)

myNcb.ncb_command = NCBASTAT

myNcb.ncb_lana_num = 0

myNcb.ncb_callname = nIP & Chr(0)

Dim myASTAT As ASTAT, tempASTAT As ASTAT

Dim pASTAT As Long

myNcb.ncb_length = Len(myASTAT)

pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, myNcb.ncb_length)

If pASTAT = 0 Then

GetMACAddress = "memory allcoation failed!"

Exit Function

End If

myNcb.ncb_buffer = pASTAT

bRet = Netbios(myNcb)

If bRet <> 0 Then

GetMACAddress = "不能从当前IP地址获得MAC,当前IP地址: " & sIP

Exit Function

End If

CopyMemory myASTAT, myNcb.ncb_buffer, Len(myASTAT)

Dim sTemp As String

Dim i As Long

For i = 0 To 5

sTemp = Hex(myASTAT.adapt.adapter_address(i))

If i = 0 Then

sRtn = IIf(Len(sTemp) < 2, "0" & sTemp, sTemp)

Else

sRtn = sRtn & Space(1) & IIf(Len(sTemp) < 2, "0" & sTemp, sTemp)

End If

Next

HeapFree GetProcessHeap(), 0, pASTAT

GetMACAddress = sRtn

End Function

使用方法:

set S_MAC = server.CreateObject( "工程名.类名")

response.write S_MAC.GetMACAddress(Request.Servervariables("REMOTE_HOST"))

set S_MAC = nothing

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有