| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Проблема определения MAC-адреса |
| Автор: p0s0l 6.11.2004, 16:49 |
| Мне надо сделать привязку программы к железу. Один из параметров привяки - MAC адрес сетевого адаптера. Но возникли трудности... Не нашёл способа уверенного определения MAC-адреса. Способы, которые я пробовал - ненадёжные... 1) Через функцию Netbios (см. DRKB). Если нет сетевого подключения, получается облом... 2) Через сокеты (см. DRKB): socket, getsockopt. Не работает в любом случае... Пока не разбирался в чём дело... 3) Создание GUID/UUID В GUID/UUID используется MAC-адрес. Опять же, если нет сетевого подключения, то будет кирдык - либо возьмётся MAC-адрес другого активного адаптера (например, их устанавливает VMWare), либо если их нет, будет какая-то ерунда вместо MAC-адреса... 4) Ip Helper API GetAdaptersAddresses - в возвращаемой структуре есть поле PhysicalAddress, но почему он один ? А если несколько адаптеров ? В любом случае, на моём компе это поле заполняется нулями... SendARP (inet_addr('127.0.0.1'), 0, ...) - не пашет... как им пользоваться ? GetIpNetTable - в bPhysAddr что-то не то... GetAdaptersInfo - работает, но опять же только если соединение активно КАК БЫТЬ ? Какие идеи ? |
| Автор: Girder 10.11.2004, 02:08 | ||||||
Ну... можно обратиться к таблице маршрутизации на прямую, т.е. воспользоваться INETMIB1.DLL: SnmpExtensionInit - Функция инициализации; SnmpExtensionQuery - Функция запроса; SnmpExtensionTrap - Обработчик ловушек. Проверять, при неактивном сетевом подключении, не стал... так как считаю что привязка по MAC не есть гуд... Поясню...: 1)Для некоторых сетевых карт можно заменить МАС адресс в настройках драйвера; 2)Для некоторых... устанавливая соответствующие ключи в реестре 3)Использование двух интерфейсов - готовых реализаций в инете полно 4)Самый простой и надежный способ! - Корректировать драйвер сетевой карты. Т.к. драйвер сетевой карты считывает MAC-адрес через стандартные порты ввода-вывода только на этапе инициализации! Чтение MAC-адреса происходит через порт XXX и определение его не составляет труда: смотрится диапазон ввода-вывода сетевой карты... к примеру он равен=AA00h...AA1Fh => тогда XXX=AA00h+10h=AA10h... ну а дальше SoftIce и bpio AA10 r и... и... я думаю поймеш дальше сам... PS: Даже если ты сделаеш определение МАС адресса через порт(имхо: самый надежный спрособ Удачи. |
| Автор: p0s0l 10.11.2004, 13:08 | ||||
Это понятно. Но моя прога сама не знает, какой MAC-адрес правильный (она лишь может сказать, есть изменения в аппаратуре или нет, а в чём именно изменения - это она не знает), поэтому какой адрес юзер будет ставить ? Короче, тут всё продумано (вроде
Еще пробовал через WMI - такая же фигня... Придётся отказаться от MAC-адреса... |
| Автор: Akella 11.12.2004, 10:14 |
| В WinXP такая программка исчезла, а в Win98 она была |
| Автор: Akella 11.12.2004, 10:15 |
| пример, как работать с ARP |
| Автор: Akella 11.12.2004, 10:18 |
| забыл, может быть, понаlобится WinSock2 |
| Автор: dm9 13.12.2004, 05:41 |
| Мне тоже сначала пришла в голову мысль использовать ipconfig /all |
| Автор: Alex 13.12.2004, 11:31 | ||
Ни куда она не изчезала Пуск->Выполнить->cmd /k ipconfig /all |
| Автор: p0s0l 17.12.2004, 23:08 | ||
dsergey, спасибо
IPConfig предназначен для IP-адресов, они назначаются при активном подключении. Нет подключения - нет IP-адреса, нет и MAC-адреса (если смотреть через IPConfig)... Короче, всё в итоге сводится к такому вопросу: Как узнать MAC-адрес, даже если нет сетевого подключения ? Все API-функции, которые я просмотрел, думают, что если нет сетевого подключения, то как будто бы и нет сетевой карты вообще, физически... Если делать через порт - то шкурка выделки не стоит... |
| Автор: Akella 23.12.2004, 12:11 |
| ну звыняйте, бананив у нас нэмае |