Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2017, 07:29   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
Вопрос Получить MAC-адреса всех сетевых карт

Доброго времени суток!
Так могу получить MAC только одной сетевой карты
Код:
function GetMACAdress: string;
var
  NCB: PNCB;
  Adapter: PAdapterStatus;
  RetCode: Char;
  I: Integer;
  Lenum: PlanaEnum;
  _SystemID: String;
begin
  Result := '';
  _SystemID := '';
  Getmem(NCB, SizeOf(TNCB));
  Fillchar(NCB^, SizeOf(TNCB), 0);
  Getmem(Lenum, SizeOf(TLanaEnum));
  Fillchar(Lenum^, SizeOf(TLanaEnum), 0);
  Getmem(Adapter, SizeOf(TAdapterStatus));
  Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);
  Lenum.Length := Chr(0);
  NCB.ncb_command := Chr(NCBENUM);
  NCB.ncb_buffer := Pointer(Lenum);
  NCB.ncb_length := SizeOf(Lenum);
  RetCode := Char(Netbios(NCB));
  I := 0;
  repeat
    FillChar(NCB^, SizeOf(TNCB), 0);
    Ncb.ncb_command := Chr(NCBRESET);
    Ncb.ncb_lana_num := Lenum.lana[I];
    RetCode := Char(Netbios(Ncb));
    FillChar(NCB^, SizeOf(TNCB), 0);
    Ncb.ncb_command := Chr(NCBASTAT);
    Ncb.ncb_lana_num := Lenum.lana[I];
    // Must be 16
    Ncb.ncb_callname := '*               ';
    Ncb.ncb_buffer := Pointer(Adapter);
    Ncb.ncb_length := SizeOf(TAdapterStatus);
    RetCode := Char(Netbios(Ncb));
    //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
    if (RetCode = Chr(0)) or (RetCode = Chr(6)) then
    begin
      _SystemId := 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;
    Inc(I);
  until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
  FreeMem(NCB);
  FreeMem(Adapter);
  FreeMem(Lenum);
  GetMacAdress := _SystemID;
end;
Как можно получить MAC-адреса всех имеющихся Включенных/Активных сетевых карт?
Shouldercannon вне форума Ответить с цитированием
Старый 30.12.2017, 08:30   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Что написали, то и получаете..
Код:
until ... or (_SystemID <> '00-00-00-00-00-00');
На первом же нормальном MAC цикл принудительно вырубится.
Black Fregat вне форума Ответить с цитированием
Старый 30.12.2017, 14:04   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

А как сделать, чтобы был весь список через запятую. Не могу поймать то самое место где де нужно в цикле собрать полный список.
Shouldercannon вне форума Ответить с цитированием
Старый 30.12.2017, 18:12   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Убрать это :
Код:
 or (_SystemID <> '00-00-00-00-00-00');
Да ?
digitalis вне форума Ответить с цитированием
Старый 30.12.2017, 21:12   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Не всё так просто. Вариант всё равно один приходит от процедуры
Shouldercannon вне форума Ответить с цитированием
Старый 30.12.2017, 21:43   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
А как сделать, чтобы был весь список через запятую.
Код:
_SystemID:= _SystemID +',' +.... ;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.12.2017, 10:10   #7
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Решено
Код:
function GetMACAdress: string;
var
  NCB: PNCB;
  Adapter: PAdapterStatus;
  RetCode: Char;
  I: Integer;
  Lenum: PlanaEnum;
  _SystemID: String;
begin
  Result := '';
  _SystemID := '';
  Getmem(NCB, SizeOf(TNCB));
  Fillchar(NCB^, SizeOf(TNCB), 0);
  Getmem(Lenum, SizeOf(TLanaEnum));
  Fillchar(Lenum^, SizeOf(TLanaEnum), 0);
  Getmem(Adapter, SizeOf(TAdapterStatus));
  Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);
  Lenum.Length := Chr(0);
  NCB.ncb_command := Chr(NCBENUM);
  NCB.ncb_buffer := Pointer(Lenum);
  NCB.ncb_length := SizeOf(Lenum);
  RetCode := Char(Netbios(NCB));
  I := 0;
  repeat
    FillChar(NCB^, SizeOf(TNCB), 0);
    Ncb.ncb_command := Chr(NCBRESET);
    Ncb.ncb_lana_num := Lenum.lana[I];
    RetCode := Char(Netbios(Ncb));
    FillChar(NCB^, SizeOf(TNCB), 0);
    Ncb.ncb_command := Chr(NCBASTAT);
    Ncb.ncb_lana_num := Lenum.lana[I];
    // Must be 16
    Ncb.ncb_callname := '*               ';
    Ncb.ncb_buffer := Pointer(Adapter);
    Ncb.ncb_length := SizeOf(TAdapterStatus);
    RetCode := Char(Netbios(Ncb));
    //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
    if (RetCode = Chr(0)) or (RetCode = Chr(6)) then
    begin
      _SystemID := _SystemID + ', ' + 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;
    Inc(I);
  until (I >= Ord(Lenum.Length)){ or (_SystemID <> '00-00-00-00-00-00')};
  FreeMem(NCB);
  FreeMem(Adapter);
  FreeMem(Lenum);
  GetMacAdress := Copy(_SystemID, 3, Length(_SystemID));
end;
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить список всех сетевых подключений dmitriegorovih Работа с сетью в Delphi 11 23.01.2022 00:54
После смены MAC адреса пропадает интернет на Virtualbox NaSlia Свободное общение 18 12.01.2017 09:08
получить всех ip адреса по локальной сети alman12 Общие вопросы Delphi 22 16.09.2015 19:11
Маскировка MAC адреса JollyJoker C/C++ Сетевое программирование 2 14.11.2011 13:58