Uuid материнской платы как узнать

Обновлено: 06.07.2024

Я хотел бы получить идентификатор, уникальный для компьютера с Java, на Windows, MacOS и, если возможно, Linux. Это может быть UUID диска, материнская плата S / N.

Runtime.getRuntime().exec может использоваться (это не апплет).

обычно используется MAC-адрес, связанный с сетевой картой.

адрес доступен в Java 6 через следующий API:

Я не использовал его в Java, но для других приложений сетевой идентификации это было полезно.

проблема с MAC-адресом заключается в том, что к компьютеру может быть подключено множество сетевых адаптеров. Большинство новейших имеют по умолчанию два (wi-fi + кабель). В такой ситуации нужно было бы знать, какой MAC-адрес адаптера следует использовать. Я тестировал решение MAC в своей системе, но у меня есть 4 адаптера (кабель, WiFi, адаптер для виртуальной коробки и один для Bluetooth), и я не смог решить, какой MAC я должен взять. Если кто-то решит использовать адаптер, который в настоящее время используется затем появляется новая проблема, так как кто-то может взять свой ноутбук и переключиться с кабельного адаптера на wi-fi. При таком условии MAC хранится, когда ноутбук был подключен через кабель теперь будет недействительным.

например, это адаптеры, которые я нашел в своей системе:

код, который я использовал для их перечисления:

из вариантов слушайте на этой странице, наиболее приемлемым для меня, и тот, который я использовал в своем решении, - это @Ozhan ДУЗ, другой, похож на ответ @finnw, где он использовал Джейкоба, и стоит упомянуть com4j - образец, который использует WMI доступен здесь:

это напечатает некоторую информацию о компьютере вместе с серийным номером компьютера. Обратите внимание, что все классы, требуемые этим примером, должны быть сгенерированы Maven-com4j-plugin. Пример конфигурации для Maven-com4j-plugin:

конфигурация выше скажет плагин для создания классов в каталоге target/generated-sources / com4j в папке проекта.

для тех, кто хотел бы видеть готовые решение, я включаю ссылки на три класса, которые я написал, чтобы получить машину SN на Windows, Linux и Mac OS:

Возвращаем Lenovo UUID и серийники

сф

Принесли мне старичка Lenovo Thinkpad T400 подготовить перед продажей. К слову, мне всегда нравились старые ThinkPadы, от них веет каким-то величием и надежностью. Может это выветривающийся дух IBM, а может самовнушение, ну да черт с ним. После осмотра и чистки ноута я заметил отсутствие UUID (Universally Unique Identifier) – универсального идентификатора, используется для привязки софта и т.д.. Данная проблема довольно старая, темы на форумах начинаются где-то с 2006, но она актуальна и на новых девайсах.

На фото ниже можно увидеть что значение UUID забито нулями.

Возможные варианты слета или отсутствия серийных номеров и других идентификаторов:

*Замена материнской платы. Платы обычно идут с доноров ( со своими идентификаторами) или чистые, в последнем варианте информация меняется на данные прошлой материнки.

*Перезапись/ Замена Bios. Может происходить при обновлении биоса, замены прошивки с донора в которой данная область затерта и схожих действиях.

* Рандомные глюки софта/железа.

По идее, без серийников можно жить и параноики этому будут даже рады (хотя на леново можно и поинтересней чего зашить, тот же Libreboot, но об этом как-то в другой статье), но все зависит от железа. В некоторых случаях ничего не происходит, в других же возможны проблемы с привязкой софта, рандомными перезагрузками и т.д.
У этого экземпляра слет случился после обновления биоса с довольно старой версии.

Способ восстановления подходит при отсутствии UUID, серийника материнской платы и ноута или при их значении invalid.
Вы делаете все на свой страх и риск, я вас предупредил.


После загрузится красивое лого Thinkpad с варнингом о том, что воровать плохо и появится основное меню:

Нам интересны первый и четвертый пункт.Остальные не очень интересны, но это:
2)Проверка звука
3) Форматирование диска
5)Удаление рекавери раздела
6)Записи при обслуживании.

456

Выбрав первый вариант Set system identification, мы можем:

1)Добавить серийные номера ноутбука, материнки.

2)Отобразить существующие.Что и сделано на фото.

3)Удалить записанные в памяти.

Серийный номер старой материнки можно найти на коробке или в бумагах к железу. Но можете придумать свои или поискать рандомные в интернете (ebay , барахолки, поиск по фото)

6

Вернувшись обратно в меню и выбрав 4 пункт Assign UUID ,мы можем увидеть UUID. Либо при отсутствии такового, как в нашем случае, будет сгенерирован новый и посчитана контрольная сумма.

Вот собственно и все.

done

После перезагрузки и захода в биос все отображается так как должно.

Немного любви с чисткой и ноут прослужит новому владельцу еще пяток лет. Это ведь ThinkPad.

Решил я делать свой пет-проект по учету прочитанных книг на PWA. Покорять новые технологии и все такое. Расчет был на то, что с его выложу и установлю на телефон и вот у меня есть мобильное приложение, которое можно использовать оффлайн. Хочу я сгенерировать UUID, чтобы сохранить книгу, а не нахожу API. Предлагаю разобраться почему.

Что такое UUID

UUID — стандарт идентификации данных используемый, преимущественно, для распределенных систем. Его задача позволить генерировать ключи, которые не вызовут конфликтов при сохранении в то, или иное хранилище данных.

UUID представляет собой 16-байтное число в HEX'е формате:

Здесь я не буду вдаваться в подробности, что из этого что означает. С этим вы подробно можете ознакомиться в википедии.

Способы генерации UUID


1 и 2 версии использовали время с точностью до 0.1 микросекунды + MAC адрес, что гарантировало практически полное отсутствие возможности получить дубликат. Чтобы полностью добить эту вероятность первая версия добавляет рандомную соль, а вторая ничего не делает (вторую версию мы не любим, она вообще может сгенерировать только 64 уникальных id за семь минут).

3 и 5 хешируют пространство имен (Url, FQDN, OID) + само имя. Таким образом в каждый момент времени мы получаем абсолютно идентичные UUID для одних и тех же входных параметров.

Отличие 3 и 5 версии только в том, что 3 использует для хеширования MD-5, а 5 — SHA-1.

4 же версия просто использует рандом ¯_(ツ)_/¯.

Почему его нет в браузере

JS не имеет доступа к данным машины

Мы не можем получить MAC-адрес пользователя, мы не можем получить данные его IP, а так же вообще что-либо с его машины без разрешения пользователя.
Да, мы можем загружать файлы и делать красивые file-инпуты на фронте, но мы можем получить только конкретный файл, который нам предоставит пользователь. Но согласитесь, как бы не шибко удобно запрашивать на каждый UUID по файлу. Неудобно их запрашивать даже каждый раз при входе на сайт.
Сделано же это из благих целей: представьте, что читаете вы Хабр, а тут:


И больше никаких проблем с высшим образованием.

Потому что до недавних пор он был просто не нужен

Браузер для того, чтобы сидеть в интернете.
Через браузер мы заходим на сайт. Если мы зашли на сайт — нам отдали страничку. А раз нам ее отдали — значит мы связаны с сетевым узлом который может сгенерировать UUID и сами мы можем этого не делать. По факту, нам как фронту вообще на ID информации все равно, мы отдали, а дальше это уже проблема принимающей стороны.

Вы можете возразить, что есть PWA, и что оно есть аж с 2007 года. Но так уж вышло, что PWA никому не нужен, примерно, с того же самого времени. (Хотя нынче Play Market позволяет загружать PWA как приложения, но. ). Сами посудите, много вы PWA приложений установили? Я даже Хабр не поставил.

Другой вопрос — почему до сих тор нет никакого API типа getUUID() , чтобы переложить эту проблему на браузер? Скорее всего ответ кроется все в той же ссылке на то, что в 99 случаев из 100 сайту это просто-напросто незачем.

Но осадочек остался.

Какие трудности вас ждут

Точность времени

Я бы не стал называть это большой проблемой.

Мы можем получить время с точностью только до миллисекунды, в то время как первая версия UUID делала это с точностью до 100 наносекунд.

Ну чисто теоретически мы можем получить и с точностью до 1 микросекунды, но это будет время от открытия вкладки (это если мы сейчас про performance.now() ), что уже не так заманчиво.

Идентификация браузера

Браузеры вообще не уникальны и сейчас я вам это докажу.

Для идентификации клиента HTML Living Standard нам предлагает использовать The Navigator object.

А теперь внимание сравним то, что нам предлагают сравнивать

Браузер appCodeName appName platform ​product productSub vendor vendorSub
Chrome Mozilla Netscape Win32 Gecko 20030107 Google Inc. -
Mozilla 75 Mozilla Netscape Win32 Gecko 20100101 - -
Mozilla 45 Mozilla Netscape Win32 Gecko 20100101 - -
Internet Explorer Mozilla Netscape Win32 Gecko - - -
Microsoft Edge Mozilla Netscape Win32 Gecko 20030107 Google Inc. -

Как вам такое? Почувствовали все разнообразие клиентов? Вот и я нет.

Но надо признать, что местами отличаются userAgent и appVersion :

Тут Edge впереди планеты всей, так как он отображает IP, и мы можем использовать его. Но это только в Edge. А так, как видите, многого с навигатором не навоюешь.

Как это реализовал я


Для себя я решил отталкиваться от своих нужд и особенностей архитектуры своего приложения.

  1. Книги очень сложно добавлять несколько раз в миллисекунду. Даже просто тыкать на кнопочку сложно.
  2. Книги может добавлять только авторизованный пользователь.

Последние 6 байт я беру из SHA-1 хеша логина — можно идентифицировать 281,474,976,710,656 уникальных пользователей (если взять расчет на то, что не будет коллизий). Тоже с запасом (у меня их всего 30).

1 байт у нас отводится на версию (M) и вариант (N).

Оставшиеся 3 байта я солю рандомом.

Если вдруг мое приложение станет супер-пупер популярным и 100,000 и они будут за минуту каждый делать по 100 книг, то за миллисекунду будет генерироваться:

$$
100,000 * 100 / 60,000 = 166
$$

Вероятность того, что совпадут два:

Это очень мало и этого мне хватает

Реализацию можно посмотреть тут.

Предвещая вопрос "А почему же не рандом?"

Да, есть такой легендарный код

В моем случае на бэкенде UUID используется как первичный ключ.

Когда первые байты ключа идут по порядку больше вероятность, что новая запись встанет в конец таблицы. Даже если на клиенте будет запущена синхронизация. Ведь вряд ли юзер выполнит синхронизацию данных внесенных полгода назад и СУБД будет сдвигать половину таблицы.

В случае же с рандомом — данные будут вставляться в табличку куда ни попадя.

Читайте также: