Linux: Получить «дружественное» имя сетевого интерфейса - PullRequest
0 голосов
/ 08 января 2020

Я пишу программу, в которой пользователь должен выбрать сетевой интерфейс в Linux, как показано здесь:

Please select a network card:
1)  enp2s0
2)  wlan3
3)  ppp2

До этого момента у меня не было проблем.

Однако Я бы хотел, чтобы пользователи видели больше «описательных» имен, как показано здесь:

Please select a network card:
1)  PCI Ethernet (enp2s0)
2)  Wireless LAN (wlan3)
3)  Dial-up connection (ppp2)

Вопросы:

  • Знает ли Linux такие описательные имена для сетевых интерфейсов на все?
  • Если да: как я могу получить эти имена?
  • Если нет: есть ли способ угадать удобное для пользователя имя из имени интерфейса с достаточно высокой надежностью?
    Пример: "ppp *" => "Коммутируемое соединение"; "wl *" => "Беспроводная сеть"
    Возможно в сочетании с кодом из /sys/class/net/.../type?
  • Если да: Где я могу найти список возможных имен интерфейсов?

Я знаю, что рабочий стол Gnome отображает имена сетевых интерфейсов, например, "PCI Ethe rnet", в раскрывающемся меню состояния сети. Поэтому должен быть какой-то метод для получения «описательного» имени какого-либо сетевого интерфейса.

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Знает ли Linux "дружественные" имена для сетевых интерфейсов?

Нет.

Если нет: есть ли способ угадать удобное для пользователя имя из интерфейса с достаточно высокой надежностью?

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

+--------+------------------------------------+
| Prefix |            Description             |
+--------+------------------------------------+
| en     | Ethernet                           |
| ib     | InfiniBand                         |
| sl     | serial line IP (slip)              |
| wl     | Wireless local area network (WLAN) |
| ww     | Wireless wide area network (WWAN   |
+--------+------------------------------------+

Возможно в сочетании с кодом из /sys/class/net/.../type?

Я не уверен, что информация type будет полезна. Например, как rnet, так и беспроводные интерфейсы показывают type из 1. С другой стороны, вы можете точно определить интерфейсы ppp, например, используя это значение.

Возможные значения для type доступны в if_arp.h.

0 голосов
/ 08 января 2020

это собственные политики именования, которые использует systemd. со старым именем (eth0, wlan0, ...) имя интерфейса было непредсказуемым (например, ваша первая карта eth могла получить имя, отличное от eth0), и это вызывало всевозможные проблемы. Новый стандарт именования назначает имя интерфейсу в соответствии с одним из следующих значений:

  1. Имена, включающие встроенное ПО / B IOS, предоставляют индексные номера для бортовых устройств (пример: eno1)
  2. Имена, включающие в себя Firmware / B IOS, с указанием номеров разъемов PCI Express hotplug (пример: ens1)
  3. Имена, включающие физическое / географическое расположение разъема аппаратного обеспечения (пример: enp2s0)
  4. Имена, содержащие адрес интерфейса MA C (пример: enx78e7d1ea46da)
  5. Classi c, непредсказуемое именование ядра ethX для ядра (пример: eth0)

systemd запустится на 1, возвращаясь к 2,3, ...

Источник

РЕДАКТИРОВАТЬ:

Я должен добавить, если вы прочитаете ссылку, которая Я написал, вы можете использовать свои собственные имена!

Вы создаете собственную схему именования вручную, например, называя свои интерфейсы "internet0", "dmz0" или "lan0". Для этого создайте свои собственные .link файлы в / etc / systemd / network /, которые выбирают явное имя или лучшую схему именования для одного, нескольких или всех ваших интерфейсов. См. Systemd.link (5) для получения дополнительной информации.

...