Получение уникального идентификатора от подобной Unix системы

22
задан jww 28 May 2018 в 11:23
поделиться

12 ответов

Как насчет UUID корневой файловой системы? Можно получить корневое устройство файловой системы от /etc/fstab, или путем ручного парсинга файла или при помощи getfsent (3) или getfsfile (3). Как только у Вас есть устройство, можно получить UUID или проверкой ссылок в /dev/disk/by-uuid или от эти blkid команда.

28
ответ дан Jason Day 29 November 2019 в 03:51
поделиться

Можно использовать lockfile в местах как:

  • /var/run/yourapp.pid (если прогон программы корнем)
  • $HOME/.yourapp.pid (если выполнено пользователем и локальной файловой системой)
  • $HOME/.yourapp.$ (имя узла-f) .pid (размещают на nfs)

, Когда Ваша программа запущена, она должна сделать что-то как:

lock = open(filename, O_CREAT | O_EXCL);
dprintf(lock, "%u", getpid());

, Если открытые сбои, проверьте, работает ли процесс все еще и если нет: удалите файл и попробуйте еще раз.

-2
ответ дан 29 November 2019 в 03:51
поделиться

Вы упомянули в Windows использование некоторого GUID... У Вас есть некоторые детали о том, как это создается?

, Кроме которого, Вы могли попробовать что-то как идентификатор ЦП или идентификатор жесткого диска... Я предполагаю, что те не могут быть изменены (но Вы столкнетесь с проблемой, если неисправный жесткий диск будет заменен).

0
ответ дан oliver 29 November 2019 в 03:51
поделиться

Большинство подобных Unix машин имеет генератор случайных чисел, доступный до /dev/random. Вам будет нужно что-то как MAC-адрес и время для предоставления подлинной уникальности генератору GUID (это - то, что генератор GUID в Windows делает). Вдобавок к этому, получая что-то от/dev/random получит Вас довольно хорошая конструкция типа GUID. На практике библиотеки UUID делают этот вид вещи негласно.

, Если Вам просто нужно одно число на машину, чем MAC-адрес, вероятно, будет достаточно. Они администрируемы центральным телом, и можно обоснованно предположить, что никакие два MAC-адреса не будут тем же. Однако, при попытке использовать это для связи установки программного обеспечения на MAC-адресе знать, что некоторые компоненты имеют программируемые MAC-адреса или программируемые компоненты MAC-адреса. Подобные Unix Операционные системы, особенно с открытым исходным кодом имеют тенденцию не соединить порядковые номера проводами. Этот подход может также вызвать проблемы с выполнением нескольких экземпляров программного обеспечения в VM's.

Одна опция могла бы быть аппаратным ключом USB , , который может быть получен из нескольких производителей. Другая опция могла бы быть сервером лицензий, где уникальный код предоставляется серверу. Снова, несколько консервированных решений для этого доступны из других источников.

0
ответ дан ConcernedOfTunbridgeWells 29 November 2019 в 03:51
поделиться

Кажется, что Вы ищете UUID. Это - общий универсально уникальный идентификатор (действительно, то же самое как GUID)

существует много реализаций C++ этого в различном, освобождает, или Вы могли использовать команду uuidgen и получить вывод.

0
ответ дан csexton 29 November 2019 в 03:51
поделиться

Нет никакого общего и надежного способа получить то, что Вы хотите.

3
ответ дан 29 November 2019 в 03:51
поделиться

Вы не упоминаете, насколько стабильный уникальный идентификатор должен быть - Вы всегда хотите, чтобы тот же хост произвел тот же идентификатор каждый раз, когда Ваш код выполняется?

, Если не, то предложение fuzzymonk uuidgen - то, что Вы хотите.

, Если да, то необходимо решить то, что составляет "то же" до хоста что касается. Один путь состоял бы в том, как Вы предполагаете, сумма MD5 MAC первого интерфейса Ethernet и "чего-то". Для "чего-то" в этом случае я рассмотрел бы FQDN, если Ваше понятие "того же хоста" не включает изменение FQDN...

1
ответ дан genehack 29 November 2019 в 03:51
поделиться

Я не думаю, что это возможно. Самое близкое, которое можно получить, должно создать очень длинную случайную строку (как MS, делают с GUID), и сохраните его где-нибудь в системе.

3
ответ дан Yoni Roit 29 November 2019 в 03:51
поделиться

Другая опция состоит в том, чтобы использовать информацию, полученную от dmidecode, подарок команды на Linux. Эта информация декодируется от/dev/mem, поэтому требуя корневого доступа.

информация dmidecode чтения, как известно, испорчена, поскольку некоторые производители материнских плат лежат или фальсифицируют некоторые поля.

5
ответ дан Phillip Whelan 29 November 2019 в 03:51
поделиться

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

FLEXlm также использует идентификатор хоста для своих лицензий на один компьютер. Наиболее распространенный идентификатор хоста, который это использует, является MAC-адресом Ethernet для одного из Ваших сетевых интерфейсов, разбитых вместе без любого разделителя.

Это может также использовать (в Windows) серийный номер тома C: диск (снова разбитый вместе без любых разделителей), и на Солярисе вывод hostid команда (IIRC, на компьютерах Sun, это число на самом деле уникально, и расположенное на маленьком съемном EEPROM на системной плате).

, В то время как MAC-адрес чрезвычайно легко фальсифицировать, это - почти универсальный identifer в наше время (почти все новые компьютеры имеют по крайней мере один порт Ethernet, и им очень свойственно быть на борту), и на самом деле намеревался быть глобально уникальным (на самом деле, протоколы Ethernet зависят от этой уникальности). Основные проблемы Вы имели бы с этим подходом:

  • Некоторые компьютеры имеют несколько Ethernet-адресов; некоторые из них находятся на системной плате, некоторые находятся на отдельных съемных картах.
  • Их чрезвычайно легко фальсифицировать (и некоторые протоколы зависят от способности изменить их).
  • Некоторая виртуализированная среда генерирует случайные Ethernet-адреса на каждой начальной загрузке (но у них обычно есть способ вызвать фиксированное значение).
9
ответ дан CesarB 29 November 2019 в 03:51
поделиться

И Солярис и Linux обеспечивают hostid (1) утилита

11
ответ дан Martin v. Löwis 29 November 2019 в 03:51
поделиться

Необходимо полагать, что много установок, возможно, создало изображение файловой системы и клонировалось ко многим машинам, вместо того, чтобы настроить их индивидуально. В других случаях машина могла много раз получать переустановку. Другими словами, чему-либо обеспеченная ОС нельзя доверять.

Однако ЦП действительно сохраняет уникальный порядковый номер, но доступ к нему должен отличаться в различных системах.

1
ответ дан ironfroggy 29 November 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: