1 / 1 / 0
Регистрация: 15.01.2010
Сообщений: 109
1

GetAdaptersInfo после Hibernate/standby

16.09.2010, 15:54. Показов 1695. Ответов 2
Метки нет (Все метки)

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

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

Однако у одного из клиентов возникли проблемы: похоже наша программа, установленная на некоем компьютере, через какое-то время стала использовать другой MAC-адрес по сравнению с тем, что был на этом же компьютере раньше. Вроде бы - по словам клиента - это произошло ПОСЛЕ того как тот компьютер вошёл в Hibernate или StandBy; а потом вышел из него. Я пока не имею доступа к тому компьютеру, но скорее всего там установлены НЕСКОЛЬКО адаптеров, и почему-то изменился порядок их следования, когда они возвращаются функцией GetAdaptersInfo. Операционка - WinXP. Какие есть версии почему это могло случиться (или другая причина почему это могло случиться):
- связано ли это именно с Hibernate или StandBy; или возможна какая-то ещё причина;
- не восстановится ли старый порядок следования адаптеров после перезагрузки компьютера?
- не является ли вышеописанный метод опредления MAC-адреса (в целях идентификации компьютера) компьютера в принципе порочным; и чем?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2010, 15:54
Ответы с готовыми решениями:

Проблема с GetAdaptersInfo на Vista
Получаю информацию об установленных на компьютере адаптерах при помощи GetAdaptersInfo. В XP все...

Проверка наличия соединения GetAdaptersInfo
Как-то Вы интересовались, как определить соединение с интернет... К сожалению, тот топик я не...

Hibernate: Обновление коллекций после вставки родительского объекта
Имеется замапленный объект содержащий коллекцию замапленных объектов. т.е отношение one-to-many. ...

Hibernate Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
Доброго времени суток. Сталкиваюсь со всякими ошибками при добавлении данных в свою mysql бд. Вот...

2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12453 / 7478 / 1752
Регистрация: 25.07.2009
Сообщений: 13,748
17.09.2010, 10:18 2
Цитата Сообщение от KellyLynch Посмотреть сообщение
в качестве MAC-адреса использовал поле Address из САМОЙ ПЕРВОЙ структуры IP_ADAPTER_INFO находящейся в буфере
Поле самой первой - это не правильно. Нужно перебирать адаптеры отыскивая тот, ip которого совпадает с клиентским адресом соединения с сервером. И возвращать его MAC адрес. А порядок следования адаптеров, да и всего остального в винде только странному богу мелкомягких разработчиков известен, и полагаться на него - затея стрёмная...
0
1 / 1 / 0
Регистрация: 15.01.2010
Сообщений: 109
12.11.2010, 11:52  [ТС] 3
За прошедшее время я выснил что использованный мной способ имеет принципиальные недостатки:
- на компьютере могут создаваться разным софтом 'виртуальные адаптеры', попадающие в список ПЕРЕД физическими. И - ещё хуже - MAC такого виртуального адаптера может периодичски меняться, это нормальное явление. Я видел это на софте называемом Juniper Network Connect Virtual Adapter
- даже без 'виртуальных' адаптеров может быть такое: есть один Ethernet обычный и один - WiFi. Этот WiFi стоит первым с списке - пока включён. А потом его запретили (когда принесли лаптоп в офис и включили в проводную сеть), и он вообще ИСЧЕЗ из списка адаптеров возвращаемых этой функцией.

Возможно мне придётся (делая допущение что всё-таки присутствует один обычный Ethernet адаптер) использовать в качестве ключа ВЕСЬ список найденных адаптеров (включая виртуальные - эта функция их не отличает); и при сравнении использовать логику 'если в списках совпадает хотя бы один элемент (вне зависимости от их порядка в списке), то этот - тот же комп'

Можно ли каким-от образом отделить физические адаптеры от виртуальных?
Есть ли какие-то ещё способы надёжной идентификации компьютера (персоналок и лаптопов)?
0
12.11.2010, 11:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2010, 11:52
Помогаю со студенческими работами здесь

Использование hibernate.hbm2ddl.auto совместно с MySql8 и Hibernate
Это справедливо для H2, которая может быть настроена для распаковки в оперативную память ? Или...

Hibernate org.hibernate.HibernateException: Wrong column type
В модели было поле weight с типом double. Поменял на Integer и соответственно поменял в БД...

HELP! F0 StandBy
добрый день! Помогите, пожалуйста, разобраться. в процессе увода контроллера в режим StomdBy...

Active/Standby Failover
Товарищи помогите разобраться!Думаю кто уже сталкивался... Есть ASA1 и ASA2. Хотел бы настроить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru