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

转载 2004年07月19日 17:45:00

* 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

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

/* 欢迎使用SiteManager-CMS Server 网站管理系统 http://www.mbodb.com */  /* 检测MAC的组件(ActiveX DLL)源代码  /* 在ASP...
  • u014440119
  • u014440119
  • 2014年05月19日 07:12
  • 188

通过WDK获取网卡原生MAC地址和当前MAC地址。

/* ----------------------------------------------------------  文件名称:WDK_MacAddress.h    作者:秦建辉  ...
  • matrix2009
  • matrix2009
  • 2015年04月17日 10:17
  • 370

java获取当前操作系统名称以及各系统的本机网卡地址

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
  • qq_22260641
  • qq_22260641
  • 2017年02月23日 18:13
  • 1164

c++获取网卡MAC地址

一台机器上可能有多个网卡,每一个网卡只有一个MAC地址,但是每一个网卡可能配置有多个IP地址;如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种;因此,如果要获得本机所有网卡的IP和MAC...
  • linfengmove
  • linfengmove
  • 2015年08月11日 21:53
  • 1811

通过当前IP获取当前网卡的MAC地址

// test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include   ...
  • meilinbaobei
  • meilinbaobei
  • 2015年05月29日 16:02
  • 443

Python获取本机所有IP地址

Python获取本机所有IP地址
  • dongfuguo
  • dongfuguo
  • 2017年07月05日 20:05
  • 595

[VC++]编程获取系统网卡列表及IP地址信息

主要利用的是GetAdaptersInfo()函数来获取系统的网卡列表,并通过遍历地址列表,得出所有的IP地址信息,代码如下: #include "stdafx.h" #include ...
  • sonsie007
  • sonsie007
  • 2013年04月23日 00:23
  • 1790

C#获取本机IP且过滤非真实网卡(如虚拟机网卡)

参考了网上的文章,具体地址不记得了。 下面的方法可以过滤掉虚拟机的网卡等无效网卡,进而只留下真实的网卡。 using System; using System.Collections.Generic;...
  • frombegintoend
  • frombegintoend
  • 2013年07月02日 21:38
  • 4392

浅析ASP内置组件

本文的内容是使用ASP的ActiveX Server Components(组件)。   一、 Browser Capabilities Component(浏览器能力组件):   我们知道,不同...
  • u014440119
  • u014440119
  • 2014年04月20日 10:17
  • 361

Linux C语言 获取本机(所有网卡)IP地址(IPV4)

1、根据ioctl机制打印当前所有网卡 代码: #include #include #include #include #include #...
  • yangguangmeng
  • yangguangmeng
  • 2014年04月28日 18:38
  • 3458
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ASP中用组件检测当前网卡地址
举报原因:
原因补充:

(最多只允许输入30个字)