使用外部服务查找外部 IP

使用外部服务查找外部 IP

如果我检查谷歌,我可以看到我的公共 IP。Ubuntu 命令行上是否有可以给我相同答案的东西?

答案1

如果您不在路由器后面,您可以使用 来找到它ifconfig

如果您位于路由器后面,那么您的计算机将不知道公共 IP 地址,因为路由器会进行网络地址转换。您可以向某个网站询问您的公共 IP 地址正在使用什么,curl或者wget从中提取所需的信息:

curl -s https://checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'  

或更短

curl https://ipinfo.io/ip

答案2

要查找外部 IP,您可以使用外部基于 Web 的服务,也可以使用基于系统的方法。更简单的方法是使用外部服务,而且ifconfig只有当您没有使用 时,基于系统的解决方案才会在您的系统中起作用NAT。下面详细讨论了这两种方法。

使用外部服务查找外部 IP

最简单的方法是通过命令行浏览器或下载工具使用外部服务。由于wgetUbuntu 默认提供,因此我们可以使用它。
要查找您的 IP,请使用-

$ wget -qO- https://ipecho.net/plain ; echo

礼貌

您还可以使用lynx(浏览器)或curl代替wget上述命令,并对命令进行细微改动,以查找您的外部 IP。

使用curl以下方式查找 IP:

$ curl https://ipecho.net/plain

为了获得更好的格式化输出使用:

$ curl https://ipecho.net/plain ; echo

一种更快(可以说是最快的)的方法,使用digwithOpenDNS作为解析器:

这里的其他答案都通过 HTTP 传输到远程服务器。其中一些需要解析输出,或者依赖 User-Agent 标头使服务器以纯文本响应。它们也经常更改(关闭、更改名称、张贴广告、可能更改输出格式等)。

  1. DNS 响应协议是标准化的(格式将保持兼容)。
  2. 从历史上看,DNS 服务(OpenDNS、Google Public DNS 等)往往比当今流行的任何新潮的 whatismyip.com HTTP 服务存活时间更长,而且更稳定、可扩展且更受关注。
  3. (对于那些关心微优化的极客来说),这种方法应该本质上更快(仅仅几微秒)。

使用 dig 和 OpenDNS 作为解析器:

$ dig +short myip.opendns.com @resolver1.opendns.com

111.222.333.444

复制自: https://unix.stackexchange.com/a/81699/14497

无需依赖外部服务即可查找外部 IP

  • 如果您知道网络接口名称

在终端中输入以下内容:

$ LANG=c ifconfig <interface_name> | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'

在上面的文本中,替换为<interface_name>您的实际接口的名称,例如:eth0,,,等等...eth1pp0

用法示例:

$ LANG=c ifconfig ppp0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
111.222.333.444
  • 如果你不知道你的网络接口名称

在您的终端中输入以下内容(这将获取系统中每个网络接口的名称和 IP 地址):

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'

用法示例:

$ LANG=c ifconfig | grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }'
lo: 127.0.0.1
ppp0: 111.222.333.444

注意:输出仅作参考,并非真实情况。

礼貌: https://www.if-not-true-then-false.com/2010/linux-get-ip-address/

更新

  1. LANG=c已添加到ifconfig基本用法中,以便它始终提供英文输出,而不管区域设置如何。

答案3

我最喜欢的一直是:

curl ifconfig.me

简单,易于输入。

您必须先安装 curl ;)

如果 ifconfig.me 瘫痪,请尝试 icanhazip.com 或 ipecho.net

curl icanhazip.com

或者

curl ipecho.net

答案4

运行我自己的服务,设计得简单而愚蠢,ident.me。

其 API 和实现记录在https://api.ident.me/

来自终端的示例(https://为了安全性而牺牲速度):

curl ident.me
curl v4.ident.me
curl v6.ident.me

相关内容