分享
 
 
 

如何用VB获得机器的MAC地址

王朝vb·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

我有一个asp做的网站,现在想通过asp调用嵌入网页内的一个程序(控件)读取客户端网卡mac地址,请各位前辈多多帮忙。

下面这代码可以做成控件的形式?嵌入网页后,通过asp调用读取客户端网卡mac地址,请各位前辈多多帮忙,告诉怎么做,我是一个初学者,有急用,谢谢!!!

Option Explicit

Public Const NCBASTAT As Long = &H33

Public Const NCBNAMSZ As Long = 16

Public Const HEAP_ZERO_MEMORY As Long = &H8

Public Const HEAP_GENERATE_EXCEPTIONS As Long = &H4

Public Const NCBRESET As Long = &H32

Public Type NET_CONTROL_BLOCK 'NCB

ncb_command As Byte

ncb_retcode As Byte

ncb_lsn As Byte

ncb_num As Byte

ncb_buffer As Long

ncb_length As Integer

ncb_callname As String * NCBNAMSZ

ncb_name As String * NCBNAMSZ

ncb_rto As Byte

ncb_sto As Byte

ncb_post As Long

ncb_lana_num As Byte

ncb_cmd_cplt As Byte

ncb_reserve(9) As Byte ' Reserved, must be 0

ncb_event As Long

End Type

Public Type ADAPTER_STATUS

adapter_address(5) As Byte

rev_major As Byte

reserved0 As Byte

adapter_type As Byte

rev_minor As Byte

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

End Type

Public Type NAME_BUFFER

name As String * NCBNAMSZ

name_num As Integer

name_flags As Integer

End Type

Public Type ASTAT

adapt As ADAPTER_STATUS

NameBuff(30) As NAME_BUFFER

End Type

Public Declare Function Netbios Lib "netapi32.dll" _

(pncb As NET_CONTROL_BLOCK) As Byte

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _

(hpvDest As Any, ByVal _

hpvSource As Long, ByVal _

cbCopy As Long)

Public Declare Function GetProcessHeap Lib "kernel32" () As Long

Public Declare Function HeapAlloc Lib "kernel32" _

(ByVal hHeap As Long, ByVal dwFlags As Long, _

ByVal dwBytes As Long) As Long

Public Declare Function HeapFree Lib "kernel32" _

(ByVal hHeap As Long, _

ByVal dwFlags As Long, _

lpMem As Any) As Long

Public Function GetMACAddress() As String

'retrieve the MAC Address for the network controller

'installed, returning a formatted string

Dim tmp As String

Dim pASTAT As Long

Dim NCB As NET_CONTROL_BLOCK

Dim AST As ASTAT

'The IBM NetBIOS 3.0 specifications defines four basic

'NetBIOS environments under the NCBRESET command. Win32

'follows the OS/2 Dynamic Link Routine (DLR) environment.

'This means that the first NCB issued by an application

'must be a NCBRESET, with the exception of NCBENUM.

'The Windows NT implementation differs from the IBM

'NetBIOS 3.0 specifications in the NCB_CALLNAME field.

NCB.ncb_command = NCBRESET

Call Netbios(NCB)

'To get the Media Access Control (MAC) address for an

'ethernet adapter programmatically, use the Netbios()

'NCBASTAT command and provide a "*" as the name in the

'NCB.ncb_CallName field (in a 16-chr string).

NCB.ncb_callname = "* "

NCB.ncb_command = NCBASTAT

'For machines with multiple network adapters you need to

'enumerate the LANA numbers and perform the NCBASTAT

'command on each. Even when you have a single network

'adapter, it is a good idea to enumerate valid LANA numbers

'first and perform the NCBASTAT on one of the valid LANA

'numbers. It is considered bad programming to hardcode the

'LANA number to 0 (see the comments section below).

NCB.ncb_lana_num = 0

NCB.ncb_length = Len(AST)

pASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS _

Or HEAP_ZERO_MEMORY, NCB.ncb_length)

If pASTAT = 0 Then

Debug.Print "memory allocation failed!"

Exit Function

End If

NCB.ncb_buffer = pASTAT

Call Netbios(NCB)

CopyMemory AST, NCB.ncb_buffer, Len(AST)

tmp = Format$(Hex(AST.adapt.adapter_address(0)), "00") & " " & _

Format$(Hex(AST.adapt.adapter_address(1)), "00") & " " & _

Format$(Hex(AST.adapt.adapter_address(2)), "00") & " " & _

Format$(Hex(AST.adapt.adapter_address(3)), "00") & " " & _

Format$(Hex(AST.adapt.adapter_address(4)), "00") & " " & _

Format$(Hex(AST.adapt.adapter_address(5)), "00")

HeapFree GetProcessHeap(), 0, pASTAT

GetMACAddress = tmp

End Function

'--end block--'

Form Code

To a form add a command button (Command1), and a text box (Text1). Labels and

frames are optional. Add the following to the command button:

------------------------------------------------------------------------------

--

Option Explicit

Private Sub Command1_Click()

Text1 = GetMACAddress()

End Sub

'--end block--'

Comments

Other hardware and software may be assigned their own MAC addresses. For

example, a modem can have a MAC address. Also, a RAS client or server can

install "dummy" network adapters that correspond to a dialup or serial

connection. Normally, these MAC addresses are randomly generated. If an

adapter status is called on a LANA that corresponds to one of these adapters

when no connection is present, Netbios returns error 0x34 (NRC_ENVNOTDEF)

even if a reset was previously performed.

With the NetBEUI and IPX transports, the same information can be obtained at

a command prompt by using:

net config workstation

The ID given is the MAC address.

How to Use LANA Numbers in a 32-bit Environment

Last reviewed: August 7, 1996

Article ID: Q138037

The information in this article applies to:

Microsoft Win32 Software Development Kit (SDK) versions 3.1, 3.5, 3.51, 4.0

SUMMARY

NetBIOS uses the concept of a LANA (LAN adapter number) that allows you to

write transport-independent NetBIOS applications. This article describes what

a LANA is and recommends an approach to writing NetBIOS applications.

MORE INFORMATION

A LANA is a field of the NetBIOS NCB structure. In IBM's NetBIOS 3.0

specification, a LANA was used to specify a particular network adapter, as

NetBIOS then supported up to two network adapters in one PC computer.

Specifying a LANA of zero directed a request to the first adapter, and

specifying a LANA of one directed a request to the second adapter.

Originally, IBM sent NetBIOS packets over the NetBEUI protocol, also known as

the NetBIOS Frames protocol. This was the only transport NetBIOS could use to

send data across the network. In other words, each network adapter had only

one protocol to send and receive NetBIOS packets.

Because most computers have only one network adapter, many MS-DOS-based

applications send all their requests to a LANA value of zero (also called

simply 'LANA zero'). If a second network adapter is installed, some programs

allow the user to configure the application to use LANA one instead. As a

result, LANA zero became a default setting, though it was never intended to

be a default.

Today's network technology allows NetBIOS to use transports other than

NetBEUI. Microsoft has extended the meaning of LANA to indicate a specific

transport on a specific adapter. For example, if you have two network

adapters, and have IPX/SPX and NetBEUI transports installed, you have four

LANAs. The LANAs may or may not be sequential, and there is no systematic way

to identify which transport maps to which LANA.

In addition to extending the meaning of a LANA, Microsoft also added an NCB

command (NCBENUM) that returns an array of available LANA numbers. As an

example, the LANA_ENUM structure filled by NCBENUM might hold an array with

values 0, 3, 5, and 6. Zero might map to IPX/SPX on the first adapter, three

might map to NETBEUI on a second adapter, and so on.

In Windows NT and Windows 95, network adapters consist of physical adapters

(like a 3Com Etherlink II) and software adapters (like the Dial Up Adapter).

In addition, a user may have TCP/IP, NETBEUI, IPX/SPX, and other transports

installed, all of which have NetBIOS support.

For Windows NT, LANAs are configurable through the control panel. Choose the

Network applet, choose the NetBIOS Interface component, then choose

Configure. A dialog appears that allows you to edit the LANAs.

For Windows 95, you may only set LANA zero, the default protocol, and if no

protocol is set as default, there won't be a LANA zero. You can set the

default protocol in the control panel. Choose the Network applet, choose the

protocol you want as default, choose Properties, the Advanced tab, and

finally check 'Set this protocol to be the default protocol'.

LANAs may seem like a constraint that your application must work around.

However, making your application ignorant of how users want to configure

their machines is a powerful idea, and one that makes life easier for your

customers.

The best way to write a NetBIOS application is to support all LANAs, and

establish connections over any LANA. A good approach is outlined in the

following steps:

Enumerate the LANAs by submitting NCBENUM.

Reset each LANA by submitting one NCBRESET per LANA.

Add your local NetBIOS name to each LANA. The name may be the same on each

LANA.

Connect using any LANA:

For servers, submit an NCBLISTEN on each LANA. If necessary, cancel any

outstanding listen after the first listen is satisfied.

For clients, submit an NCBFINDNAME (Windows NT only) or an NCBCALL (either

Windows NT or Windows 95) on each LANA. The first successful find name or

call will indicate which LANA to use. When using NCBCALL instead of

NCBFINDNAME, you must cancel any pending NCBCALLs and hang up the extra

completed calls (when two or more calls are successful.)

It is a good idea to submit NCBADDNAME, NCBLISTEN, NCBFINDNAME, and NCBCALL

asynchronously. Asynchronous requests will be processed almost in parallel on

each transport.

This architecture is quite beneficial. Once your application is written to

establish connections in this manner, it will support any transport that

NetBIOS can use. As a result, your customers will not have to configure

anything within your application, and your application will not be affected

by dynamic LANAs such as dial-up adapters or plug-and-play hardware.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有