问题描述
如果我检查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
使用dig
和OpenDNS
作为解析器的更快(可以说是最快的)方法:
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.).
- The DNS response protocol is standardised (the format will stay compatible).
- 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.
- (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>
,例如:eth0
,eth1
,pp0
等…
用法示例:
$ 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
-
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