Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Вниз

Как узнать физический номер сетевой карты?   Найти похожие ветки 

 
Moscower   (2002-11-28 20:46) [0]

Здравствуйте!
Известно, что в каждой сетевой карте прожигается ее уникальный номер, который называется MAC-адресом, и известны способы, как его на Windows изменить (через реестр, например).

Есть ли какой-нибудь способ прочитать с сетевой карточки встроенный в нее адрес, а не тот, который показывает система, и который может изменить пользователь? Работать должен под Win9x/ME/NT/2000/XP...

Спасибо


 
Anatoly Podgoretsky   (2002-11-28 21:00) [1]

Hi Oleg V.Grinev!

unit MACAddress;

interface

uses SysUtils;

type
TMACAddress = packed array[0..5] of Byte;

ENetBiosError = class( Exception );

function LanAdapterCount : Integer;
// Возвращает количество адаптеров ( если несколько протоколов - то
// произведение их количества на количество адаптеров)

function GetMacAddress( AdapterNum : Integer ) : TMACAddress;
// А это возвращает MAC адрес для выбранного адаптера

implementation

uses NB30, Windows;

resourcestring
sNetBiosError = "NetBIOS error %d";

type
TAStat = record
Adapt : TAdapterStatus;
NameBuff : array[0..30] of TNameBuffer;
end;

function LanAdapterCount : Integer;
var
Ncb : TNCB;
uRetCode : Char;
lEnum : TLanaEnum;
begin
FillChar( NCB, SizeOf(NCB), 0 );
with NCB do begin
ncb_command := Char( NCBENUM );
ncb_buffer := @lEnum;
ncb_length := SizeOf(lEnum);
end;
uRetCode := Netbios( @Ncb );
if uRetCode <> #0 then raise Exception.CreateFmt( sNetBIOSError,
[Ord(uRetCode)] );
Result := Ord(lenum.length);
end;

function GetMacAddress( AdapterNum : Integer ) : TMACAddress;
var
Ncb : TNCB;
uRetCode : Char;
J : Integer;
Adapter : TAStat;
begin
FillChar( NCB, SizeOf(NCB), 0 );
with NCB do begin
ncb_command := Char(NCBRESET);
ncb_lana_num := Char( AdapterNum );
end;
uRetCode := Netbios( @Ncb );
if uRetCode <> #0 then raise Exception.CreateFmt( sNetBIOSError,
[Ord(uRetCode)] );
FillChar( NCB, SizeOf(NCB), 0 );
with NCB do begin
ncb_command := Char(NCBASTAT);
ncb_lana_num := Char( AdapterNum );
StrCopy( ncb_callname, "* " );
ncb_buffer := @Adapter;
ncb_length := sizeof(Adapter);
end;
uRetCode := Netbios( @Ncb );
if uRetCode <> #0 then raise Exception.CreateFmt( sNetBIOSError,
[Ord(uRetCode)] );
for J := 0 to 5 do
Result[J] := Ord( Adapter.Adapt.Adapter_address[J] );
end;

end.

Тенцер А.Л.


 
videolord   (2002-11-28 23:20) [2]

В некоторых современных сетевых картах адрес зашит в ее флэшку, значит его можно легко изменить (WinXP это делает за 1 сек). Приведенный выше код вернет именно этот MAC, а не тот программный, который прописан в реестре.


 
Moscower   (2002-11-28 23:59) [3]

ok

тогда к чему посоветуете привязать программу?


 
Eugenex   (2002-11-29 10:41) [4]

Если:
MachiName:="*";
то МАС определяется.

Если я задаю так:
MachiName:="192.16.128.12";
StrLCopy(NCB.ncb_callname, PChar(MachineName),NCBNAMSZ);
StrPCopy(@NCB.ncb_callname[Length(MachineName)],StringOfChar(" ", NCBNAMSZ - Length(MachineName)));
то получаю код ошибки
NRC_BADDR The buffer address was illegal.

Почему?


 
kig   (2002-11-29 23:59) [5]

Можно по guid. Последние 6 байтов - мас

в 95/98/Me/NT - UuidCreate (или CoCreateGUID)
в 2000/XP - UuidCreateSequential




Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.01.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
4-87215
bent
2002-12-11 07:10
2003.01.27
System Menu


6-87017
myor
2002-11-28 12:49
2003.01.27
nmsmtp.PostMessage.ToAddress.add()


1-86878
Vitalya
2003-01-20 12:16
2003.01.27
Компонент для рабты с Winamp


8-86969
dummie
2002-10-10 14:39
2003.01.27
gluBuild2DMipmaps/glTexImage2D и видеопамять...


1-86746
stdnet
2003-01-17 13:02
2003.01.27
прочитай - узнаеш





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский