当前位置: 首页>>技术问答>>正文


确定我的公有IP的命令?

,

问题描述

如果我检查google,我可以看到我的公开IP。 Ubuntu 命令行上有什么能让我得到同样答案的东西吗?

最佳解决思路

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

如果您位于路由器后面,那么您的计算机将不知道公共IP地址,因为路由器会执行网络地址转换。你可以问一些网站你的公共IP地址是使用curl还是wget,并从中提取你需要的信息:

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

或更短

curl ipinfo.io/ip

次佳解决思路

为了查找外部IP,您可以使用外部web-based服务,也可以使用基于系统的方法。更容易的是使用外部服务,只有当您不在NAT后面时,基于ifconfig的解决方案才能在您的系统中运行。这两种方法已在下面详细讨论。

使用外部服务找到外部IP

最简单的方法是通过命令行浏览器或下载工具使用外部服务。由于wget默认在Ubuntu中可用,因此我们可以使用它。要找到你的ip,use-

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

礼貌:

您也可以使用lynx(浏览器)或curl来代替wget,只需对上述命令稍作变动即可找到您的外部IP。

使用curl来查找ip:

$ curl ipecho.net/plain

为了更好地格式化输出使用:

$ curl ipecho.net/plain ; echo

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

The other answers here all go over HTTP to a remote server. Some of them require parsing of the output, or rely on the User-Agent header to make the server respond in plain text. They also change quite frequently (go down, change their name, put up ads, might change output format etc.).

  1. The DNS response protocol is standardised (the format will stay compatible).
  2. Historically DNS services (OpenDNS, Google Public DNS, ..) tend to survive much longer and are more stable, scalable and generally looked after than whatever new hip whatismyip.com HTTP service is hot today.
  3. (for those geeks that care about micro-optimisation), this method should be inherently faster (be it only by a few micro seconds).

Using dig with OpenDNS as resolver:

$ 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>,例如:eth0eth1pp0等…

用法示例:

$ 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

N.B:产出是指示性的而不是真实的。

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

UPDATE

  1. LANG=c已被添加到基于ifconfig的用途,因此它始终提供英文输出,而不考虑区域设置。

第三种解决思路

我最喜欢的一直是:

curl ifconfig.me

简单,易于输入。

你将不得不首先安装curl;)

如果ifconfig.me关闭,请尝试icanhazip.com和/或ipecho.net

curl icanhazip.com

要么

curl ipecho.net

第四种思路

icanhazip.com是我的最爱。

curl icanhazip.com

您可以明确请求IPv4:

curl ipv4.icanhazip.com

如果您没有curl,则可以使用wget

wget -qO- icanhazip.com

第五种思路

我发现一切都很烦人,所以我写了自己的。它简单快捷。

它的API在http://api.ident.me/

例子:

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

第六种思路

您可以使用DNS请求而不是HTTP请求来查找您的公共IP:

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

它使用resolver1.opendns.com dns服务器将神奇的myip.opendns.com主机名解析为您的IP地址。

第七种思路

我使用的是:

wget -O - -q icanhazip.com

是的,你可以有IP 🙂

第八种思路

亚马逊AWS

curl http://checkip.amazonaws.com

示例输出:

123.123.123.123

我喜欢它因为:

  • 它只返回纯文本IP,没有别的

  • 它来自一家知名供应商,它不可能很快脱机

第九种思路

正确输入,按Enter指示:

telnet ipecho.net 80 Enter GET /plain HTTP/1.1 Enter HOST: ipecho.net Enter BROWSER: web-kit Enter Enter

这个手动提交一个HTTP请求,它将在HTTP/1.1 200 OK reply的底部返回你的IP

示例输出:

$ telnet ipecho.net 80
Trying 146.255.36.1...
Connected to ipecho.net.
Escape character is '^]'.
GET /plain HTTP/1.1
HOST: ipecho.net
BROWSER: web-kit

HTTP/1.1 200 OK
Date: Tue, 02 Jul 2013 07:11:42 GMT
Server: Apache
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html

f
111.222.333.444
0

第十种思路

另一个很快(可能是最快的,相对)

curl ipecho.net/plain

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/39.html,未经允许,请勿转载。