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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2008, 20:12   #1
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию MAC сетевухи.

Ребята, как можно узнать мак сетевухи и передать его в строку? Спасибо за помощь.
Небесный вне форума Ответить с цитированием
Старый 11.07.2008, 20:27   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Можно сделать так:

Код:
uses NB30;

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

   URetCode: PChar;
   RetCode: char;
   I: integer;
   Lenum: PlanaEnum;
   _SystemID: string;
   TMPSTR: 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         := Netbios(NCB);

   i := 0;
   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);
   until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
   FreeMem(NCB);
   FreeMem(Adapter);
   FreeMem(Lenum);
   GetMacAdress := _SystemID;
 end;



 procedure TForm1.Button1Click(Sender: TObject);
 begin
   label1.Caption := GetMACAdress;
 end;
Всегда рад помочь!

Последний раз редактировалось Terran; 11.07.2008 в 20:40. Причина: Прошу прощения, немного ошибся кодом.
Terran вне форума Ответить с цитированием
Старый 11.07.2008, 22:00   #3
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Благодарю Terran, завтра на работе обезательно попробую.
Суть такова, мы являемся провайдером инета, раздачу айпишек осуществляем по макам сетевух, и попробуй на пальцах абону объяснить, где посмотреть мак адрес, думаю даная прога мне упростит жизнь. )))

Последний раз редактировалось Небесный; 11.07.2008 в 22:08.
Небесный вне форума Ответить с цитированием
Старый 11.07.2008, 23:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Небесный, простите меня, если ляпну глупость...
а что ipconfig /all в строке "Физический адрес" - это разве не MAC адрес?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2008, 23:25   #5
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Небесный, простите меня, если ляпну глупость...
а что ipconfig /all в строке "Физический адрес" - это разве не MAC адрес?..
Вы когда нибудь пытались лузеру объяснить что такое командная строка?
Думаю дальше вопросов не будет, абонам будет проще нажать кнопочку в проге и она покажет ему мак. Практика показывает, что это будет выход.
Небесный вне форума Ответить с цитированием
Старый 12.07.2008, 10:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

так проще в своей кузявной программе вызвать командную строчку ipconfig /all и перехватить вывод, потом отпарсить и показать в окне...

Например, у меня вышеуказанные код вернул пустую строку, а ipconfig - что-то показал...
Кому верить больше - не знаю....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.07.2008, 16:15   #7
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так проще в своей кузявной программе вызвать командную строчку ipconfig /all и перехватить вывод, потом отпарсить и показать в окне...

Например, у меня вышеуказанные код вернул пустую строку, а ipconfig - что-то показал...
Кому верить больше - не знаю....
А, что идея, А, не подскажете, как вывести ipconfig /all.
Был бы безгранично благодарен.
Небесный вне форума Ответить с цитированием
Старый 12.07.2008, 17:01   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

посмотрите сюда - перехват консольного ввода\вывода

не получится - пишите, вместе (всей толпой на форуме, я имею в виду :-) ) разберёмся...

или, как вариант - через перенаправление ввода/вывода напрявляем текст в файл (ipconfig /all > myout.$$$ ) , а потом уже оттуда забираем...

но, если получится - первый вариант намного логичнее и красивее...

Последний раз редактировалось Serge_Bliznykov; 12.07.2008 в 17:04.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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