|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
Извличане на MAC на локалния PC
|
|
Автор | v_automation (Нерегистриран) |
Публикувано | 29.03.04 03:04 |
|
Здравейте!
Трябва ми код на делфи или в краен случай на C и по-възвожност не на assembler за извличане на MAC адреса на мрежова карта монтирана( но несвързана към мрежа) на локалния компютър, който работи под "windows all" , без до се използват мрежови протоколи и функции, което явно в тази ситуация е неуместно.
Венцислав Александрийски.
П.П. - по възможност без използване на инструкции за командния промпт
| |
Тема
|
Re: Извличане на MAC на локалния PC
[re: v_automation]
|
|
Автор | ShaDoW (Нерегистриран) |
Публикувано | 29.03.04 09:52 |
|
Ей това ми попадна случайно преди малко :)
http://www.scalabium.com/faq/dct0088.htm
П.П. Изкефих се като каза "по възможност без използване на инструкции за командния промпт" В последно време много се ползва ;)
| |
|
Това е направо чудесно! С тази разлика, че при мен при всяко стартиране връща различен резултат
| |
|
Чесно казано не бих искал да заложа на CoCreateGUID за това ;-))))
Ето ти и работещ код (надявам се - ти ще кажеш)
uses
NB30;
function GetAdapterInfo(Lana: Char): String;
var
Adapter: TAdapterStatus;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBRESET);
NCB.ncb_lana_num := Lana;
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := 'mac not found';
Exit;
end;
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBASTAT);
NCB.ncb_lana_num := Lana;
NCB.ncb_callname := '*';
FillChar(Adapter, SizeOf(Adapter), 0);
NCB.ncb_buffer := @Adapter;
NCB.ncb_length := SizeOf(Adapter);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := 'mac not found';
Exit;
end;
Result :=
IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;
function GetMACAddress: string;
var
AdapterList: TLanaEnum;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
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[0])
else
Result := 'mac not found';
end;
---
Колкото повече, толкова повече.
| |
Тема
|
Промяна на МАК на Realtek8029, WinBond, 3Com
[re: v_automation]
|
|
Автор |
NikB (любопитен) |
Публикувано | 29.03.04 20:25 |
|
Това по-долу ми попадна сличайно. Май е малко в страни от темата, но за тест ма МАК адреси бива.
(А по темата - примерчето на фантомаАС е ОК :)
К примеру, на сетевых картах Realtek8029, WinBond, 3Com можно изменять MAC-адрес, устанавливая соответствующие ключи в реестре:
Для win9x:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\Net\0000] - здесь необходимо создать 2 строковые переменные (string):
"NetworkAddress"="xx-xx-xx-xx-xx-хх"
"SelectedID"="xx-xx-xx-xx-xx-хх"
где xx-xx-xx-xx-xx-хх - любой MAC-адрес, который будет душе угоден.
Для winNT:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<адаптер>\Parameters]
"NetworkAddress"="xx-xx-xx-xx-xx-хх"
"SelectedID"="xx-xx-xx-xx-xx-хх"
| |
Тема
|
Re: Извличане на MAC на локалния PC
[re: v_automation]
|
|
Автор | v_automation (Нерегистриран) |
Публикувано | 29.03.04 22:05 |
|
Здравейте!
Искам да отбележа че примера с netbios-a не е съгласно изискването което поставих да не се ползват мрежови протоколи. Аз нямам мрежа и този пример не работи. Не е много удобно все пак да карам патребителите да се включват в мрежа за да мога да им взема MAC-а. Примера с GUID е даден в една статия на борланд за това какво не трябва да се прави. Там пише че последните цифри от GUID които се генерират може и да са MAC-а но по-вероятно е да са просто шестнадесетични числа. При това ако има повече от 1 карта съвсем не се връзва. Има и някъв начин с използване на SNMP, който не съм поробвал но не вярвам да тръгне без да има мрежа. От команд промпта почти всяка команда дето е за мрежато вади MAK-овете и на 2-те карти дето ги имам, което зночи че има начин. Освен това протокола дето ще използвам за да ги получа от него огкаде ги вади?
Извадете си кабела за лан-а и пробвойте дали работи примерчето, защото при мене не става(може аз да бъркам нещо). Дава грешка още на NCBENUM.
Неможе да няма начин да се детектнат картите и да им се вземат номерата и без мрежа.
Венцислав Александрийски
| |
|
>>>>>Искам да отбележа че примера с netbios-a не е съгласно изискването което поставих да не се ползват мрежови протоколи.
А ти какви функции очакваш да се използват ?!? Тези за достъп до звуковата карта - после може да се окаже, че и звукова карта нямаш.
>>>> Извадете си кабела за лан-а и пробвойте дали работи примерчето, защото при мене не става(може аз да бъркам нещо). Дава грешка още на NCBENUM.
Неможе да няма начин да се детектнат картите и да им се вземат номерата и без мрежа.
Аз имам 2 мрежови карти - и при мен примера НЕ ДАВА ГРЕШКА !!!! - просто за изключената мрежова карта не връща резултат или по точно MAC not found. Което обаче е повод да се заровиш в хелп-овете на Win32 или MSDN - и да си намериш решение - защото случая ти е специфичен - повечето мрежови карти (даже и без работеща мрежа ) се очаква да са вързани в хъб/суич - и тогава примера ще работи. Най-добре е да ползваш регистрите - както беше казал някой - само, че ми хрумва следната идея ???? какво ще правиш ако някой от клиентите ти ВЪОБЩЕ няма мрежова карта, а не просто си я държи изключена ?
---
Колкото повече, толкова повече.
| |
Тема
|
Re: Извличане на MAC на локалния PC
[re: PhantomAS]
|
|
Автор | v_automation (Нерегистриран) |
Публикувано | 31.03.04 02:48 |
|
Здравей!
Нещо поизнервен ми се виждаш :).
Неискам да ти противореча, особенно когато си в криза, но искам да отбележа че netbios-а напоследък малко позападва. За да си ръчка чавек в нета netbios не му трябва.
Ако си извадиш кабелите от всички карти ще видиш какъв е резултата(и аз съм с 2 карти но съм без мрежа).
Явно инструментите на windows не ползват този така естествен подход, щом не им трябва мрежа за да работят. Аида-та също работи без мрежа.
Не е нужно да се стресираш щом незнаеш варянт за случая който ме интересува, някой друг сигурно ще знае.
Венцислав Александрийски
| |
Тема
|
Re: Извличане на MAC на локалния PC
[re: v_automation]
|
|
Автор | тapиkaт (Нерегистриран) |
Публикувано | 01.04.04 12:42 |
|
http://www.programmer.iatp.org.ua/delphi/stati/faq/w32apifaq.htm
т. 42 - има пример със сокет
| |
Тема
|
Re: Извличане на MAC на локалния PC
[re: v_automation]
|
|
Автор | Пpakтиk (Нерегистриран) |
Публикувано | 01.04.04 15:38 |
|
>>>>От команд промпта почти всяка команда дето е за мрежато вади MAK-овете и на 2-те карти дето ги имам, което зночи че има начин. Освен това протокола дето ще използвам за да ги получа от него огкаде ги вади?
Просто решение. От програмката на Делфи си пускаш промта с насочване на изхода в текстов файл. После анализираш файла и си готов
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|