![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MAC адрес в offline [D7, WinXP]
Kr_H|6apa6aH © (2006-11-09 11:00:00)Использую МАС как ключ, для своей программы, только вот на некоторых рабочих местах нет сети и МАС не определяется. Подскажите кто нибудь, как можно определить МАС находясь в офлауне? Может из реестра где откопать. В общем я уже устал искать.
Kr_H|6apa6aH (2006-11-20 14:13:00) [1]Модератор, расскажи мне зачем ты удалил млю благодарность Василию. Не твоё не трогай! Поставь на место что было!
Kr_H|6apa6aH (2006-11-20 09:12:00) [2]Удалено модератором
Вася (2006-11-18 17:03:00) [3]
> Kr_H|6apa6aH (15.11.06 12:22) [18]
> И все таки как извлечь МАС в оффлайне
uses Windows, SysUtils, Classes, Controls;
...
const
MAX_ADAPTER_NAME_LENGTH = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH = 8;
// Типы адаптеров
MIB_IF_TYPE_OTHER = 1;
MIB_IF_TYPE_ETHERNET = 6;
MIB_IF_TYPE_TOKENRING = 9;
MIB_IF_TYPE_FDDI = 15;
MIB_IF_TYPE_PPP = 23;
MIB_IF_TYPE_LOOPBACK = 24;
MIB_IF_TYPE_SLIP = 28;
Type // Структуры для выполнения GetAdaptersInfo
PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING = record
Next: PIP_ADDR_STRING;
IP : array [0..15] of Char;
Mask: array [0..15] of Char;
Context: DWORD;
end;
Mac_Addr = array [0..MAX_ADAPTER_ADDRESS_LENGTH-1] of BYTE;
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = record
Next : PIP_ADAPTER_INFO;
ComboIndex : DWORD;
AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH+3] of Char;
Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH+3] of Char;
AddressLength : UINT;
Address : Mac_Addr;
Index : DWORD;
Typ : UINT;
DhcpEnabled : UINT;
CurrentIpAddress : PIP_ADDR_STRING;
IpAddressList : IP_ADDR_STRING;
GatewayList : IP_ADDR_STRING;
DhcpServer : IP_ADDR_STRING;
HaveWins : BOOL;
PrimaryWinsServer : IP_ADDR_STRING;
SecondaryWinsServer: IP_ADDR_STRING;
LeaseObtained : LongInt;
LeaseExpires : LongInt;
end;
Var FLibHandle : THandle;
// Процедура доступа к описанию сетевых интерфейсов
GetAdaptersInfo : function(pAdapterInfo: PIP_ADAPTER_INFO;
var pOutBufLen: ULONG): DWORD; stdcall;
{================================================}
{ Загрузка библиотечных процедур }
{================================================}
Procedure Load_Library;
Begin
IF FLibHandle = 0 THEN BEGIN
// Загружаем библиотеку
FLibHandle := LoadLibrary('IPHLPAPI.DLL');
IF FLibHandle = 0 THEN Exit;
// Получаем адреса библиотечных процедур
@GetAdaptersInfo := GetProcAddress(FLibHandle, 'GetAdaptersInfo');
IF Not Assigned(GetAdaptersInfo) THEN FreeLibrary(FLibHandle);
END;
End;
{================================================}
{ Преобразование МАС-адреса }
{================================================}
Function GetMAC(MAC:Mac_Addr; Length:Integer): String;
Var i: Integer;
Begin
IF Length = 0 THEN
Result := '000000000000'
ELSE BEGIN
Result := '';
FOR i:=0 to Length-1 DO Result := Result + IntToHex(MAC[i],2);
END;
End;
{================================================}
{ Получить описание сетевых интерфейсов }
{================================================}
Var PInfo : PIP_ADAPTER_INFO;
Len : ULONG;
Begin
Load_Library;
IF Assigned(GetAdaptersInfo) THEN BEGIN
// Определяем размер памяти под таблицу
GetAdaptersInfo (nil, Len);
GetMem (PInfo, Len);
// Получаем данные об интерфейсах
IF GetAdaptersInfo (PInfo, Len) = ERROR_SUCCESS THEN BEGIN
REPEAT
IF PInfo^.Typ <> MIB_IF_TYPE_LOOPBACK THEN BEGIN
...
// данные адаптера
// PInfo^.Description - имя интерфейса
// GetMAC (PInfo^.Address, PInfo^.AddressLength); - МАС-адрес
...
PInfo := PInfo^.Next;
END;
UNTIL PInfo = nil;
END;
FreeMem(PInfo);
END;
end;
Kr_H|6apa6aH (2006-11-15 12:22:00) [4]И все таки как извлечь МАС в оффлайне. Искал в яндексе, он мне дал ссылку на этот сайт, но она не активна, т.е. как то можно, может кто интересовался или страница куда апереехала.
Anatoly Podgoretsky (2006-11-13 14:56:00) [5]> DVM (13.11.2006 13:55:16) [16]
А много ли их легкодоступных, действительно уникальных номеров?
Например HDD не относится к легкодоступным, если вообще доступным в некоторых случаях. МАС адрес легко изменяемый.
--
DVM (2006-11-13 13:55:00) [6]
> Или хотя бы подскажите что можно сделать в этом случае?
Привязывайся к нескольким характеристикам, например еще к жесткому диску, если один из номеров совпадает, значит компьютер правильный.
Kr_H|6apa6aH (2006-11-13 09:41:00) [7]Я вообще спрашивал как сделать, а не разговоры говорить просил.
Проограмму я написал бесплатно, только вот не хочу, чтобы она дальше этого человека по рукам пошла.
Или хотя бы подскажите что можно сделать в этом случае?
Anatoly Podgoretsky (2006-11-10 16:02:00) [8]> DVM (10.11.2006 15:46:13) [13]
Может быть, суть в том, что было время когда сетевая плата очень дорого стоила и не имела смысла ее покупать на домашний компьютер, только ради целей тестирования. Когда существовало бесплатное средство - эмулятор сетевой платы, ака виртуальный адаптер, при том для всех версий ОС. Я например обходился модемом или его емулятором.
DVM (2006-11-10 15:46:00) [9]
> В общем стоили столько, сколько сейчас стоит системный блок,
> с интегриваной сетевой и аудио платой.
Ну это еще раньше чем 10 лет назад.
Anatoly Podgoretsky (2006-11-10 13:48:00) [10]> DVM (10.11.2006 10:09:11) [11]
В общем стоили столько, сколько сейчас стоит системный блок, с интегриваной сетевой и аудио платой.
Это уже потом пошло постоянное снижение цен.
DVM (2006-11-10 10:09:00) [11]
> зачем прикидывать? можно поднатужиться и вспомнить. %-)
Как сейчас помню, в 1996 году покупал 2 сетевые ISA NE2000 стоили по 250 руб кажется, курс доллара был 6 руб.
Ketmar (2006-11-09 16:27:00) [12]>[9] Anatoly Podgoretsky(c) 9-Nov-2006, 16:15
>Прикинь сколько стоила сетевая плата десять лет назад.
зачем прикидывать? можно поднатужиться и вспомнить. %-)
Anatoly Podgoretsky (2006-11-09 16:15:00) [13]> Ketmar (09.11.2006 15:17:08) [8]
Так и есть, ерунда, а тогда серьезно. Прикинь сколько стоила сетевая плата десять лет назад.
Ketmar (2006-11-09 15:17:00) [14]я просто забыл о такой ерунде. %-)
Anatoly Podgoretsky (2006-11-09 15:06:00) [15]> Ketmar (09.11.2006 14:50:06) [6]
Между прочим ранее частый вопрос - как отладить сетевое приложение, если у меня сетевой платы нет. Ответы или виртуальный адаптер или модем.
Ketmar (2006-11-09 14:50:00) [16]а. понял. а то я задумался, как это: сеть есть, а платы нет. теперь ясно, о чём ты. %-)
Anatoly Podgoretsky (2006-11-09 14:35:00) [17]Виртуальный адаптер сети, аналогично принтеру, виртуальный адаптер сети существует у Микрософта по крайней мере 10 лет. Хороший драйвер адаптера сети позволяет указывать любой МАС адрес, хоть виртуалом, хоть реальным. Последнее очень актуально для подключения к Сети, провайдеры однако.
Ketmar (2006-11-09 14:31:00) [18]>[3] Anatoly Podgoretsky(c) 9-Nov-2006, 13:27
>Плата не нужна
"как это?" (ц)
Anatoly Podgoretsky (2006-11-09 13:27:00) [19]> Ketmar (09.11.2006 12:41:02) [2]
Плата не нужна, нужна инсталированая сеть, правда я сразу могу сказать результат для типового адаптера - 00-00-00-00-00-00 но ты его определишь.
Ketmar (2006-11-09 12:41:00) [20]а у меня вот, например, сетевухи нет. как MAC-то определить? кто подскажет, а?