网卡MAC的问题

seeder 2003-05-19 03:33:08
我用一段代码获得了计算机的网卡MAC地址,但是我用一个工具就可以随便更改MAC地址了,这样我获得的MAC就没有什么用了(不唯一了)。想问问高手们,是我获得MAC的计算机代码的方法不对呢,还是MAC的唯一性值得怀疑?急!谢谢 !
...全文
59 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Randy_Lynd 2003-07-01
  • 打赏
  • 举报
回复
MAC地址是可以被修改的,你的程序没有问题,读到的是真实的MAC
seeder 2003-05-21
  • 打赏
  • 举报
回复
求能获得直接从物理层读到MAC地址的代码,上面的一但操作系统的MAC地址修改,计算机重启后,代码 得到的也就修改后的MAC了
seeder 2003-05-20
  • 打赏
  • 举报
回复
这段代码也不行,看来是没用了,还有高手吗?
wjlsmail 2003-05-20
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,nb30;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function Getmac: string;
public
{ Public declarations }
end;

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

var
Form1: TForm1;

implementation

function TForm1.Getmac: string;
var
ncb: TNCB;
s: string;
adapt: TASTAT;
lanaEnum: TLanaEnum;
i, j, m: integer;
strPart, strMac: string;
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBEnum);
ncb.ncb_buffer := PChar(@lanaEnum);
ncb.ncb_length := SizeOf(TLanaEnum);
s := Netbios(@ncb);
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);
m := 0;
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
m := 1;
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) - 1);
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) - 1);
end;
end;
result := strmac;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Getmac) ;
end;

end.

wjlsmail 2003-05-20
  • 打赏
  • 举报
回复
uses nb30 ;
seeder 2003-05-19
  • 打赏
  • 举报
回复
大家up一下呀
888888888888 2003-05-19
  • 打赏
  • 举报
回复
关注
seeder 2003-05-19
  • 打赏
  • 举报
回复
自己up,大家来帮忙啊!
seeder 2003-05-19
  • 打赏
  • 举报
回复
我用一段代码获得了计算机的网卡MAC地址,但是我用一个工具就可以随便更改MAC地址了,这样我获得的MAC就没有什么用了(不唯一了)。想问问高手们,是我获得MAC的计算机代码的方法不对(那正确的代码应该怎么写呢?因为我怀疑有可能我的MAC地址获得的只是操作系统认为的,物理上并没有修改。而我的获得MAC的代码得到的只是操作系统认为的)呢,还是MAC的唯一性值得怀疑?急!谢谢 !
seeder 2003-05-19
  • 打赏
  • 举报
回复
大家还有好的编译过的代码吗?(要能获得物理意义上的MAC的)
seeder 2003-05-19
  • 打赏
  • 举报
回复
adapt: TASTAT 这个变量类型在哪个单元中???我要uses
wjlsmail 2003-05-19
  • 打赏
  • 举报
回复

// 取本机 Mac
// 硬盘上的,也忘记了从哪来的:)

function Getmac: string;
var
ncb: TNCB;
s: string;
adapt: TASTAT;
lanaEnum: TLanaEnum;
i, j, m: integer;
strPart, strMac: string;
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBEnum);
ncb.ncb_buffer := PChar(@lanaEnum);
ncb.ncb_length := SizeOf(TLanaEnum);
s := Netbios(@ncb);
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);
m := 0;
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
m := 1;
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) - 1);
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) - 1);
end;
end;
result := strmac;
end;

mingyeh 2003-05-19
  • 打赏
  • 举报
回复
mac地址应该是可以修改的
所以唯一标示一台计算机是很难的
seeder 2003-05-19
  • 打赏
  • 举报
回复
但我还是相信是操作系统的信息变了,可是我应该怎样写代码才能读出真正的物理上的MAC呢,而不是基于操作系统表面的。
seeder 2003-05-19
  • 打赏
  • 举报
回复
当然修改后要重启计算机才会有效果
seeder 2003-05-19
  • 打赏
  • 举报
回复
能的,软件http://lib.yctc.edu.cn/soft/list.asp?id=4139

我用上面的代码就是可以读出改变了mac
lif2000 2003-05-19
  • 打赏
  • 举报
回复
不可能会修改吧
seeder 2003-05-19
  • 打赏
  • 举报
回复
可是我用一个修改mac的软件修改后,我的程序就真的变成我修改的地址了。代码如下:是不是我的代码有问题呢?
Function GetAdapterMac(ANo:Integer):String;
var
Ncb:TNcb;
Adapter:TAdapterStatus;
Lanaenum:TLanaenum;
IntIdx:Integer; //
cRc:Char;
StrTemp:String;
begin
Result:='';
Try
ZeroMemory(@Ncb,SizeOf(Ncb));
Ncb.ncb_command:=Chr(NCbenum);
NetBios(@NCb);
Ncb.ncb_buffer:=@Lanaenum; //再处理enum命令
Ncb.ncb_length:=SizeOf(Lanaenum);
cRc:=NetBios(@Ncb);
if Ord(cRc)<>0 then
exit;
ZeroMemory(@Ncb,SizeOf(Ncb)); //适配器清零
Ncb.ncb_command:=Chr(NcbReset);
Ncb.ncb_lana_num:=Lanaenum.lana[aNo];
cRc:=NetBios(@Ncb);
if Ord(cRc)<>0 then
exit;
//得到适配器状态
ZeroMemory(@Ncb,SizeOf(Ncb));
Ncb.ncb_command:=Chr(NcbAstat);
Ncb.ncb_lana_num:=Lanaenum.lana[aNo];
StrPcopy(Ncb.ncb_callname,'*');
Ncb.ncb_buffer:=@Adapter;
Ncb.ncb_length:=SizeOf(Adapter);
NetBios(@Ncb);

//将mac地址转换成字符串输出
StrTemp:='';
For IntIdx:=0 to 5 do
StrTemp:=StrTemp+IntToHex(Integer(Adapter.adapter_address[intIdx]),2);
Result:=StrTemp;
Finally
end;
end;
easyboot 2003-05-19
  • 打赏
  • 举报
回复
MAC地址是唯一的.

你可以用IPCONFIG/ALL查看一下
seeder 2003-05-19
  • 打赏
  • 举报
回复
有没有人知道呀,wu.........
【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅中英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

1,594

社区成员

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

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