Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как сгенерировать уникальный идентификатор хоста?

Автор вопроса: AurelienОтветов: 3

У меня есть несколько приложений, которые работают вместе и должны общаться.

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

Хост может быть Linux (CenOS, Debian, Ubuntu) или Windows (7/10).

Теперь мне нужно определить, на каком хосте запущено приложение.

Требования таковы: - каждое приложение, работающее на одном хосте, имеет один и тот же "идентификатор хоста" - каждый "идентификатор хоста" уникален среди всех хостов.

Поскольку хостом могут быть физические машины, виртуальные машины или даже экземпляры докеров, я не думаю, что могу использовать имя хоста в качестве "глобального уникального идентификатора".

Поскольку хост может находиться в разных локальных сетях, я не думаю, что могу использовать локальный IP-адрес в качестве "глобального уникального идентификатора".

Итак, какие данные я могу использовать? Может быть, MAC-адрес сетевого адаптера? Гарантируется ли уникальность даже между несколькими экземплярами одного и того же докера?

Спасибо.

  • Идентификаторы контейнеров Docker - это uuid. Похоже, вам нужен способ назначить uuid в качестве имени хоста виртуальной машины и имени хоста аппаратного узла? Sergei Rodionov 16.05.2016
  • Каждый хост с сетевым интерфейсом должен иметь уникальный MAC-адрес. Включите экземпляры докеров. Если по какой-либо причине два хоста докеров, вы можете изменить MAC-адрес с помощью docker run --lxc-conf="lxc.network.hwaddr=92:20:de:b0:6b:61" my_image ifconfig abkrim 16.05.2016
  • @abkrim ... Если два хоста находятся в разных сегментах сети (разделенных двумя маршрутизаторами, а не только одним маршрутизатором или коммутаторами), дублирующиеся MAC-адреса не вызовут проблем для сетевого трафика. Вероятно, этого не произойдет с физическими устройствами, но я вижу, что это происходит в среде с массовой виртуализацией (где каждый хост или центр обработки данных использует копию одной и той же конфигурации для пула внутренних MAC-адресов и частных IP-адресов). david 08.02.2019

linuxdockernetworkinguniqueidentifier

Ответы

Ответ 1 · рейтинг 4 · Christophe Schmitz

В современном / недавнем дистрибутиве Linux linux генерирует для вас уникальный идентификатор в файле /etc/machine-id при первом создании системы. Некоторые распределенные службы, такие как etcd, полагаются на этот файл для идентификации машин в кластере.

Ничто не мешает вам создать и сохранить на диске что-то вроде uuid. Для этого вы можете использовать команду uuidgen в Linux.

Ответ 2 · рейтинг 3 · Say Fay

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

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

Не вдаваясь в подробности, шансы найти коллизию в sha256, мягко говоря, маловероятны.

Вы можете увидеть SHA256 другого текста здесь. http://www.xorbin.com/tools/sha256-hash-calculator

В наши дни почти каждый язык программирования имеет функцию/API для создания хэша SHA256.

Ответ 3 · рейтинг 2 · Shlomi

Похоже, /var/lib/dbus/machine-id содержит то, что вам нужно.

подробнее здесь: http://man7.org/linux/man-pages/man5/machine-id.5.html

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы