powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / не ммогу получить MAC адрес с устройства
22 сообщений из 22, страница 1 из 1
не ммогу получить MAC адрес с устройства
    #40062608
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все просто, клиент ставит софт, соглашается со всеми ДА ДА ДА
и все как бы прекрасно было до сегодня.

у меня не было и пока нет устройств с динамическими MAC адресами, все клиенты под Windows.

в итоге так как я не вижу MAC адрес устройства у меня два вопроса

первый, мой софт установлено, запускает
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function GetMACAddress(iLana:integer): string;
var
  AdapterList: TLanaEnum;
  NCB: TNCB;
begin
  FillChar(NCB, SizeOf(NCB), iLana);
  NCB.ncb_command := Char(NCBENUM);
  NCB.ncb_buffer := @AdapterList;
  NCB.ncb_length := SizeOf(AdapterList);
  Netbios(@NCB);
  if Byte(AdapterList.length) > 0 then
    Result := GetAdapterInfo(AdapterList.lana[iLana])
  else
    Result := ' ';
end;


но в итоге пустота

второй вопрос, как мне определить, MAC адрес создан динамически, или производителем.
p.s. Я ЧЕГО ТО НЕ ЗНАЮ, ИЛИ Я ЗАСТРЯЛ В 2010-Х. просто раньше не было задач на подобную тему, точнее были, но тип регистрации таких устройств был в ручную, но тут я зохотел немного автоматизировать.
я тестировал на протяжении некоторого времени несколько устройств, при смене запросов и сетей, телефоны, планшеты выдают разные MAС адреса
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062615
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
второй вопрос, как мне определить, MAC адрес создан динамически, или производителем.

Никак, так как это меняется на аппаратном уровне.
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062616
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

из практики тестирования соглашаюсь, но первый вопрос ....... ?
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062618
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63как мне определить, MAC адрес создан динамически, или производителем.

Поищи в гугле структуру мака. Один из битов старшего байта за это отвечает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062622
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yemets63
alekcvp,
из практики тестирования соглашаюсь, но первый вопрос ....... ?


На первый вопрос у меня сейчас нет под рукой кода. Через NCB это устаревший вариант, сейчас актуально через GetAdaptersAddresses ЕМНИП.
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062623
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Поищи в гугле структуру мака. Один из битов старшего байта за это отвечает.
Это чтобы виртуальный от реального отличать. Динамический можно любой прописать, ты никак об этом не узнаешь.
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062626
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

я когда то думал, что MAC уникален, но тут, 20 лет назад пришли мобильники с интернетом. я протестировал 2 телефона на моем роутере, они после сброса настроек имеют новые МАС адреса
я к базе добавил второй индекс, что не только МАС может быть уникальным, также по возможности собирают SNMP, базу которую вынужден растить, и по результатам работы, моя железная системе верна не на 100%. понятно, что если глубоко нырнуть, я про Windows молчу, то и Linux куча непонятного, не то дыры, не то БАГи, не то так надо. но когда знаешь о возможной ошибке, но не знаешь где и когда, необходимо нырнуть по глублже, в итоге нанырялся, хочу варианты.
но не понимаю, почему не работает функция получения MAC и IP тоже
прога установлена, собранная в Delphi,
закидывал на этот комп PHP,
Windows 7

в итоге вижу так
MAC просто пустой, ка ждое число просто NULL
IP адрес реальный 192 168 178 адрес
также есть внешний.
но прога снимает с PC только 127.0.0.1

я получил доступ к PC. запустил трассировку. я ни чего не нашел
MAC адреса нет
адрес IP 127***

и ни каких родных 192***

я перепробовал собственные функции, из интернета, а также варианты. модуль который я собрал, работает на Windows XP - Windows 10, так же серверы, 64 и 32 бита, и Windows 7 тоже. но есть ни одна PC а две, с Windows 7, где я не могу получить MAC адрес.
какой то абсурд. но он есть, и это надо вылечить
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062667
DHDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yemets63,

проверь это (из Delphi7, работает на Rio 10.3.3)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
uses NB30;

 function GetMACAdress: ansistring;
 var
   NCB: PNCB;
   Adapter: PAdapterStatus;

   URetCode: PChar;
   //RetCode: char;
   RetCode: ansichar;
   I: integer;
   Lenum: PlanaEnum;
   _SystemID: ansistring;
   s,TMPSTR: ansistring;
 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         := Netbios(NCB);
   i := 0;
   s:='';
   repeat
     Fillchar(NCB^, SizeOf(TNCB), 0);
     Ncb.ncb_command  := chr(NCBRESET);
     Ncb.ncb_lana_num := lenum.lana[I];
     RetCode          := 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        := 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);
     s:=_SystemID;
   until (I >= Ord(Lenum.Length))or ((_SystemID <> '00-00-00-00-00-00')and(_SystemID <> '0'));
   FreeMem(NCB);
   FreeMem(Adapter);
   FreeMem(Lenum);
   //result:=_SystemID;
   result:=s;
end;

...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062686
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть сменил сетевуху - рега слетела? В топку такой софт
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062698
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
var
  LInfo: PIP_ADAPTER_INFO;
  LCurInfo: PIP_ADAPTER_INFO;
  LRes: Cardinal;
  LLen: Cardinal;
  Li: Integer;
begin
  LLen := 0;
  LRes := GetAdaptersInfo(nil, LLen);
  if LRes <> ERROR_BUFFER_OVERFLOW then
    RaiseLastOSError(LRes);
  GetMem(LInfo, LLen);
  try
    LRes := GetAdaptersInfo(LInfo, LLen);
    if LRes <> ERROR_SUCCESS then
      RaiseLastOSError(LRes);
    LCurInfo := LInfo;
    while LCurInfo <> nil do begin
      if (LCurInfo^.Type_ = MIB_IF_TYPE_ETHERNET) then begin
        for Li := 0 to Length(TestMacList) do begin
          if Int64(LCurInfo^.Address) = TestMacList[Li] then begin
            Result := True;
            Exit;
          end;
        end;
      end;
      LCurInfo := LCurInfo^.Next;
    end;
  finally
    FreeMem(LInfo);
  end;
  Result := False;
end;

...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062751
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetAdaptersAddresses - что показывает?
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062759
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
То есть сменил сетевуху - рега слетела? В топку такой софт

А как ты предлагаешь привязывать лицензию к компу?
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062760
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747А как ты предлагаешь привязыватьлицензию к компу?

А зачем ты хочешь привязывать лицензию к компу?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062761
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747
Fr0sT-Brutal
То есть сменил сетевуху - рега слетела? В топку такой софт

А как ты предлагаешь привязыватьлицензию к компу?


Как и все.. доступ к интернету и сбор информации, о чем пользователь соглашается при установке..
Приложение шлет статистику запусков, кто, что, какие лицензии.. ну а потом через суд - санкции...
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062764
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что угодно может испортится: проц, материнка, диск. Наиболее адекватный подсчет лицензий, имхо, дают аппаратные ключи или онлайн-отслеживание ID инсталляции.
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062766
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747
Fr0sT-Brutal
То есть сменил сетевуху - рега слетела? В топку такой софт

А как ты предлагаешь привязывать лицензию к компу?

Мак тебе даст ровно 0 защиты и больше гемора клиентам. Кроме разве что корпоративного сегмента, там этим админы займутся, не забота юзера
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062768
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.04.2021 14:19, Fr0sT-Brutal пишет:
> Мак тебе даст ровно 0 защиты и больше гемора клиентам. Кроме разве что корпоративного сегмента, там этим админы займутся, не забота юзера

+1
всё одно что привязаться к GUID
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062770
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
То есть сменил сетевуху - рега слетела? В топку такой софт

Расскажи это Windows 10 😁
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062774
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот так получал список МАК-адресов (код немного избыточный, потому что просто вырезал из своего проекта):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
uses JwaIpHlpApi, JwaIpTypes, JwaIpIfCons; // Jedi WinAPI Library - возможно сейчас это уже есть в стандартной поставке

procedure EnumNetworkAdapters;
const
  MAX_ADAPTER_COUNT = 16;
var
  IpInfoMem: PIpAdapterInfo;
  IpInfo: PIpAdapterInfo;
  BufferSize: Cardinal;
  ErrorCode: Cardinal;
  AdapterIndex: Integer;
begin
  AdapterIndex := 0;
  BufferSize := 0;
  ErrorCode := GetAdaptersInfo(nil, BufferSize);
  if ErrorCode <> ERROR_BUFFER_OVERFLOW then
    RaiseWinAPIException('GetAdaptersInfo', ErrorCode);
  GetMem(IpInfoMem, BufferSize);
  try
    WinAPICheck(GetAdaptersInfo(IpInfoMem, BufferSize), 'GetAdaptersInfo');
    IpInfo := IpInfoMem;
    SetLength(AgentIDList, MAX_ADAPTER_COUNT);
    while (IpInfo <> nil) and (AdapterIndex < MAX_ADAPTER_COUNT) do
    begin
      if IpInfo.Type_ = MIB_IF_TYPE_ETHERNET then
      begin
        В принципе здесь у нас мак-адрес в IpInfo.Address (: array [0..7] of Byte)
        AgentIDList[AdapterIndex].FromAddress(IpInfo.Address);
        Inc(AdapterIndex);
      end;
      IpInfo := IpInfo.Next;
    end;
  finally
    SetLength(AgentIDList, AdapterIndex);
    FreeMem(IpInfoMem);
  end;
end;
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40062835
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Winapi.IpTypes, Winapi.IpHlpApi

там все есть
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40063059
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По просьбам трудящихся дискуссия об
оформлении переехала в отдельный топик:
https://sql.ru/forum/1335333
...
Рейтинг: 0 / 0
не ммогу получить MAC адрес с устройства
    #40065366
yemets63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в итоге MAC, учитывая что из ряда представленных списков IP адрес и MAC на PC и всех предложенных известных алгоритмов, учитывая множество операционных систем в моем проекте я настроил так, что использую все варианты, так как одни работают в XP других выше.

а так как все предложенные примеры работают и там и там, но по очередности, вы можете их использовать

супер спасибо всем
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / не ммогу получить MAC адрес с устройства
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]