精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>● VB和Basic(1)>>Internet>>再次贴出的网卡地址,请大家谢谢cnkitty@

主题:再次贴出的网卡地址,请大家谢谢cnkitty@
发信人: citylord()
整理人: (2000-04-22 10:55:37), 站内信件
这是Annie Lee 在M$里面找到的,
请大家谢谢[email protected]对我们的帮助。
以下是内容:

Determining a Network Controller MAC Address Using Visual Basic 
Related Topics 

VBnet Frames 
Applies to: VB4-32, VB5, VB6 


Prerequisites 

Installed network card. 

Keeping it simple, this is a wrapper routine that will return the Medi
um 
Access Control (MAC) address for the installed network card. A MAC Add
ress is a unique 48-bit number assigned to the network interface card 
(NIC) by the manufacturer. MAC addresses (which are physical addresses
) are used for mapping in TCP/IP network communication. 

TCP\IP under Windows NT allows a computer to communicate over a networ
k with another computer by using either an IP address, a host name, or
 a NetBIOS name. However, when one computer attempts to communicate wi
th another computer using one of these three naming conventions, that 
name must ultimately be resolved to a hardware address, the MAC addres
s. 

This code is from the MS knowledge base article Q175472. 


BAS Module Code 

Add the following code to a BAS module: 

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 

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). Lab
els 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. F
or example, a modem can have a MAC address. Also, a RAS client or serv
er can install "dummy" network adapters that correspond to a dialup or
 serial connection. Normally, these MAC addresses are randomly generat
ed. If an adapter status is called on a LANA that corresponds to one o
f 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 obtai
ned 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 yo
u to write transport-independent NetBIOS applications. This article de
scribes what a LANA is and recommends an approach to writing NetBIOS a
pplications. 

MORE INFORMATION 
A LANA is a field of the NetBIOS NCB structure. In IBM's NetBIOS 3.0 s
pecification, a LANA was used to specify a particular network adapter,
 as NetBIOS then supported up to two network adapters in one PC comput
er. 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 k
nown as the NetBIOS Frames protocol. This was the only transport NetBI
OS could use to send data across the network. In other words, each net
work adapter had only one protocol to send and receive NetBIOS packets


Because most computers have only one network adapter, many MS-DOS-base
d applications send all their requests to a LANA value of zero (also c
alled simply 'LANA zero'). If a second network adapter is installed, s
ome programs allow the user to configure the application to use 
LANA one instead. As a result, LANA zero became a default setting, tho
ugh 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 spe
cific transport on a specific adapter. For example, if you have two ne
twork 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 a
n NCB command (NCBENUM) that returns an array of available LANA number
s. 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 ada
pters (like a 3Com Etherlink II) and software adapters (like the Dial 
Up Adapter). In addition, a user may have TCP/IP, NETBEUI, IPX/SPX, an
d other transports installed, all of which have NetBIOS 
support. 

For Windows NT, LANAs are configurable through the control panel. Choo
se the Network applet, choose the NetBIOS Interface component, then ch
oose 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 appl
et, choose the protocol you want as default, choose Properties, the Ad
vanced tab, and finally check 'Set this protocol to be the default pro
tocol'. 

LANAs may seem like a constraint that your application must work aroun
d. However, making your application ignorant of how users want to conf
igure their machines is a powerful idea, and one that makes life easie
r for your customers. 

The best way to write a NetBIOS application is to support all LANAs, a
nd 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 an
y outstanding listen after the first listen is satisfied. 
For clients, submit an NCBFINDNAME (Windows NT only) or an NCBCALL (ei
ther Windows NT or Windows 95) on each LANA. The first successful find
 name or call will indicate which LANA to use. When using NCBCALL inst
ead of NCBFINDNAME, you must cancel any pending NCBCALLs and hang up t
he extra 
completed calls (when two or more calls are successful.) 

It is a good idea to submit NCBADDNAME, NCBLISTEN, NCBFINDNAME, and NC
BCALL asynchronously. Asynchronous requests will be processed almost i
n parallel on each transport. 

This architecture is quite beneficial. Once your application is writte
n to establish connections in this manner, it will support any transpo
rt 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 ha
rdware. 


Last reviewed: August 7, 1996 
1998 Microsoft Corporation. All rights reserved. 


--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.103.173.213]

[关闭][返回]