可以认为在Linux系统上,环回网络适配器总是被称为“lo”吗?这只是一种可能不被遵循的命名约定,还是必须始终如此?
可以认为在Linux系统上,环回网络适配器总是被称为“lo”吗?这只是一种可能不被遵循的命名约定,还是必须始终如此?
我不知道任何一种Linux系统使用的环回接口名称不是lo
。如果我编写一个针对特定系统的脚本,我会依赖这个命名约定,但是当编写可移植程序时就不会了。例如,在OSX中,环回接口的名称是lo0
。
在C语言中,一种可靠的方法是通过套接字调用SIOCGIFCONF
ioctl
,迭代每个接口,并调用SIOCGIFFLAGS
ioctl
检查哪些接口设置了IFF_LOOPBACK
标志(请参见/usr/include/linux/if.h
)。
SIOCGIFCONF
还会给您提供接口名称。
这其实是一个相当古老的惯例,事实上我还没有见过一个Linux系统/发行版不叫它“lo”的。
然而,在*nix系统中设备名称如此多样化,可以假定它们会发生变化。如果想要可移植性,请使用标准(在本例中为127.0.0.1)。
接口可以被重命名为任何你想要的名称 - 但是任何将环回接口重命名的人都非常愚蠢,值得拥有一个不工作的系统 :)
是的,你可以枚举接口并获取它们的名称。但也许假设它将是“lo”同样容易。
使用 127.0.0.1 可能是一种保险的做法。
RFC3330 定义 127.0.0.0/8
作为回环子网。
然而,在 Windows 中定义为 c:\windows\system32\drivers\etc\hosts
,在 Linux 中定义为 /etc/hosts
的 localhost
的使用纯粹是惯例。此外,在 Linux 中,lo
是通常赋予本地主机 接口 的名称。
如果您必须绝对确定,请使用 127.0.0.1
。