【发布时间】:2009-10-26 10:12:50
【问题描述】:
假设 Linux 系统上的环回网络适配器将始终称为“lo”是否安全?这只是可能不遵守的命名约定,还是必须始终如此?
【问题讨论】:
标签: linux networking network-programming
假设 Linux 系统上的环回网络适配器将始终称为“lo”是否安全?这只是可能不遵守的命名约定,还是必须始终如此?
【问题讨论】:
标签: linux networking network-programming
除了lo 之外,我不知道任何具有环回接口的 Linux 系统。如果我编写特定于系统的脚本,我会依赖这个命名约定,但在编写可移植程序时不会。例如 OSX 中的环回是lo0。
C 中一种可靠的方法是在套接字上调用SIOCGIFCONFioctl,遍历接口,在每个接口上调用SIOCGIFFLAGSioctl,并检查哪些接口设置了IFF_LOOPBACK 标志(参见/usr/include/linux/if.h)。
SIOCGIFCONF 还会为您提供接口名称。
【讨论】:
接口可以重命名为您想要的任何东西 - 但是任何重命名环回接口的人都非常愚蠢,应该拥有一个无法正常工作的系统:)
是的,您可以枚举接口并获取它们的名称。但也许只是假设它会是“lo”同样容易。
【讨论】:
根据我的经验,这是一个通用名称,尽管您不应该总是相信它是这样的。也许枚举接口并寻找地址为 127.0.0.1 的接口是可行的方法?
【讨论】:
这是一个相当古老的约定,事实上我还没有看到一个不叫它“lo”的 Linux 机器/发行版。
但是,*nix 系统中的设备名称非常多样化,可以假设它们会发生变化。如果您想要可移植性,请使用标准(在本例中为 127.0.0.1)。
【讨论】:
使用 127.0.0.1 可能是解决此问题的安全方法。
【讨论】:
RFC3330 将127.0.0.0/8 定义为始终作为环回子网。
然而,localhost 的使用,在 Windows 上的 c:\windows\system32\drivers\etc\hosts 和 Linux 上的 /etc/hosts 中定义纯粹是约定俗成的。此外,名称 lo 是 Linux 中 localhost interface 的典型名称。
如果您必须绝对确定,请使用127.0.0.1。
【讨论】: