Linux:获取"user-friendly"网络接口名称

Linux: Get "user-friendly" network interface name

我正在编写一个程序,用户应该 select 在 Linux 下的某些网络接口,如下所示:

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

到目前为止我没有问题。

但是,我希望用户看到更多 "descriptive" 名称,如下所示:

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

问题:

我知道 Gnome 桌面在网络状态下拉菜单中列出了像 "PCI Ethernet" 这样的网络接口名称。所以必须有一些方法来获取某个网络接口的 "descriptive" 名称。

这些是 systemd 使用的本机命名策略。使用旧的命名方式(eth0、wlan0、...),接口名称是不可预测的(例如,您的第一张 eth 卡可能使用 eth0 以外的名称),这导致了各种问题。新的命名标准根据以下之一为接口分配名称:

  1. 包含 Firmware/BIOS 的名称提供了机载设备的索引号(例如:eno1)
  2. 包含 Firmware/BIOS 的名称提供了 PCI Express 热插拔插槽索引号(例如:ens1)
  3. 包含 physical/geographical 硬件连接器位置的名称(例如:enp2s0)
  4. 包含接口的 MAC 地址的名称(示例:enx78e7d1ea46da)
  5. 经典的、不可预测的内核原生 ethX 命名(例如:eth0)

systemd 将从 1 开始,回落到 2,3,...

Source

编辑:

我补充一下,如果你看了我发的link,你可以使用你自己的名字!

You create your own manual naming scheme, for example by naming your interfaces "internet0", "dmz0" or "lan0". For that create your own .link files in /etc/systemd/network/, that choose an explicit name or a better naming scheme for one, some, or all of your interfaces. See systemd.link(5) for more information.

Does Linux know "friendly" names for network interfaces at all?

没有

If no: Is there a way to guess the user-friendly name from the interface name with a quite high reliability?

您或许可以做出您所建议的概括。如果您使用的是基于 systemd 的系统,请查看 systemd net naming scheme,它显示了用于不同接口类型的前缀:

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

Maybe in combination with the code from /sys/class/net/.../type?

我不确定 type 信息是否有用。例如,以太网和无线接口都显示 type of 1。另一方面,你可以积极地识别ppp接口,例如,使用这个值。

type 的可能值在 if_arp.h 中可用。