Netbios, NCBENUM, получить номера доступных для использования интерфейсоф
, Почему выдает что установлено только одно устройство? (Я вижу 2 MAC адреса у себя)
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.37] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Netbios, NCBENUM, получить номера доступных для использования интерфейсоф
, Почему выдает что установлено только одно устройство? (Я вижу 2 MAC адреса у себя)
|
Сообщ.
#1
,
|
|
|
|
Вот скопировал я в инете пример поизвращался и так и сяк, посмотрел что что выдает, в общих чертах понял вроде...
но далее проблема... сделал получение NetBios имен компьютера... все с локального хоста получается ок проблем нет. далее закрыл нетбиос на сетевой карте... опа имена перестали выдаваться, но команда nbtstat -a выдает имена нормально и использует для этого второй интерфейс... типа первый не нашло сменило на второй... нашло... а вот программа ну ни в какую не выдает мне возможность использовать второй интерфейс. вот перечисляю я возможные интерфейсы, соотвевено количество 1, "я считываю первый байт и получаю его MAC" Даже не знаю как объяснить: если на сетевой карте выключить Netbios то мне начинает находить Второй MAC, если включу NetBios то начинает находить первый MAC. Далее я в цикл перечисления вместо полученного результата количество забил втупую 10000 и опа... у меня оба нашлось )) но на таких значениях что это явно больше 1 байта... подкажите пожалуйста... почему не перечисляются все адаптеры и не выдается их номера (как я понимаю после выполнения перечисления у меня должно быть Enum.Length=2 а Enum.lana первые 2байта должны быть заняты... почему не так? вот если выполнить код ниже... коряво но мне выдает оба MAC Цитата (Результат выполнения) Enum.lana все 255 символов = 00 I=0 "00 B5 66 A1 8C 47" J=0 "" I=2619 "00 62 55 00 00" J=2618 00 B5 A1 C3 8C 47 << нашелся MAC второй но какие то странные номера сетевых интерфейсов 26** явно размерность больше 1 байта ![]() ![]() Procedure NbLanaEnum; Type TNetbiosInfo=record AdapterStatus:TAdapterStatus; NameBuffer:Array [0..30] of TNameBuffer; End; var NCB:TNCB; Enum:TLanaEnum; RetCode:Char; I,J:Cardinal; NetbiosInfo:TNetbiosInfo; Adapter: TAdapterStatus; StringLANA:String; MAC:String; begin FillChar(NCB,SizeOf(TNCB),#0); NCB.ncb_command:=Char(NCBENUM); NCB.ncb_buffer:=@Enum; NCB.ncb_length:=SizeOf(Enum); If Netbios(@NCB)=Char(NRC_GOODRET) Then StringLANA:=''; For I:=0 to 254 Do StringLANA:=StringLANA+IntToHEX(Ord(Enum.lana[I]),2)+' '; ShowMessage(StringLANA); If Word(NetBios(@NCB))=NRC_GOODRET then Begin J:=0; For I:=0 To 10000 {Ord(Enum.Length)-1} do Begin FillChar(NCB,SizeOf(TNCB),#0); NCB.ncb_command:=Char(NCBRESET); NCB.ncb_lana_num:=Enum.lana[I]; If Word(NetBios(@NCB))=NRC_GOODRET Then Begin FillChar(NCB,SizeOf(TNCB),#0); NCB.ncb_command:=Char(NCBASTAT); NCB.ncb_lana_num:=Enum.lana[I]; StrPLCopy(@NCB.ncb_callname,'*',Length('*')); NCB.ncb_length:=Length('*'); NCB.ncb_buffer:=PChar(@Adapter); NCB.ncb_length:=SizeOf(Adapter); If Word(NetBios(@NCB))=NRC_GOODRET then Begin //ShowMessage('I='+IntToStr(I)+' '+IntToHex(Ord(Adapter.adapter_address[0]),2)+' '+IntToHex(Ord(Adapter.adapter_address[1]),2)+' '+IntToHex(Ord(Adapter.adapter_address[2]),2)+' '+IntToHex(Ord(Adapter.adapter_address[3]),2)+' '+IntToHex(Ord(Adapter.adapter_address[4]),2)+' '+IntToHex(Ord(Adapter.adapter_address[5]),2)) Else ShowMessage('Error'); If MAC<>IntToHex(Ord(Adapter.adapter_address[0]),2)+' '+IntToHex(Ord(Adapter.adapter_address[1]),2)+' '+IntToHex(Ord(Adapter.adapter_address[2]),2)+' '+IntToHex(Ord(Adapter.adapter_address[3]),2)+' '+IntToHex(Ord(Adapter.adapter_address[4]),2)+' '+IntToHex(Ord(Adapter.adapter_address[5]),2) Then ShowMessage('I='+IntToStr(I)+' '+IntToHex(Ord(Adapter.adapter_address[0]),2)+' '+IntToHex(Ord(Adapter.adapter_address[1]),2)+' '+IntToHex(Ord(Adapter.adapter_address[2]),2)+' '+IntToHex(Ord(Adapter.adapter_address[3]),2)+' '+IntToHex(Ord(Adapter.adapter_address[4]),2)+' '+IntToHex(Ord(Adapter.adapter_address[5]),2)+' J='+IntToStr(J)+' '+MAC); J:=I; //ShowMessage(IntToStr(I)); MAC:=IntToHex(Ord(Adapter.adapter_address[0]),2)+' '+IntToHex(Ord(Adapter.adapter_address[1]),2)+' '+IntToHex(Ord(Adapter.adapter_address[2]),2)+' '+IntToHex(Ord(Adapter.adapter_address[3]),2)+' '+IntToHex(Ord(Adapter.adapter_address[4]),2)+' '+IntToHex(Ord(Adapter.adapter_address[5]),2); End; End; End; End; End; P.S (* - локальный хост, знаю) Вот например, опытным путем установил что есть адаптер 00 и 05 00: MAC: 00 B5 66 A1 8C 47 < этот определяется включен нетбиос. 05: MAC: 00 62 55 00 00 00 < Этот не определяется (подключение по нему подключено) При активных подключениях на обоих адаптерах Enum.Length=1 при NCB.ncb_lana_num:=Enum.lana[0] > получается MAC адаптера 00 nbtstat -a показывает информацию как на локальный хост так и на внешний Нетбиос на первом адаптере закрыт, подключение установлено 00: MAC: 00 62 55 00 00 00 < Этот определяется (подключение по нему установлено) В программе получается только MAC адрес. при указании этого номера в NCB.ncb_lana_num:=Enum.lana[0] не возвращает список нетбиос имен удаленного хоста nbtstat -a пробует соединиться п первому адаптеру потом по второму и по второму выдает список нетбиос имен удаленного хоста (сорри если несрпавильно вещи называю... просто я в этом сорри не понимаю и пытаюсь написать побольше информации, может кому то чтото станет примерно понятно в чем могет быть проблема) (в частности пример Rouse то же выдает при перечислении только 1 адаптер) имеетли значение физический интерфейс или нет? |