【问题标题】:Loopback adapter name in LinuxLinux 中的环回适配器名称
【发布时间】:2009-10-26 10:12:50
【问题描述】:

假设 Linux 系统上的环回网络适配器将始终称为“lo”是否安全?这只是可能不遵守的命名约定,还是必须始终如此?

【问题讨论】:

    标签: linux networking network-programming


    【解决方案1】:

    除了lo 之外,我不知道任何具有环回接口的 Linux 系统。如果我编写特定于系统的脚本,我会依赖这个命名约定,但在编写可移植程序时不会。例如 OSX 中的环回是lo0

    C 中一种可靠的方法是在套接字上调用SIOCGIFCONFioctl,遍历接口,在每个接口上调用SIOCGIFFLAGSioctl,并检查哪些接口设置了IFF_LOOPBACK 标志(参见/usr/include/linux/if.h)。

    SIOCGIFCONF 还会为您提供接口名称。

    【讨论】:

    • 这似乎具有不需要在系统上配置任何 IPv4(“127.0.0.1”)地址的优点。
    【解决方案2】:

    接口可以重命名为您想要的任何东西 - 但是任何重命名环回接口的人都非常愚蠢,应该拥有一个无法正常工作的系统:)

    是的,您可以枚举接口并获取它们的名称。但也许只是假设它会是“lo”同样容易。

    【讨论】:

      【解决方案3】:

      根据我的经验,这是一个通用名称,尽管您不应该总是相信它是这样的。也许枚举接口并寻找地址为 127.0.0.1 的接口是可行的方法?

      【讨论】:

        【解决方案4】:

        这是一个相当古老的约定,事实上我还没有看到一个不叫它“lo”的 Linux 机器/发行版。

        但是,*nix 系统中的设备名称非常多样化,可以假设它们会发生变化。如果您想要可移植性,请使用标准(在本例中为 127.0.0.1)。

        【讨论】:

          【解决方案5】:

          使用 127.0.0.1 可能是解决此问题的安全方法。

          【讨论】:

            【解决方案6】:

            RFC3330127.0.0.0/8 定义为始终作为环回子网。

            然而,localhost 的使用,在 Windows 上的 c:\windows\system32\drivers\etc\hosts 和 Linux 上的 /etc/hosts 中定义纯粹是约定俗成的。此外,名称 lo 是 Linux 中 localhost interface 的典型名称。

            如果您必须绝对确定,请使用127.0.0.1

            【讨论】:

            • RFC3330 将 127.0.0.0/8 定义为环回地址的子网。它所说的关于 127.0.0.1 的只是它通常用作环回地址。如果需要,您可以使用 127.0.1.1 作为环回地址。 -1 表示没有阅读您链接的 RFC,然后给出错误的建议。
            猜你喜欢
            • 1970-01-01
            • 2019-06-30
            • 1970-01-01
            • 1970-01-01
            • 2017-07-25
            • 1970-01-01
            • 1970-01-01
            • 2014-09-16
            • 2014-09-12
            相关资源
            最近更新 更多