Вопрос по определению MAC адреса с помощью NetBios
От: toypaul Удмуртия http://www.1csql.ru
Дата: 21.02.02 19:26
Оценка:
Такой код:

memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (UCHAR *)&lenum;
Ncb.ncb_length = sizeof(lenum);
uRetCode = Netbios( &Ncb );
wsprintf(message, "Количество карт: %d", lenum.length );
MessageBox(NULL,message,"",MB_OK);

if (argv[1])
{
for (int i=0;i < lenum.length; i++)
{
memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = lenum.lana[i];
uRetCode = Netbios( &Ncb );

memset( &Ncb, 0, sizeof (Ncb) );
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = lenum.lana[i];

memset(Ncb.ncb_callname,' ',NCBNAMSZ);
memcpy( Ncb.ncb_callname,argv[1],strlen(argv[1]));
Ncb.ncb_buffer = (UCHAR *) &Adapter;
Ncb.ncb_length = sizeof(Adapter);

uRetCode = Netbios( &Ncb );
...

В Вынь98 работает нормально. То есть если у меня одна карта, то возвращается количество 1. И первая карта имеет LANA номер 0. В то время как на Вынь2000 Сервер, функция возвращает, что у меня 5 карт, причем LANA номера идут не попорядку. В MSDN написано, что в поле adapter_type будет 0xFE если это Ethernet, но у меня возвращается 0xC5. Причем мой настоящий MAC адрес повторяется дважды

Вот и вопрос — почему в Вынь2000 Сервер работает таким образом. И можно ли от этого как-то избавится. В принципе я бы мог использовать и другие методы определения, но для меня главное знать, чтобы была однозначность в определении на разных платформах Вынь и чтобы можно было определить MAC адрес удаленной машины.
Re: Вопрос по определению MAC адреса с помощью NetBios
От: Edward Россия  
Дата: 22.02.02 08:48
Оценка:
Здравствуйте toypaul, Вы писали:

T>Такой код:


T> memset( &Ncb, 0, sizeof(Ncb) );

T> Ncb.ncb_command = NCBENUM;
T> Ncb.ncb_buffer = (UCHAR *)&lenum;
T> Ncb.ncb_length = sizeof(lenum);
T> uRetCode = Netbios( &Ncb );
T> wsprintf(message, "Количество карт: %d", lenum.length );
T> MessageBox(NULL,message,"",MB_OK);
T>
T> if (argv[1])
T> {
T> for (int i=0;i < lenum.length; i++)
T> {
T> memset( &Ncb, 0, sizeof(Ncb) );
T> Ncb.ncb_command = NCBRESET;
T> Ncb.ncb_lana_num = lenum.lana[i];
T> uRetCode = Netbios( &Ncb );
T>
T> memset( &Ncb, 0, sizeof (Ncb) );
T> Ncb.ncb_command = NCBASTAT;
T> Ncb.ncb_lana_num = lenum.lana[i];
T>
T> memset(Ncb.ncb_callname,' ',NCBNAMSZ);
T> memcpy( Ncb.ncb_callname,argv[1],strlen(argv[1]));
T> Ncb.ncb_buffer = (UCHAR *) &Adapter;
T> Ncb.ncb_length = sizeof(Adapter);
T>
T> uRetCode = Netbios( &Ncb );
T>...

T>В Вынь98 работает нормально. То есть если у меня одна карта, то возвращается количество 1. И первая карта имеет LANA номер 0. В то время как на Вынь2000 Сервер, функция возвращает, что у меня 5 карт, причем LANA номера идут не попорядку. В MSDN написано, что в поле adapter_type будет 0xFE если это Ethernet, но у меня возвращается 0xC5. Причем мой настоящий MAC адрес повторяется дважды


T>Вот и вопрос — почему в Вынь2000 Сервер работает таким образом. И можно ли от этого как-то избавится. В принципе я бы мог использовать и другие методы определения, но для меня главное знать, чтобы была однозначность в определении на разных платформах Вынь и чтобы можно было определить MAC адрес удаленной машины.


Lana_num это не сетевая карта, это интерфейс Netbios, и NCBENUM перечисляет именно их.
Тобишь если у тебя на машине стоит две карты и два протокола привязанные к NETBIOS, например TCP/IP и NetBEUI
то у тебя будет четыре lana_num'а TCP на первой карте, TCP на второй, NetBEUI на первой и т.д.

в Win98 протокол который указан "по умолчанию" всегда имеет lana_num 0, под NT и 2000 никто этого не гарантирует, но под них есть прога для конфигурирования этого самого lana_num'а. Где-то на Microsoft'е лежит.
Re: Вопрос по определению MAC адреса с помощью NetBios
От: toypaul Удмуртия http://www.1csql.ru
Дата: 24.02.02 08:07
Оценка:
Можно ли определить LANA на удаленной машине?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.