加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

在ASP中用组件检测目前网卡地址的代码

发布时间:2023-08-11 14:52:32 所属栏目:Asp教程 来源:
导读:程序员需要掌握我们开发过程中的显示记录,现在我们需要是的将信息内容插入到数据库中,接下来为大家分享在ASP中用组件检测当前网卡地址的代码,希望能帮到您。

Option Explicit

Private Const NCBASTAT
程序员需要掌握我们开发过程中的显示记录,现在我们需要是的将信息内容插入到数据库中,接下来为大家分享在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
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章