问题描述
作为安装脚本的一部分,我想对机器的公共IP地址进行”educated guess”。它应在各种主机和平台上工作时,应尽可能强大。这是一个例子:
https://gist.github.com/4669037
该脚本使用3种方法,然后默认为/etc/hostname
的值。到目前为止,我仅在Ubuntu上进行了测试。这可能会在其他发行版上起作用吗?还有我可以添加的其他方法吗?
最佳回答
curl ipinfo.io/ip
要么
wget -qO- ipinfo.io/ip
要么
lynx -source ipinfo.io/ip
次佳回答
如果您没有 curl ,curl ifconfig.me
将是最佳选择:
wget -qO- ifconfig.me/ip
第三种回答
您要寻找多少个公共IP?如果计算机位于NAT之后怎么办?
-
curl
/wget
/netcat
(nc
)包含请求者地址的<URL>
:大多数时候都可以使用,但是该站点可能无法从计算机访问(由于防火墙或临时/永久性)。您将获得最多的公共IP。 -
ifconfig
:必须以root身份运行,否则,您还必须尝试/sbin/ifconfig
或/usr/sbin/ifconfig
。如果计算机具有更多NIC怎么办?您如何判断哪种IP是正确的?如果仅在计算机的LAN上使用IPv6,该怎么办?无论如何,您将获得的公共IP最少(如果在计算机上配置了更多接口,则可能是一个错误的IP-如今,使用网络分接头设备和/或无所不在的虚拟化通常是这种情况)。 -
/etc/hostname
:不需要存在,在许多系统上是/etc/HOSTNAME
,它不包含IP地址,而应包含主机名(通常为FQDN)。
关键是,它可能会失败的方式很多,您可能应该考虑a)更精确地指定目标系统,或者b)是否真的需要了解IP,这是一个解决方案,在简单情况下可以工作,但在稍微复杂一些的设置中却失败了,值得使用吗?如果您认为需要IP,则准备一种方法来在根本不获取IP或获取错误IP的情况下优雅地处理故障。