На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Netbios, NCBENUM, получить номера доступных для использования интерфейсоф , Почему выдает что установлено только одно устройство? (Я вижу 2 MAC адреса у себя)
    Вот скопировал я в инете пример поизвращался и так и сяк, посмотрел что что выдает, в общих чертах понял вроде...
    но далее проблема... сделал получение 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 байта


    ExpandedWrap disabled
      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 адаптер)


    имеетли значение физический интерфейс или нет?
    Сообщение отредактировано: Gen -
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0.0690 ]   [ 15 queries used ]   [ Generated: 24.10.26, 05:45 GMT ]