![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Glen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 15.1.2010 Репутация: нет Всего: нет |
У меня есть клиентский application на VC++ 6.0. Она при связи с неким сервером должна идентифицировать компьютер на котором она установлена. Для идентификации в частности используется MAC-адрес сетевого адаптера. Программист который это делал получал его так:
вызвал GetAdaptersInfo и получил размер буфера необходимый чтобы вернуть список всех адаптеров; выделил этот буфер; вызвал GetAdaptersInfo и получил список всех адаптеров в этот буфер; в качестве MAC-адреса использовал поле Address из САМОЙ ПЕРВОЙ структуры IP_ADAPTER_INFO находящейся в буфере Однако у одного из клиентов возникли проблемы: похоже наша программа, установленная на некоем компьютере, через какое-то время стала использовать другой MAC-адрес по сравнению с тем, что был на этом же компьютере раньше. Вроде бы - по словам клиента - это произошло ПОСЛЕ того как тот компьютер вошёл в Hibernate или StandBy; а потом вышел из него. Я пока не имею доступа к тому компьютеру, но скорее всего там установлены НЕСКОЛЬКО адаптеров, и почему-то изменился порядок их следования, когда они возвращаются функцией GetAdaptersInfo. Операционка - WinXP. Какие есть версии почему это могло случиться (или другая причина почему это могло случиться): - связано ли это именно с Hibernate или StandBy; или возможна какая-то ещё причина; - не восстановится ли старый порядок следования адаптеров после перезагрузки компьютера? - не является ли вышеописанный метод опредления MAC-адреса (в целях идентификации компьютера) компьютера в принципе порочным; и чем? |
|||
|
||||
borisbn |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
перечисление адаптеров в windows - вещь не предсказуемая. причём после установки какого-нибудь service pack'а всё может пойти по другому
если восстановится, то, скорее всего, это будет случайностью. Установишь новые драйвера на видео, например, и всё. кердык.
эту защиту несложно обойти: 1. перепрошить MAC-адрес на нужный ( чревато, конечно, но делается из интерфейса настроек драйвера ) 2. перехватить GetAdaptersInfo и возвращать то, что нужно. Если у твоих клиентов не хватит на это духа/ума/желания/средств ( нужное подчеркнуть ), то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
Glen |
|
||||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 15.1.2010 Репутация: нет Всего: нет |
>эту защиту несложно обойти: Нет, мой клиент этим заниматься не будет. Я имел в виду случаи подобные тому что я встретил - когда порядок следования адаптеров вдруг меняется. Пока это первый заказчик который встретился с проблемой - тысячи инсталляций моей программы работали без неё несколько лет. Добавлено через 1 минуту и 19 секунд
>установишь новые драйвера на видео, например, и всё. кердык. То есть драйверы ВИДЕО могут повлиять на перечисление порядка СЕТЕВЫХ АДАПТЕРОВ? |
||||||||||
|
|||||||||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 6 Всего: 135 |
возможно там был всего один адаптер ? так а чем тебе не нравится предложение
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Glen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 15.1.2010 Репутация: нет Всего: нет |
'то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный' - имеется в виду по принципу 'если в списках адаптеров совпадает хотя бы один элемент (вне зависимости от их порядка в списке), то этот - тот же комп'? Да, думаю придётся так и делать. Ибо за прошедшее время я выснил что использованный мной способ имеет принципиальные недостатки: - на компьютере могут создаваться разным софтом 'виртуальные адаптеры', попадающие в список ПЕРЕД физическими. И - ещё хуже - MAC такого виртуального адаптера может периодичски меняться, это нормальное явление. Я видел это на софте называемом Juniper Network Connect Virtual Adapter - даже без 'виртуальных' адаптеров может быть такое: есть один Ethernet обычный и один - WiFi. Этот WiFi стоит первым с списке - пока включён. А потом его запретили (когда принесли лаптоп в офис и включили в проводную сеть), и он вообще ИСЧЕЗ из списка адаптеров возвращаемых этой функцией. Доп вопросы: Можно ли каким-от образом отделить физические адаптеры от виртуальных? Есть ли какие-то ещё способы надёжной идентификации компьютера (персоналок и лаптопов)? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |