如何能够获得网络适配器地址?(100分)

  • 主题发起人 主题发起人 xiaoywh
  • 开始时间 开始时间
X

xiaoywh

Unregistered / Unconfirmed
GUEST, unregistred user!
在这里先行谢过你了?
可否能提供NETAPI32.DLL的接口程序或说明呢?
 
不是我的抄的,是LawrenceZhang的,给分他吧!
你做过问题检索了吗?
Function NBGetAdapterAddress(a:integer) : String;
Implementation

{$R *.DFM}

Procedure TForm1.Button1Click(Sender : TObject);
Begin
label1.Caption:=NBGetAdapterAddress(StrtoInt(Edit1.Text));
End;

Function NBGetAdapterAddress(a:Integer) : String;
Var

NCB : TNCB; // Netbios control block file://NetBios控制块
ADAPTER : TADAPTERSTATUS; // Netbios adapter status//取网卡状态
LANAENUM : TLANAENUM; // Netbios lana
intIdx : Integer; // Temporary work value//临时变量
cRC : Char; // Netbios return code//NetBios返回值
strTemp : String; // Temporary string//临时变量

Begin
// Initialize
Result := '';

Try
// Zero control blocl
ZeroMemory(@NCB, SizeOf(NCB));

// Issue enum command
NCB.ncb_command := Chr(NCBENUM);
cRC := NetBios(@NCB);

// Reissue enum command
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then
exit;

// Reset adapter
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[a];
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then
exit;

// Get adapter address
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[a];
StrPCopy(NCB.ncb_callname, '*');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
cRC := NetBios(@NCB);

// Convert it to string
strTemp := '';
For intIdx := 0 To 5 Do
strTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[in
tIdx]),2);
Result := strTemp;
Finally
End;
End;


End.

 
TNCB的出处?
 
能否将NCB做一个简要说明谢谢了
 
dos下输入:
c:> route print(当然,是在nt or win2000里)
 
KONGG:那是查看本地路由信息啊 :) 应该是arp的
 
是查看路由的,但是它在表头处显示自己的mac地址呀。arp -a只是看你自己电脑里的
存贮的mac地址而已,并没有显示自己的mac地址
 
我有这个例子,发给你
 
to here ok?
pdw512@263.net
 
要先ping 一下这个ip 然后ARP -A就可以看到
 
to income
发了
 
为什么还用这个过时的netbios函数?用IpHelper函数不是很好吗,在win2000
下面我编的一个C++的Console程序:

#define _WIN32_WINNT 0x0500
#include <stdio.h>
#include <windows.h>
#include <Iphlpapi.h>
#pragma comment(lib, "Iphlpapi")

void main()
{
DWORD ret, dwSize;
IP_ADAPTER_INFO pTemp[10], *p;

dwSize = 10 * sizeof(IP_ADAPTER_INFO);
ret = GetAdaptersInfo(pTemp, &amp;dwSize);

if(ret == ERROR_SUCCESS){
p = pTemp;
printf("OK/n");
for(unsigned int i=0; i<10; i++){
if(p == NULL)
break;
printf("AdapterName : %s/n", p->AdapterName);
printf("Description : %s/n", p->Description);
printf("MAC Addr(%d): ", p->AddressLength);
for(unsigned int j=0; j < p->AddressLength; j++)
if(j != p->AddressLength-1)
printf("%.2X-", p->Address[j]);
else
printf("%.2X", p->Address[j]);
printf("/n");
printf("IP Addr : %s/n", p->IpAddressList.IpAddress.String);
p = p->Next;
printf("/n");
}
}
else
printf("FT %d/n", GetLastError());
}
 
xiaoywh:如果你还要继续讨论请定期提前你的帖子,如果不想继续讨论请结束帖子。
 
多人接受答案了。
 
后退
顶部