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

Вниз

MAC адрес, BIOS   Найти похожие ветки 

 
LexaVV   (2003-09-17 10:02) [0]

Привет, мастерам !!!

Подскажите пожалста, как можно определить MAC адрес, а то нашел процедурку, каторая якобы это делает. При каждом перезапуске компа она выдает новое значение.
И еще вопрос как можно получить ID BIOS"а в Win2k.

DarkMan , спасибо за ссылку. Аналог этой проги у меня есть, но беда в другом - если выдернуть сетевой кабель из платы (сек на 30), то он (MAC) меняется ...

Заранее спасибо.


 
Оззя   (2003-09-17 11:31) [1]

Как определить MAC адрес NIC?
Вот на что наткнулся в одном из ФАКов:

Вариант1:
From : Sergey Gazimagomedov 2:453/11.13
Мне нужен был МАС адpес, так я его получал, пользуясь NetBIOS.
Добавляешь имя NetBIOS и посылаешь на имя станции, нужной для опpеделения(можно
и своей) датагpамный пакет с заполненным NCB.
Вот исходник моей функции для опpеделения МАС адpеса.

UCHAR MYLIBAPI GetAdapterID(char *Name, // NetBIOS ??? ???????
UINT lana_num,
CARDID *ID) // 6 ???????? ??????
{
UCHAR rc = 0;
UCHAR Status[256];
while( lstrlen(Name) - 15)
lstrcat(Name, " ");
memset(&SNcb, 0, sizeof(NCB));
SNcb.ncb_command = NCBASTAT;
SNcb.ncb_buffer = (LPSTR)Status;
SNcb.ncb_length = 256;
lstrcpy(SNcb.ncb_callname, Name);
SNcb.ncb_lana_num = lana_num;
rc = Netbios( &SNcb );
if(rc ==0){
memcpy(ID, Status, 6);
}
return(SNcb.ncb_cmd_cplt);
}

Это под Win32. Конечно должен быть пpотокол NetBIOS, но он в фоpточках и так
необходим.

Взято с Vingrad.ru http://forum.vingrad.ru

Вариант2:
From : Alexey Grachyov

#include
#include
#include
#include
#include
void main()
{
int iAdapters,iOpt=sizeof(iAdapters),iSize=sizeof(SOCKADDR_IPX);
SOCKET skNum;
SOCKADDR_IPX Addr;
WSADATA Wsa;
if(WSAStartup(0x0101,&Wsa)) return;
if((skNum=socket(AF_IPX,SOCK_DGRAM,NSPROTO_IPX))!=INVALID_SOCKET)
{
memset(&Addr,0,sizeof(Addr));
Addr.sa_family=AF_IPX;
if(bind(skNum,(SOCKADDR *)&Addr,iSize)!=SOCKET_ERROR)
{
if(getsockopt(skNum,NSPROTO_IPX,IPX_MAX_ADAPTER_NUM,
(char *)&iAdapters,&iOpt)!=SOCKET_ERROR)
{
while(iAdapters)
{
IPX_ADDRESS_DATA Data;
memset(&Data,0,sizeof(Data));
Data.adapternum=iAdapters-1;
iOpt=sizeof(Data);
if(getsockopt(skNum,NSPROTO_IPX,IPX_ADDRESS,(char
*)&Data,&iOpt)!=SOCKET_ERROR)
{
printf("Addr: %02X%02X%02X%02X:%02X%02X%02X%02X%02X%02X\n",
(int)Data.netnum[0],(int)Data.netnum[1],(int)Data.netnum[2],
(int)Data.netnum[3],(int)Data.netnum[4],(int)Data.netnum[5],
(int)Data.netnum[6],(int)Data.netnum[7],(int)Data.netnum[8],
(int)Data.netnum[9]);
}
iAdapters--;
}
}
}
closesocket(skNum);
}
WSACleanup();
}

Взято с Vingrad.ru http://forum.vingrad.ru

Вариант3:
From: MSDN

#include
#include
#include
#include
#include
typedef struct _ASTAT_
{
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff [30];
}ASTAT, * PASTAT;
ASTAT Adapter;
void main (void)
{
NCB Ncb;
UCHAR uRetCode;
char NetName[50];
memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = 0;
uRetCode = Netbios( &Ncb );
printf( "The NCBRESET return code is: 0x%x \n", uRetCode );
memset( &Ncb, 0, sizeof (Ncb) );
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = 0;
strcpy( Ncb.ncb_callname, "* " );
Ncb.ncb_buffer = (char *) &Adapter;
Ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( &Ncb );
printf( "The NCBASTAT return code is: 0x%x \n", uRetCode );
if ( uRetCode == 0 )
{
printf( "The Ethernet Number is: %02x%02x%02x%02x%02x%02x\n",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5] );
}
}

Автор ответа: Garik

Взято с Vingrad.ru http://forum.vingrad.ru

--------------------------------------------------------------------------------

Автор: Daniel Wischnewski

Для того, чтобы этот код работал, необходимо включить в проект юнит NB30. Простой вызов функции GetMACAddress возвращает адрес первого установленного сетевого адаптера.

Совместимость: Delphi 3.x (или выше)

Данный пример был составлен на основе статьи на сайте Borland:
http://community.borland.com/article/0,1410,26040,00.html

uses
NB30;

function GetAdapterInfo(Lana: Char): String;
var
Adapter: TAdapterStatus;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBRESET);
NCB.ncb_lana_num := Lana;
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := "mac not found";
Exit;
end;

FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBASTAT);
NCB.ncb_lana_num := Lana;
NCB.ncb_callname := "*";

FillChar(Adapter, SizeOf(Adapter), 0);
NCB.ncb_buffer := @Adapter;
NCB.ncb_length := SizeOf(Adapter);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := "mac not found";
Exit;
end;
Result :=
IntToHex(Byte(Adapter.adapter_address[0]), 2) + "-" +
IntToHex(Byte(Adapter.adapter_address[1]), 2) + "-" +
IntToHex(Byte(Adapter.adapter_address[2]), 2) + "-" +
IntToHex(Byte(Adapter.adapter_address[3]), 2) + "-" +
IntToHex(Byte(Adapter.adapter_address[4]), 2) + "-" +
IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;

function GetMACAddress: string;
var
AdapterList: TLanaEnum;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBENUM);
NCB.ncb_buffer := @AdapterList;
NCB.ncb_length := SizeOf(AdapterList);
Netbios(@NCB);
if Byte(AdapterList.length) > 0 then
Result := GetAdapterInfo(AdapterList.lana[0])
else
Result := "mac not found";
end;

Взято с Исходников.ru http://www.sources.ru



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

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

Наверх




Память: 0.47 MB
Время: 0.009 c
1-89990
Dmitriy M. Volkov
2003-11-17 14:15
2003.11.27
FindNext - поиск заново


3-89720
lovres
2003-11-10 09:43
2003.11.27
Ошибка Invalid use of keyword в запросе


1-89940
Varfolomey
2003-11-15 14:50
2003.11.27
Как программно узнать удалён ли динамический компонент?


14-90115
val_5
2003-11-03 17:33
2003.11.27
Windows CE


1-89932
Nucl
2003-11-17 18:02
2003.11.27
Картинки из TImageList





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский