【问题标题】:Linux: Get "user-friendly" network interface nameLinux:获取“用户友好”的网络接口名称
【发布时间】:2020-04-25 21:39:11
【问题描述】:

我正在编写一个程序,用户应在 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 以太网”。所以必须有某种方法来获取某个网络接口的“描述性”名称。

【问题讨论】:

    标签: linux networking network-interface


    【解决方案1】:

    Linux 是否知道网络接口的“友好”名称?

    没有。

    如果不是:有没有办法从界面名称中猜出用户友好的名称,并且可靠性相当高?

    您可能可以做出您所建议的概括。如果您使用的是基于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   |
    +--------+------------------------------------+
    

    也许与 /sys/class/net/.../type 中的代码结合使用?

    我不确定type 信息是否会有所帮助。例如,以太网和无线接口都显示type of 1。另一方面,您可以肯定地识别 ppp 接口,例如,使用此值。

    type 的可能值可在if_arp.h 中找到。

    【讨论】:

      【解决方案2】:

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

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

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

      Source

      编辑:

      我应该补充一下,如果您阅读了我发布的链接,您可以使用自己的名字!

      您可以创建自己的手动命名方案,例如将接口命名为“internet0”、“dmz0”或“lan0”。为此,在 /etc/systemd/network/ 中创建您自己的 .link 文件,为您的一个、部分或所有接口选择一个明确的名称或更好的命名方案。有关详细信息,请参阅 systemd.link(5)。

      【讨论】:

      • 这对我一点帮助都没有。我知道接口的“系统”名称(例如“enp2s0”)并想知道描述(例如“无线网络”)。
      • @MartinRosenau ,这从前缀中很明显。 en==以太网,wl==Wlan,...
      • 如果没有其他解决方案,这就是我真正想做的事情。不幸的是,我已经找到了 17 个不同的前缀(wl、ww、vmnet、vboxnet、en、em、eth、teredo、ppp、sl、pan、ib、tun、sit、ip6tnl、gre 和 lo)我不确定是否我的清单已经完成了。
      • @MartinRosenau ,是的,该列表中会有很多名字。我建议您进行分类。例如,有 tap 设备、tun 设备、以太网设备、无线设备等等……对于 tap 和 tun 和 gre 设备,您(或创建它们的进程)可以命名它们。如果你只需要列出物理设备,你应该忽略tap、tun、gre等设备。
      • @MartinRosenau:我更新了答案,请阅读链接! ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多