Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GetAdaptersInfo после Hibernate/standby 
:(
    Опции темы
Glen
Дата 16.9.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.1.2010

Репутация: нет
Всего: нет



У меня есть клиентский application на VC++ 6.0. Она при связи с неким сервером должна идентифицировать компьютер на котором она установлена. Для идентификации в частности используется MAC-адрес сетевого адаптера. Программист который это делал получал его так:

вызвал GetAdaptersInfo и получил размер буфера необходимый чтобы вернуть список всех адаптеров;
выделил этот буфер;
вызвал GetAdaptersInfo и получил список всех адаптеров в этот буфер;
в качестве MAC-адреса использовал поле Address из САМОЙ ПЕРВОЙ структуры IP_ADAPTER_INFO находящейся в буфере

Однако у одного из клиентов возникли проблемы: похоже наша программа, установленная на некоем компьютере, через какое-то время стала использовать другой MAC-адрес по сравнению с тем, что был на этом же компьютере раньше. Вроде бы - по словам клиента - это произошло ПОСЛЕ того как тот компьютер вошёл в Hibernate или StandBy; а потом вышел из него. Я пока не имею доступа к тому компьютеру, но скорее всего там установлены НЕСКОЛЬКО адаптеров, и почему-то изменился порядок их следования, когда они возвращаются функцией GetAdaptersInfo. Операционка - WinXP. Какие есть версии почему это могло случиться (или другая причина почему это могло случиться):
- связано ли это именно с Hibernate или StandBy; или возможна какая-то ещё причина;
- не восстановится ли старый порядок следования адаптеров после перезагрузки компьютера?
- не является ли вышеописанный метод опредления MAC-адреса (в целях идентификации компьютера) компьютера в принципе порочным; и чем?

PM MAIL   Вверх
borisbn
Дата 16.9.2010, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- связано ли это именно с Hibernate или StandBy; или возможна какая-то ещё причина;

перечисление адаптеров в windows - вещь не предсказуемая. причём после установки какого-нибудь service pack'а всё может пойти по другому

Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- не восстановится ли старый порядок следования адаптеров после перезагрузки компьютера?

если восстановится, то, скорее всего, это будет случайностью. Установишь новые драйвера на видео, например, и всё. кердык.

Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- не является ли вышеописанный метод опредления MAC-адреса (в целях идентификации компьютера) компьютера в принципе порочным; и чем?

эту защиту несложно обойти:
1. перепрошить MAC-адрес на нужный ( чревато, конечно, но делается из интерфейса настроек драйвера )
2. перехватить GetAdaptersInfo и возвращать то, что нужно.

Если у твоих клиентов не хватит на это духа/ума/желания/средств ( нужное подчеркнуть ), то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Glen
Дата 16.9.2010, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.1.2010

Репутация: нет
Всего: нет



Цитата(borisbn @ 16.9.2010,  15:20)
Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- связано ли это именно с Hibernate или StandBy; или возможна какая-то ещё причина;

перечисление адаптеров в windows - вещь не предсказуемая. причём после установки какого-нибудь service pack'а всё может пойти по другому

Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- не восстановится ли старый порядок следования адаптеров после перезагрузки компьютера?

если восстановится, то, скорее всего, это будет случайностью. Установишь новые драйвера на видео, например, и всё. кердык.

Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- не является ли вышеописанный метод опредления MAC-адреса (в целях идентификации компьютера) компьютера в принципе порочным; и чем?

эту защиту несложно обойти:
1. перепрошить MAC-адрес на нужный ( чревато, конечно, но делается из интерфейса настроек драйвера )
2. перехватить GetAdaptersInfo и возвращать то, что нужно.

Если у твоих клиентов не хватит на это духа/ума/желания/средств ( нужное подчеркнуть ), то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный

>эту защиту несложно обойти:

Нет, мой клиент этим заниматься не будет. Я имел в виду случаи подобные тому что я встретил - когда порядок следования адаптеров вдруг меняется. Пока это первый заказчик который встретился с проблемой - тысячи инсталляций моей программы работали без неё несколько лет.

Добавлено через 1 минуту и 19 секунд
Цитата(Glen @ 16.9.2010,  16:19)
Цитата(borisbn @ 16.9.2010,  15:20)
Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- связано ли это именно с Hibernate или StandBy; или возможна какая-то ещё причина;

перечисление адаптеров в windows - вещь не предсказуемая. причём после установки какого-нибудь service pack'а всё может пойти по другому

Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- не восстановится ли старый порядок следования адаптеров после перезагрузки компьютера?

если восстановится, то, скорее всего, это будет случайностью. Установишь новые драйвера на видео, например, и всё. кердык.

Цитата(Glen @  16.9.2010,  14:57 Найти цитируемый пост)
- не является ли вышеописанный метод опредления MAC-адреса (в целях идентификации компьютера) компьютера в принципе порочным; и чем?

эту защиту несложно обойти:
1. перепрошить MAC-адрес на нужный ( чревато, конечно, но делается из интерфейса настроек драйвера )
2. перехватить GetAdaptersInfo и возвращать то, что нужно.

Если у твоих клиентов не хватит на это духа/ума/желания/средств ( нужное подчеркнуть ), то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный

>эту защиту несложно обойти:

Нет, мой клиент этим заниматься не будет. Я имел в виду случаи подобные тому что я встретил - когда порядок следования адаптеров вдруг меняется. Пока это первый заказчик который встретился с проблемой - тысячи инсталляций моей программы работали без неё несколько лет.

>установишь новые драйвера на видео, например, и всё. кердык.

То есть драйверы ВИДЕО могут повлиять на перечисление порядка СЕТЕВЫХ АДАПТЕРОВ?

PM MAIL   Вверх
borisbn
Дата 16.9.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Цитата(Glen @  16.9.2010,  16:19 Найти цитируемый пост)
тысячи инсталляций моей программы работали без неё несколько лет.

возможно там был всего один адаптер ?
так а чем тебе не нравится предложение
Цитата(Glen @  16.9.2010,  16:19 Найти цитируемый пост)
то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный
 ?



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Glen
Дата 12.11.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 15.1.2010

Репутация: нет
Всего: нет



Цитата(borisbn @ 16.9.2010,  16:21)
Цитата(Glen @  16.9.2010,  16:19 Найти цитируемый пост)
тысячи инсталляций моей программы работали без неё несколько лет.

возможно там был всего один адаптер ?
так а чем тебе не нравится предложение
Цитата(Glen @  16.9.2010,  16:19 Найти цитируемый пост)
то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный
 ?

'то можно брать адрес не жёстко первого адаптера, а всех и искать в них нужный' - имеется в виду по принципу 'если в списках адаптеров совпадает хотя бы один элемент (вне зависимости от их порядка в списке), то этот - тот же комп'? Да, думаю придётся так и делать. Ибо за прошедшее время я выснил что использованный мной способ имеет принципиальные недостатки:
- на компьютере могут создаваться разным софтом 'виртуальные адаптеры', попадающие в список ПЕРЕД физическими. И - ещё хуже - MAC такого виртуального адаптера может периодичски меняться, это нормальное явление. Я видел это на софте называемом Juniper Network Connect Virtual Adapter
- даже без 'виртуальных' адаптеров может быть такое: есть один Ethernet обычный и один - WiFi. Этот WiFi стоит первым с списке - пока включён. А потом его запретили (когда принесли лаптоп в офис и включили в проводную сеть), и он вообще ИСЧЕЗ из списка адаптеров возвращаемых этой функцией.

Доп вопросы:
Можно ли каким-от образом отделить физические адаптеры от виртуальных?
Есть ли какие-то ещё способы надёжной идентификации компьютера (персоналок и лаптопов)?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0708 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.