源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 372|回复: 17

[ASP编程] 在ASP中用组件检测当前网卡地址的代码

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2007-3-28 00:00:00 | 显示全部楼层 |阅读模式
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
回复

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2022-11-18 11:43:50 | 显示全部楼层
sdsadsadsadf
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

120

积分

注册会员

Rank: 2

积分
120
发表于 2022-11-27 07:13:11 | 显示全部楼层
呵呵呵呵呵呵
回复 支持 反对

使用道具 举报

1

主题

1386

回帖

1509

积分

金牌会员

Rank: 6Rank: 6

积分
1509
发表于 2023-1-31 16:46:46 | 显示全部楼层
你们谁看了弄洒了可能
回复 支持 反对

使用道具 举报

6

主题

2万

回帖

247

积分

中级会员

Rank: 3Rank: 3

积分
247
发表于 2023-8-27 05:41:22 | 显示全部楼层
这个源码还可以
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

66

积分

注册会员

Rank: 2

积分
66
发表于 2023-9-2 15:07:23 | 显示全部楼层
还可以不错
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

316

积分

中级会员

Rank: 3Rank: 3

积分
316
发表于 2023-11-1 02:26:03 | 显示全部楼层
啊,数码撒飒飒飒飒
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-11-3 00:40:45 | 显示全部楼层
哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2024-6-7 17:22:34 | 显示全部楼层
儿童服务绯闻绯闻绯闻
回复 支持 反对

使用道具 举报

1

主题

1万

回帖

51

积分

注册会员

Rank: 2

积分
51
发表于 2024-9-7 02:35:00 | 显示全部楼层
撒房产税陈飞飞
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-23 04:43 , Processed in 0.148610 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表