Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 30.12.2017, 08:29   #1
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,767
Репутация: 226

icq: 473732523
Вопрос Получить 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, 09:30   #2
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,018
Репутация: 675
По умолчанию

Что написали, то и получаете..
Код:

until ... or (_SystemID <> '00-00-00-00-00-00');

На первом же нормальном MAC цикл принудительно вырубится.
Black Fregat вне форума   Ответить с цитированием
Старый 30.12.2017, 15:04   #3
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,767
Репутация: 226

icq: 473732523
По умолчанию

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

Убрать это :
Код:

 or (_SystemID <> '00-00-00-00-00-00');

Да ?
digitalis вне форума   Ответить с цитированием
Старый 30.12.2017, 22:12   #5
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,767
Репутация: 226

icq: 473732523
По умолчанию

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

Цитата:
А как сделать, чтобы был весь список через запятую.
Код:

_SystemID:= _SystemID +',' +.... ;

__________________
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме   Ответить с цитированием
Старый 31.12.2017, 11:10   #7
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,767
Репутация: 226

icq: 473732523
По умолчанию

Решено
Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


10:04.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru