在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

时间: 2024-09-27 02:45:28

在ASP中用组件检测当前网卡地址的代码的相关文章

在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_comman

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

* 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中,通过自写组件的方式获取服务器当前

ASP中用ajax方式获得session的实现代码

由于我是用的ff浏览器,一直没发现什么问题.上个礼拜提交给用户看的时候,说用IE登录完之后无效,大惊.结果还真的是这样..很囧 登录代码如下: 复制代码 代码如下: //从服务器查询是否存在session j.ajax({ type:"GET", url:"sessioncheck.asp", data:"", timeout: 1000, error: function(){ alert('sorry, server is busy now!'

ASP中用ajax方式获得session的实现代码_应用技巧

由于我是用的ff浏览器,一直没发现什么问题.上个礼拜提交给用户看的时候,说用IE登录完之后无效,大惊.结果还真的是这样..很囧 登录代码如下: 复制代码 代码如下: //从服务器查询是否存在session j.ajax({ type:"GET", url:"sessioncheck.asp", data:"", timeout: 1000, error: function(){ alert('sorry, server is busy now!'

PHP获取网卡地址的代码_php技巧

复制代码 代码如下: <?php     @exec("ipconfig /all",$array);     for($Tmpa;$Tmpa<count($array);$Tmpa++){         if(eregi("Physical",$array[$Tmpa])){             $getstr=explode(":",$array[$Tmpa]);             echo $getstr[1];  

第十六篇 其它的ASP常用组件

当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等. 上两篇中作者给大家介绍了 AD Rotator. Database Access 等组件的使用方法,今天我们接着来看看其它的一些 ASP 常用组件. 一. Browser Capabilities 组件众所周知,并不是所有浏览器都支持现今 Internet 技术的方方面面.有一些特性,某些浏览器支持而另一些浏览器却不支持,如 : ActiveX

第十六课:其它的ASP常用组件

当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等. 上两篇中作者给大家介绍了 AD Rotator. Database Access 等组件的使用方法,今天我们接着来看看其它的一些 ASP 常用组件. 一. Browser Capabilities 组件众所周知,并不是所有浏览器都支持现今 Internet 技术的方方面面.有一些特性,某些浏览器支持而另一些浏览器却不支持,如 : ActiveX

ASP教程:第十六篇 其它的ASP常用组件

当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等. 上两篇中作者给大家介绍了 AD Rotator. Database Access 等组件的使用方法,今天我们接着来看看其它的一些 ASP 常用组件. 一. Browser Capabilities 组件众所周知,并不是所有浏览器都支持现今 Internet 技术的方方面面.有一些特性,某些浏览器支持而另一些浏览器却不支持,如 : ActiveX

其它的ASP常用组件

作者: 书生 当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作等等. 上两篇中作者给大家介绍了 AD Rotator. Database Access 等组件的使用方法,今天我们接着来看看其它的一些 ASP 常用组件. 一. Browser Capabilities 组件众所周知,并不是所有浏览器都支持现今 Internet 技术的方方面面.有一些特性,某些浏览器支持而另一些浏览器却不支持,如 :