• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    在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
    上一篇:asp下tag的实现,简单介绍与部分代码
    下一篇:asp中COM组件中如何连接数据库的代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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