家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生 家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生
当前位置: 电脑硬件维修培训网投影背投在ASP中用组件检测当前网卡地址
文章内容

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

作者:佚名  来源:本站整理  发布时间:2011-08-01 11:49:40

  * 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

在线报名
友情链接