高手教我,怎么样得到网卡的MAC呢?

阿亮 2003-10-09 12:33:20
用SendArp可以得到MAC,但是他的条件是你的网卡连在局域网上。那么我想在孤立的装有网卡的机器上得到MAC怎么办呢?
...全文
70 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
netdust 2003-12-26
  • 打赏
  • 举报
回复
谢谢....
hnhhcj 2003-12-19
  • 打赏
  • 举报
回复
gz
ideage 2003-12-16
  • 打赏
  • 举报
回复


unit MacAdress;

interface


uses SysUtils,NB30, Classes, Controls, StdCtrls,windows;

function Getmac:string;

implementation

type
PASTAT = ^TASTAT;
TASTAT = record
adapter : TAdapterStatus;
name_buf : TNameBuffer;
end;





function Getmac:string;
var
ncb : TNCB;
s:string;
adapt : TASTAT;
lanaEnum : TLanaEnum;
i, j, m : integer;
strPart, strMac : string;
begin
result:='';
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBEnum);
ncb.ncb_buffer := PChar(@lanaEnum);
ncb.ncb_length := SizeOf(TLanaEnum);
s:=Netbios(@ncb);
m:=1;
if (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) then
m:=0;
for i := 0 to integer(lanaEnum.length)-1 do
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBReset);
ncb.ncb_lana_num := lanaEnum.lana[i];
Netbios(@ncb);
Netbios(@ncb);
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Chr(NCBAstat);
ncb.ncb_lana_num := lanaEnum.lana[i];
ncb.ncb_callname := '* ';
ncb.ncb_buffer := PChar(@adapt);
ncb.ncb_length := SizeOf(TASTAT);

if m=1 then
begin
if Netbios(@ncb) = Chr(0) then
strMac := '';
for j := 0 to 5 do
begin
strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
strMac := strMac + strPart ;
end;
SetLength(strMac, Length(strMac));
end;
if m=0 then
if Netbios(@ncb) <> Chr(0) then
begin
strMac := '';
for j := 0 to 5 do
begin
strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
strMac := strMac + strPart ;
end;
SetLength(strMac, Length(strMac));
end;
end;
result:=trim(strmac);
end;
阿亮 2003-10-13
  • 打赏
  • 举报
回复
这世界真小啊,居然没有一个人能完整的回答我的问题。
soldier7451 2003-10-11
  • 打赏
  • 举报
回复
function LanCardID: string;
//获取网卡物理地址
var guid: TGUID;
i: integer;
begin
result := '';
CoCreateGUID(guid);
for i := Low(guid.D4)+2 to High(guid.D4) do
begin
result := result + IntToHex(guid.D4[i],2);
end;
end;
7838205 2003-10-11
  • 打赏
  • 举报
回复
获取MAC这样的例程多呢。
阿亮 2003-10-09
  • 打赏
  • 举报
回复
我的MAIL是wush@guensoft.com,TKS
阿亮 2003-10-09
  • 打赏
  • 举报
回复
那,我现在想通过IP地址来得到任意一个LAN内的MAC(包括没有联机的本机网卡),假如谁有这样的现成的函数,我另外加开一个200分的放分帖!
tccb 2003-10-09
  • 打赏
  • 举报
回复
在csdn搜索一下(或是www.playicq.com),有例子
阿亮 2003-10-09
  • 打赏
  • 举报
回复
To: dickeybird888(于伟刚)
NBGetAdapterAddress里的a参数怎么传递啊?还有我想通过机器名称来得到网络上的任意一台机器的MAC,那改怎么办呢?
czf9906 2003-10-09
  • 打赏
  • 举报
回复
总得来说获取网卡MAC有三种方法.
1.使用GUID. 2.用一个老协议NetBios来获得MAC地址 3.使用RPC方式获得MAC地址.

一.GUID是所有支持COM计数的WINDOWS系统中定义的一个数据结构.在GUID的生成过程中就参考了MAC地址并借肋MAC地址的全局唯一性来确定GUID的全局惟一性我们可利用这个特性获取本机mac 地址.在本机网卡mac 地址生成的guid中最后六个字节就是网卡的mac地址.
二........
三........

如需实例来件: www_czf@163.com
dickeybird888 2003-10-09
  • 打赏
  • 举报
回复
我已经给你发过去了你看看吧别忘记给分啊!

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧