1 / 1 / 0
Регистрация: 15.01.2010
Сообщений: 109
|
|
1 | |
GetAdaptersInfo после Hibernate/standby16.09.2010, 15:54. Показов 1695. Ответов 2
Метки нет (Все метки)
У меня есть клиентский application на VC++ 6.0. Она при связи с неким сервером должна идентифицировать компьютер на котором она установлена. Для идентификации в частности используется MAC-адрес сетевого адаптера. Программист который это делал получал его так:
вызвал GetAdaptersInfo и получил размер буфера необходимый чтобы вернуть список всех адаптеров; выделил этот буфер; вызвал GetAdaptersInfo и получил список всех адаптеров в этот буфер; в качестве MAC-адреса использовал поле Address из САМОЙ ПЕРВОЙ структуры IP_ADAPTER_INFO находящейся в буфере Однако у одного из клиентов возникли проблемы: похоже наша программа, установленная на некоем компьютере, через какое-то время стала использовать другой MAC-адрес по сравнению с тем, что был на этом же компьютере раньше. Вроде бы - по словам клиента - это произошло ПОСЛЕ того как тот компьютер вошёл в Hibernate или StandBy; а потом вышел из него. Я пока не имею доступа к тому компьютеру, но скорее всего там установлены НЕСКОЛЬКО адаптеров, и почему-то изменился порядок их следования, когда они возвращаются функцией GetAdaptersInfo. Операционка - WinXP. Какие есть версии почему это могло случиться (или другая причина почему это могло случиться): - связано ли это именно с Hibernate или StandBy; или возможна какая-то ещё причина; - не восстановится ли старый порядок следования адаптеров после перезагрузки компьютера? - не является ли вышеописанный метод опредления MAC-адреса (в целях идентификации компьютера) компьютера в принципе порочным; и чем?
0
|
16.09.2010, 15:54 | |
Ответы с готовыми решениями:
2
Проблема с GetAdaptersInfo на Vista Проверка наличия соединения GetAdaptersInfo Hibernate: Обновление коллекций после вставки родительского объекта Hibernate Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister |
Модератор
12453 / 7478 / 1752
Регистрация: 25.07.2009
Сообщений: 13,748
|
|
17.09.2010, 10:18 | 2 |
Поле самой первой - это не правильно. Нужно перебирать адаптеры отыскивая тот, 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 | |
12.11.2010, 11:52 | |
Помогаю со студенческими работами здесь
3
Использование hibernate.hbm2ddl.auto совместно с MySql8 и Hibernate Hibernate org.hibernate.HibernateException: Wrong column type HELP! F0 StandBy Active/Standby Failover Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |