求:在win nt中获网卡MAC地址的方法和修改MAC地址的方法。谢谢!!!(100分)

  • 主题发起人 主题发起人 dos2000
  • 开始时间 开始时间
D

dos2000

Unregistered / Unconfirmed
GUEST, unregistred user!
求:在win nt中获网卡MAC地址的方法和修改MAC地址的方法。谢谢!!!
 
winexec(pchar('command.com /C ipconfig /all >'+' c:/temp.txt'),sw_hide)
获取信息保存在c:/temp.txt中
 
Mac地址改不了,出厂就固定了。
 
获网卡MAC地址的方法
http://www.delphibbs.com/delphibbs/dispq.asp?lid=541922
修改MAC地址的方法
http://www.delphibbs.com/delphibbs/dispq.asp?lid=387406
 
获得MAC地址
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,nb30;
type
PASTAT = ^TASTAT;
TASTAT = record
adapter : TAdapterStatus;
name_buf : TNameBuffer;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
function Getmac:string;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
label1.caption:=Getmac;
end;

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;
Netbios(@ncb);
Netbios(@ncb);
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Chr(NCBAstat);
ncb.ncb_lana_num := lanaEnum.lana;
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;
end.
修改MAC地址?好像不行吧
 
感谢各位大侠的关心,我在WINNT上就亲自改过MAC地址。重新启动后就是新地址了,但我想用程序来实现。不知道谁能帮我? :)
 
自己在程序中修改注册表嘛,不过要重启动才能生效。

//以下是修改注册表的方法
在Win9x和winnt 3.5、4.0下,网卡驱动程序使用NDIS规范与操作系统通信。MAC地址被
存储在操作系统的某存储单元内,这时可以通过修改该内容达到目的而不用修改你的
EPROM内容。

1、首先打开注册表,找到HKEY_LOCAL_MACHINE/system/Currentcontrolset/services/
classes/net/0000、0001、0002等下,观察DriverDesc内容为你要修改的网卡的描述。


2、在其下,添一个字符串,名字为NetworkAddress,值设为你要的MAC地址,要连续写。
如004040404040。

3、然后到其下 NDI/params中加一项NetworkAddress的主键,在该主键下添加名为
default的字符串,其值写你要设的mac地址,要连续的写,如004040404040。

4、在NetworkAddress的主键下继续添加名为ParamDesc的字符串,其作用为指定Network-
Address主键的描述,其值可为“MAC Address”,这样以后打开网络邻居的属性,双击

相应网卡项会发现有一个高级设置,其下存在MAC Address 的选项,就是你在注册表中

加的新项NetworkAddress,以后只要在此修改MAC地址就可以了。

5、关闭注册表,重新启动,你的网卡地址已改。打开网络邻居的属性,双击相应网卡项会

发现有一个MAC Address的高级设置项。用于直接修改MAC地址。
 
修改注册表并没有改变网卡上的地址网卡上的MAC地址是存在EEPROM中,
有的网卡提供了软件修改EEPROM中的地址

我发现在WIN NT 4 或WIN2000下会找到几个MAC地址,谁能告诉我为什么?
 
我认为,该同志想修改网卡MAC地址的目的是希望作一个SNIFFER,
可以通过修改网卡的接收模式来达到此目的。
 
后退
顶部