Не могу удалить пакет

Краткий ответ

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

  • Идентификатор должен быть каждый раз одним и тем же, если он создается на одном компьютере.
  • Идентификатор должен быть другим, если он сгенерирован на разных компьютерах.
  • Программа должна запускаться от имени пользователя.
  • Программа должна быть совместима с любым дистрибутивом Linux с версией ядра 2.6 или выше.
  • Идентификатор может отличаться, если компьютер модифицирован (например, замена оборудования).
  • Программа не должна полагаться на стороннюю инструменты, которые должны быть установлены на компьютере

Длинный ответ

Здесь я представлю свою попытку с MAC-адресами.

Целью здесь было найти способ получить адреса всех физических сетевых интерфейсов. Как обычный пользователь, я видел, что самый простой способ найти MAC-адреса - это прочитать системные файлы в каталоге «/ sys». Эти файлы доступны начиная с Linux 2.6, так что это прекрасно.

Мои исследования привели меня к следующим сводам правил: https://www.kernel.org/doc/Documentation/sysfs-rules.txt

Использование библиотеки udev, как рекомендовано в этих правилах, невозможно, потому что она должна быть добавлена ​​извне. Итак, я погрузился в источник, который можно найти здесь: http: //cgit.freedesktop.org / systemd / systemd / tree / src / libudev

Из этого я понял, что для получения MAC-адресов вы должны искать "sys / subsystem", если они есть, то найдите в нем каталог "net", и вы найдете каталоги с каждым сетевым интерфейсом. Если папки «subsystem» нет, вам нужно поискать в папках «sys / class», «sys / bus» и «sys / block» каталог «net». На самом деле, я всегда находил их в «классе», но правила говорили, что этого не следует ожидать.

Выше я сказал, что в папке "net" вы найдете сетевые каталоги, это не совсем так. В linux 2.6 (я использовал RHEL 4) это каталоги, и внутри вы найдете, среди прочего, "адресный" файл, содержащий MAC-адрес, символическую ссылку, нацеленную на каталог в "sys / devices". Если в более поздних версиях Linux это будет прямая символическая ссылка на каталог в «/ sys / devices», в котором вы найдете файл «address». (Я пробовал на RHEL 6, Debian 7, Debian 8, Ubuntu 15 и Ubuntu 15 с обновленным ядром до Linux 4.3)

Я никогда не видел каталог «/ sys / subsystem» даже в новой версии Linux (4.3).

Новый макет sysfs (> = linux 3): Чтобы отличить физический интерфейс от виртуального, я хотел посмотреть путь к устройству. Символическая ссылка, которая у меня есть в "/ sys / class / net", ведет к этим каталогам:

  • "/ sys / devices / pci0000: 00/0000: 00: 11.0 / 0000: 02: 01.0 / net / eth0 "
  • " / sys / devices / virtual / net / eth1 "

eth1 был фиктивным виртуальным ником, который я создал после этой темы: Как я могу создать виртуальный интерфейс Ethernet на машина без физического адаптера?

Итак, вы можете видеть, что виртуальный находится в «виртуальной» папке, так что это будет способ отличить их друг от друга.

Старый макет sysfs (linux 2.6 ):

Виртуальный сетевой интерфейс не имеет символической ссылки "устройство" в своих каталогах.

Вы найдете "/ sys / class / net / eth0 / device -> / sys / devices ...." Но если был виртуальный eth1, такой символической ссылки в "/ sys / class / net / eth1" не было.


Итак, в целом, используя "opendir", "readdir", "access ('...', F_OK) "," fopen ".. вы можете получить MAC-адреса только физических интерфейсов.

Затем просто отсортируйте их, чтобы вы были уверены, что они будут в том же порядке, а затем добавьте все в буфере и используйте SHA1 из openssl, сделайте небольшой синтаксический анализ, чтобы он выглядел как UUID, и все готово.

B Но дело в том, что я не хотел полагаться на тот факт, что на пути разработчика к сетевому устройству будет «виртуальная» папка. В правилах, ссылки на которые приведены выше, никогда не говорится, что так будет всегда. Так что на проблему нельзя ответить таким образом.

Надеюсь, что все мои исследования кому-то помогут.

2
10.01.2018, 14:16
0 ответов

Теги

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