在 shell 脚本中查找公共 IP 地址

sha*_*nuo 44 unix shell

我可以使用 ifconfig 或 hostname -i 命令找到我的 IP 地址。

但是我如何找到我的公共 IP?

(我有一个静态公共 IP,但我想使用 unix 命令找到它)

小智 51

curl ifconfig.me

curl ifconfig.me/ip (仅用于 ip)

curl ifconfig.me/all (更多信息,需要时间)

更多命令请访问:http : //ifconfig.me/#cli_wrap


Zor*_*che 27

您可以请求myip.opendns.com. 来自 OpenDNS。 dig @208.67.222.220 myip.opendns.com

  • 那太酷了。对于任何更容易记住的版本,您可以输入`dig @resolver1.opendns.com myip.opendns.com`。或者在 Windows 上:`nslookup myip.opendns.com resolver1.opendns.com`。 (8认同)
  • 最适合我的方法是:`dig @208.67.222.220 myip.opendns.com +short` 以便直接获取 ip,而无需浏览整个答案。 (2认同)

cns*_*nst 19

dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short

dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short

dig -4 @resolver1.opendns.com -t a myip.opendns.com +short


请注意,以上仅适用于当前的 IPv4(这些解析器目前似乎都没有 IPv6,但是如果您省略-4和明确的-t a,那么您将来可能会崩溃(Google 的 除外txt,它实际上可能适用于IPv6 有一天,如果谷歌正确启用))。

请注意,这myip.opendns.com只能通过 解析resolver1.opendns.com,而不能通过auth1.opendns.com- 所以,他们似乎在对自己的域名进行一些 DNS 劫持和中间人!因此,你不能用它来寻找一个随机解析的IP,因为resolver1.opendns.com不具有权威性的myip.opendns.com

请注意,这o-o.myaddr.l.google.com看起来是最灵活且面向未来的方法;它甚至可以很好地测试您的 DNS 解析器是否支持客户端子网的实验性 EDNS0 扩展(很少有解析器支持):

% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options:  printcmd
o-o.myaddr.l.google.com. 60     IN      TXT     "74.125.189.16"
o-o.myaddr.l.google.com. 60     IN      TXT     "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec  8 20:38:46 2013
;; MSG SIZE  rcvd: 114
Run Code Online (Sandbox Code Playgroud)

  • @Matt3o12 < 我找到了 OpenDNS:`dig +short AAAA myip.opendns.com @2620:0:ccc::2`。 (3认同)

Mat*_*Ife 12

如果您可以访问互联网,一个非常简单的答案是:

curl icanhazip.com
Run Code Online (Sandbox Code Playgroud)

请记住,为您的 IP 信任第三方来源可能会有问题,特别是如果您对这些数据的处理具有特殊意义。

更值得信赖的方法是选择一个已知的、值得信赖的 DNS 服务器(最好运行 DNSSEC)并使用它查询主机名,前提是您的 DNS 服务器包含此类条目;

dig @trustworthysource.com +short `hostname`
Run Code Online (Sandbox Code Playgroud)


Pie*_*ier 9

我为此编写了一个简单而快速的网络服务。

curl ident.me
Run Code Online (Sandbox Code Playgroud)

您可以询问您的 IPv4:

curl v4.ident.me
Run Code Online (Sandbox Code Playgroud)

或 IPv6:

curl v6.ident.me
Run Code Online (Sandbox Code Playgroud)

API 记录在http://api.ident.me/


Mic*_*odd 7

一种方式:http : //www.whatismyip.com/

  • 第四种方式:http://www.moanmyip.com/ (7认同)

sle*_*ske 5

如果

  1. 您只有一个公共 IP 地址并且
  2. 您直接连接到互联网(无 NAT/代理/VPN 等)

然后您可以解析 ifconfig 的输出以获取接口的 IP 地址(“inet addr:”部分)以获取所有接口的 IP 地址列表。不在私有范围内的一个 IP 地址(请参阅http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses)是您的公共 IP 地址。

也可以通过以下方式获得相同的列表

ip addr show
Run Code Online (Sandbox Code Playgroud)

这可能更容易解析。

如果您没有直接的互联网连接(NAT 等),没有外部帮助就无法找到您的公共 IP 地址(因为您的计算机不知道)。然后你必须像在其他答案中那样做。