确定我的公共IP的命令?

如果我查一下 谷歌,我可以看到我的公共IP。 Ubuntu命令行上有什么东西会给我同样的答案吗?

如果你不在路由器后面,你可以用 ifconfig.

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

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

或更短

curl https://ipinfo.io/ip

对于查找外部ip,您可以使用外部基于web的服务,也可以使用基于系统的方法。 更容易的是使用外部服务,也是 ifconfig 基于解决方案将在您的系统中工作,只有当你不在后面 NAT. 下面已经详细讨论了这两种方法。

使用外部服务查找外部IP

最简单的方法是通过命令行浏览器或下载工具使用外部服务。 自 wget 默认情况下在Ubuntu中可用,我们可以使用它。
要查找您的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

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

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

  1. DNS响应协议是标准化的(格式将保持兼容).
  2. 历史上DNS服务(OpenDNS,谷歌公共DNS,。.)倾向于生存更长的时间,并且比任何新的臀部都更稳定,可扩展,并且通常被照顾whatismyip.com HTTP服务今天很热。
  3. (对于那些关心微观优化的极客来说),这种方法应该本质上更快(只要几微秒)。

使用dig与OpenDNS作为解析器:

$ dig +short myip.opendns.com @resolver1.opendns.com111.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.1ppp0: 111.222.333.444

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

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

更新资料

  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.mecurl v4.ident.mecurl v6.ident.me

技术设计:在DNS,ident.me 有A和AAAA记录,v4.ident.me 只有A记录,v6.ident.me 只有AAAA记录。 这些Ip上的端口443和80由nginx提供服务,SSL使用由letsencrypt.org 通过certbot,并具有以下配置(摘录):

server {  […]  server_name .ident.me;  location / {    default_type text/plain;    return 200 $remote_addr;    add_header Access-Control-Allow-Origin "*";    add_header Cache-Control "no-cache, no-store, must-revalidate";  }}

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

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

它使用 resolver1.opendns.com dns服务器解析神奇 myip.opendns.com 主机名至 你的 ip地址。

亚马逊AWS

curl https://checkip.amazonaws.com

样本输出:

123.123.123.123

也适用于浏览器: http://checkip.amazonaws.com

我喜欢它,因为:

  • 它只返回回复正文中的明文IP,没有别的
  • 它来自一个着名的供应商,不太可能很快脱机

我用的是 :

wget -O - -q icanhazip.com

是的,你可以有ip:-)

准确地输入这个,按 Enter 指明的地方:

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

这将手动提交一个HTTP请求,该请求将在 HTTP/1.1 200 OK reply

示例输出:

$ telnet ipecho.net 80Trying 146.255.36.1...Connected to ipecho.net.Escape character is '^]'.GET /plain HTTP/1.1HOST: ipecho.netBROWSER: web-kitHTTP/1.1 200 OKDate: Tue, 02 Jul 2013 07:11:42 GMTServer: ApacheExpires: Mon, 26 Jul 1997 05:00:00 GMTCache-Control: no-cachePragma: no-cacheVary: Accept-EncodingTransfer-Encoding: chunkedContent-Type: text/htmlf111.222.333.4440

为了这个, 晕眩,晕眩 是发明出来的。 作为客户端,您可以向公共可用的STUN服务器发送请求,并让它返回它看到的IP地址。 有点低级whatismyip.com 因为它没有使用HTTP,也没有精心制作的DNS服务器,而是极快的STUN协议。

使用 stunclient

如果你有 stunclient 已安装(apt-get install stuntman-client 在debian/ubuntu上)你可以简单地做:

$stunclient stun.services.mozilla.comBinding test: successLocal address: A.B.C.D:42541Mapped address: W.X.Y.Z:42541

哪里 A.B.C.D 是您的机器在本地网络上的IP地址和 W.X.Y.Z 像网站这样的IP地址服务器是从外部看到的(以及您正在寻找的)。 使用 sed 您可以将上面的输出减少到只有一个IP地址:

stunclient stun.services.mozilla.com |    sed -n -e "s/^Mapped address: \(.*\):.*$/\1/p"

但是,您的问题是如何使用命令行找到它,这可能会排除使用STUN客户端。 所以我想知道。..

使用 bash

STUN请求可以手工制作,发送到外部STUN服务器使用 netcat 并使用 dd, hexdumpsed 像这样:

$echo -en '\x00\x01\x00\x08\xc0\x0c\xee\x42\x7c\x20\x25\xa3\x3f\x0f\xa1\x7f\xfd\x7f\x00\x00\x00\x03\x00\x04\x00\x00\x00\x00' |    nc -u -w 2 stun.services.mozilla.com 3478 |    dd bs=1 count=4 skip=28 2>/dev/null |    hexdump -e '1/1 "%u."' |    sed 's/\.$/\n/'

Echo定义了长度为8(0x0008)的二进制STUN请求(0x0001表示绑定请求),带有cookie0xc00cee和wireshark的一些粘贴内容。 只有代表外部IP的四个字节从答案中取出,清理并打印。

工作,但不建议用于生产用途:-)

P.S.许多STUN服务器可用,因为它是SIP和WebRTC的核心技术。 使用Mozilla的一个应该是安全的隐私明智的,但你也可以使用另一个: STUN服务器列表

“拥有动态IP”、“SSH在互联网上使用其他系统”、“显示当前公共IP的命令”。 你看到鸡/蛋的问题了吗? 您如何能够在不知道其地址的情况下在远程服务器上运行命令? 您可能对以下服务更感兴趣no-ip.com /DynDNS.org…

PS ip at DuckDuckGo (没有命令行,也没有大佬G)

也许这应该是一个单独的问题,但我希望在我的公共IP地址更改时看到警报。 现在,我只是在带有notify-send的crontab中使用以下答案。

如果不知道我的朋友的公共IP,就不能SSH。… dynDNS花费很多,没有ip艰苦的工作,但情况不允许这样做。… 无论如何,这个问题已经回答了。. 谢谢你的建议

下面是很好的解决方案。 Centos使用'ifconfig eth1/sed-nre'/^[^]+/{N;s/^([^]+)。*inet*([^]+)。*/\2/p}"其中eth1是网络设备o感兴趣,可以省略'et1'字符串以显示所有适配器的所有ip。 而不是\2’,你可以写`\1\2’来显示每个适配器的名称。

没有一个答案显示正确的方法。 由于我没有足够的声誉来发布答案,我会发布关于如何在不依赖外部服务的情况下获得它的评论。 只需在终端上运行’$hostname–ip-address`