假设Linux系统上的环回networking适配器总是被称为“lo”是否安全 – 这只是一个命名约定,可能不被遵守,或者它一直是这种情况?
我不知道任何Linux系统有一个loopback接口除了lo
之外的任何东西。 如果我编写一个系统特定的脚本,而不是编写便携式程序时,我会依赖这个命名约定。 例如OSX中的loopback是lo0
。
C中一个可靠的方法是在套接字上调用SIOCGIFCONF
ioctl
,遍历接口,在每个接口上调用SIOCGIFFLAGS
ioctl
,并检查哪些接口设置了IFF_LOOPBACK
标志(请参阅/usr/include/linux/if.h
)。
SIOCGIFCONF
也会给你接口名称。
根据我的经验,这是一个普通的名字,虽然你不应该总是相信它是如此。 也许枚举接口,并寻找一个地址为127.0.0.1将是要走的路?
这是一个非常古老的约定,实际上我还没有看到一个Linux盒子/发行版,但并没有把它称为“LO”。
然而,在* nix系统中的设备名称是如此的多样化,可以认为它们会改变。 如果你想要可移植性,使用标准(在这种情况下,127.0.0.1)。
接口可以重命名为任何你想要的 – 但是任何人重命名的回环接口是非常愚蠢的,值得有一个非工作系统:)
是的,你可以枚举接口,并获得他们的名字。 但也许只是假设它将会是“lo”一样容易。
使用127.0.0.1可能是一种失败的方法。
RFC3330定义127.0.0.0/8
始终是环回子网。
然而,使用localhost
定义在c:\windows\system32\drivers\etc\hosts
Windows和/etc/hosts
Linux是纯粹的惯例。 此外,名称lo
是Linux中localhost 接口的典型名称。
如果您必须绝对确定,请使用127.0.0.1
。