myip () {
lwp-request -o text checkip.dyndns.org | awk '{ print $NF }'
}
但这取决于安装的
perl-libwww
,perl-html-format
和perl-html-tree
。我还可以通过哪些其他方式获取我的外部IP?#1 楼
我建议直接从DNS服务器获取它。下面的大多数其他答案都涉及通过HTTP到远程服务器。其中一些需要解析输出,或者依赖于User-Agent标头使服务器以纯文本格式响应。这些更改非常频繁(更改,更改名称,放置广告,更改输出格式等)。
DNS响应协议已标准化(格式将保持兼容)。
从历史上看,DNS服务(Akamai,Google Public DNS,OpenDNS等)比今天流行的任何新型时髦whatcomyip dot-com HTTP服务都倾向于生存更长的时间,并且更稳定,更具可伸缩性,并且通常受到更多关注。 br />此方法本质上是更快的(仅需几毫秒!)。
将
dig
与OpenDNS解析器配合使用:dig @resolver4.opendns.com myip.opendns.com +short
也许在您的
bashrc
中使用它的别名很容易记住alias wanip='dig @resolver4.opendns.com myip.opendns.com +short'
以简单的IP地址响应:
$ wanip
80.100.192.168 # or, 2606:4700:4700::1111
(缩写自https://ss64.com/bash/dig.html ):
usage: dig [@global-dnsserver] [q-type] <hostname> <d-opt> [q-opt]
q-type one of (A, ANY, AAAA, TXT, MX, ...). Default: A.
d-opt ...
+[no]short (Display nothing except short form of answer)
...
q-opt one of:
-4 (use IPv4 query transport only)
-6 (use IPv6 query transport only)
...
ANY
查询类型返回AAAA或A记录。要特别喜欢IPv4或IPv6连接,请相应地使用-4
或-6
选项。要要求响应为IPv4地址,请将ANY替换为
A
;对于IPv6,请将其替换为AAAA
。请注意,它只能返回用于连接的地址。例如,通过IPv6连接时,它无法返回A地址。替代服务器
各种DNS提供商都提供此服务,包括OpenDNS,Akamai和Google Public DNS:
# OpenDNS (since 2009)
$ dig @resolver3.opendns.com myip.opendns.com +short
$ dig @resolver4.opendns.com myip.opendns.com +short
80.100.192.168
# OpenDNS IPv6 (since 2018)
$ dig @resolver1.ipv6-sandbox.opendns.com AAAA myip.opendns.com +short
2606:4700:4700::1111
# Akamai (since 2009)
$ dig @ns1-1.akamaitech.net ANY whoami.akamai.net +short
80.100.192.168
# Akamai approximate (since 2018)
# NOTE: This returns only an approximate IP from your block,
# but has the benefit of working with private DNS proxies.
$ dig +short TXT whoami.ds.akahelp.net
"ip" "80.100.192.169"
# Google (since 2010)
$ dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
"80.100.192.168"
专门要求IPv4地址的别名示例:
# https://unix.stackexchange.com/a/81699/37512
alias wanip4='dig @resolver4.opendns.com myip.opendns.com +short -4'
$ wanip4
80.100.192.168
并为您的IPv6地址:
# https://unix.stackexchange.com/a/81699/37512
alias wanip6='dig @ns1.google.com TXT o-o.myaddr.l.google.com +short -6'
$ wanip6
"2606:4700:4700::1111"
故障排除
如果命令由于某种原因而无法使用,则上游提供程序,命令行工具或其他可能存在问题。为了帮助理解为什么它不起作用,请运行不带
+short
选项的命令以显示DNS查询的详细信息。例如:$ dig @resolver4.opendns.com myip.opendns.com
;; Got answer: ->>HEADER<<- opcode: QUERY, status: NOERROR
;; QUESTION SECTION:
;myip.opendns.com. IN A
;; ANSWER SECTION:
myip.opendns.com. 0 IN A 80.100.192.168
;; Query time: 4 msec
评论
你是对的,那太快了..
–拉胡尔·帕蒂尔(Rahul Patil)
13年7月9日在16:24
@Krinkle是一个很好的答案。 Google的公共DNS中有myip.opendns.com的等效项吗?
–坎南·莫汉(Kannan Mohan)
14-10-26在5:11
我发现它比curl http://canhazip.com快19倍。参见askubuntu.com/a/427092/2273
–亚当·蒙森(Adam Monsen)
15年3月10日在21:09
喜欢这种干净/没有依赖的方法比所有其他建议要好得多,除非您必须绑定端口80
–二元异常
15年3月14日在15:27
请注意,在某些情况下,提供NAT的路由器也会转换DNS响应(您可以查看wiki.nil.com/Network_address_translation_of_DNS_responses);在这种情况下,您应该回退到建议使用其他方法而不是DNS的答案。
–拉兹万·斯特凡内斯库(Razvan Stefanescu)
15-10-30在16:20
#2 楼
注意:这是关于外部IP地址(连接到Internet时服务器在Internet上看到的地址)-如果您想要内部IP地址(您自己的计算机用于连接的地址,可能有所不同),请参见此answer。; DR-2015年最快的方法
使用DNS最快的方法:
dig +short myip.opendns.com @resolver4.opendns.com
或使用externalip:
externalip dns
使用HTTP最快的方法:
curl -s http://whatismyip.akamai.com/
或使用externalip:
externalip http
使用带有有效证书的HTTPS最快:
curl -s https://4.ifcfg.me/
或使用externalip:
externalip https
使用telnet:
通过
nc
命令:nc 4.ifcfg.me 23 | grep IPv4 | cut -d' ' -f4
,或使用externalip:
externalip telnet
通过
telnet
命令:telnet 4.ifcfg.me 2>&1 | grep IPv4 | cut -d' ' -f4
使用FTP:
echo close | ftp 4.ifcfg.me | awk '{print ; exit}'
或使用externalip:
externalip ftp
以上所有内容都可以使用我的externalip脚本运行:
externalip dns
externalip http
externalip https
externalip telnet
externalip ftp
现在很长故事...
提供外部IP规格的不同服务器有很多选择通过HTTP在这里或其他地方发布。
我做了一个基准测试,看它们中的任何一个是否比其他的都要好,我对结果感到惊讶。例如。最受推荐的ifconfig.me之一对我而言几乎总是最慢的,有时需要花费几秒钟来响应。许多服务器无法通过HTTPS进行操作,或者可以通过有效的证书获得证书。有些响应时间不一致。
基准
HTTP和HTTPS
这是我使用的externalip-benchmark脚本的来源:
https:// raw .githubusercontent.com / rsp / scripts / master / externalip-benchmark
您可以自行运行以查看此处提到的哪些服务值得使用:
wget https://raw.githubusercontent.com/rsp/scripts/master/externalip-benchmark
chmod a+x externalip-benchmark
./externalip-benchmark
我的结果从华沙于2015年4月3日上线-地址已更改以保护无辜者:
最佳http响应时间:
0.086s http://ip.tyk.nu/ - answer='172.31.133.7'
0.089s http://whatismyip.akamai.com/ - answer='172.31.133.7'
0.091s http://tnx.nl/ip - answer='172.31.133.7'
0.117s http://ifcfg.me/ - answer='172.31.133.7'
0.156s http://l2.io/ip - answer='172.31.133.7'
0.317s http://ip.appspot.com/ - answer='172.31.133.7'
0.336s http://ident.me/ - answer='172.31.133.7'
0.338s http://ipof.in/txt - answer='172.31.133.7'
0.347s http://icanhazip.com/ - answer='172.31.133.7'
0.496s http://curlmyip.com/ - answer='172.31.133.7'
0.527s http://wgetip.com/ - answer='172.31.133.7'
0.548s http://curlmyip.com/ - answer='172.31.133.7'
0.665s http://bot.whatismyipaddress.com/ - answer='172.31.133.7'
0.665s http://eth0.me/ - answer='172.31.133.7'
1.041s http://ifconfig.me/ - answer='172.31.133.7'
1.049s http://corz.org/ip - answer='172.31.133.7'
1.598s http://ipecho.net/plain - answer='172.31.133.7'
最佳https响应时间:
0.028s https://curlmyip.com/ - answer=''
0.028s https://curlmyip.com/ - answer=''
0.029s https://l2.io/ip - answer=''
0.029s https://tnx.nl/ip - answer=''
0.072s https://whatismyip.akamai.com/ - answer=''
0.113s https://ipecho.net/plain - answer=''
0.117s https://ident.me/ - answer=''
0.207s https://ip.tyk.nu/ - answer='172.31.133.7'
0.214s https://ipof.in/txt - answer='172.31.133.7'
0.259s https://ifcfg.me/ - answer='172.31.133.7'
0.289s https://corz.org/ip - answer=''
0.436s https://ip.appspot.com/ - answer='172.31.133.7'
0.448s https://bot.whatismyipaddress.com/ - answer=''
0.454s https://eth0.me/ - answer=''
0.673s https://icanhazip.com/ - answer='172.31.133.7'
5.255s https://ifconfig.me/ - answer=''
10.000s https://wgetip.com/ - answer=''
(注意:有些内容空白的快速响应-无效。)
最佳平均ping时间:
10.210 //whatismyip.akamai.com/
36.820 //tnx.nl/ip
37.169 //ip.tyk.nu/
39.412 //ipof.in/txt
40.967 //ident.me/
41.257 //ipecho.net/plain
43.918 //ifcfg.me/
45.720 //l2.io/ip
64.749 //ip.appspot.com/
123.412 //corz.org/ip
134.245 //wgetip.com/
157.997 //icanhazip.com/
161.613 //curlmyip.com/
162.100 //curlmyip.com/
268.734 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/
这是我于2015年4月3日从阿姆斯特丹获得的结果:
最佳的http响应时间:
0.021s http://ipecho.net/plain - answer='172.31.13.37'
0.027s http://tnx.nl/ip - answer='172.31.13.37'
0.035s http://whatismyip.akamai.com/ - answer='172.31.13.37'
0.039s http://ifcfg.me/ - answer='172.31.13.37'
0.045s http://l2.io/ip - answer='172.31.13.37'
0.142s http://ident.me/ - answer='172.31.13.37'
0.144s http://ipof.in/txt - answer='172.31.13.37'
0.150s http://ip.appspot.com/ - answer='172.31.13.37'
0.150s http://ip.tyk.nu/ - answer='172.31.13.37'
0.170s http://icanhazip.com/ - answer='172.31.13.37'
0.190s http://eth0.me/ - answer='172.31.13.37'
0.191s http://wgetip.com/ - answer='172.31.13.37'
0.301s http://curlmyip.com/ - answer='172.31.13.37'
0.330s http://bot.whatismyipaddress.com/ - answer='172.31.13.37'
0.343s http://curlmyip.com/ - answer='172.31.13.37'
0.485s http://corz.org/ip - answer='172.31.13.37'
3.549s http://ifconfig.me/ - answer='172.31.13.37'
0.004s https://curlmyip.com/ - answer=''
0.012s https://curlmyip.com/ - answer=''
0.012s https://tnx.nl/ip - answer=''
0.016s https://ipecho.net/plain - answer=''
0.071s https://whatismyip.akamai.com/ - answer=''
0.096s https://ifcfg.me/ - answer='172.31.13.37'
0.097s https://ident.me/ - answer=''
0.187s https://corz.org/ip - answer=''
0.187s https://ip.appspot.com/ - answer='172.31.13.37'
0.189s https://ip.tyk.nu/ - answer='172.31.13.37'
0.195s https://eth0.me/ - answer=''
0.253s https://l2.io/ip - answer=''
0.300s https://ipof.in/txt - answer='172.31.13.37'
0.324s https://bot.whatismyipaddress.com/ - answer=''
0.512s https://icanhazip.com/ - answer='172.31.13.37'
1.272s https://ifconfig.me/ - answer=''
10.002s https://wgetip.com/ - answer=''
最佳平均ping时间:
1.020 //ipecho.net/plain
1.087 //whatismyip.akamai.com/
5.011 //ip.appspot.com/
6.942 //ident.me/
7.017 //ipof.in/txt
8.209 //tnx.nl/ip
11.343 //ip.tyk.nu/
12.647 //ifcfg.me/
13.828 //l2.io/ip
81.642 //icanhazip.com/
85.447 //wgetip.com/
91.473 //corz.org/ip
102.569 //curlmyip.com/
102.627 //curlmyip.com/
247.052 //ifconfig.me/
999999 //bot.whatismyipaddress.com/
999999 //eth0.me/
(999999 ping表示100%数据包丢失。)
DNS
此处进行比较是其他方法花费的时间-在2015年6月16日在华沙和阿姆斯特丹进行了测试。
使用:
time dig +short myip.opendns.com @resolver1.opendns.com
通常花费(实际挂钟时间)大约是:
来自华沙的0.035s
来自阿姆斯特丹的0.015s
实际上可以使用这种方式使用四个解析器:
resolver1.opendns.com
resolver2.opendns.com
resolver3.opendns.com
resolver4.opendns.com
它们在华沙和阿姆斯特丹的响应时间都相同,但事实并非如此在其他位置。
使用208.67.222.222-resolver1.opendns.com的IP而不是域名的速度更快:
华沙的0.023s
0.00来自阿姆斯特丹的9s
,但是如果IP更改,将来可能无法使用(尽管对于著名的DNS解析器来说不太可能-也许我应该在我的externalip脚本中使用IP-请发表评论) 。
Telnet
使用
nc
或telnet
命令(请参见上文)进行Telnet通常需要:华沙的0.103s
阿姆斯特丹的0.035s
(
nc
和telnet
命令之间没有明显区别。)FTP
华沙的0.104s
阿姆斯特丹的0.036s
域名
使用IP地址代替给定服务的域名时,所有方法都将更快(尤其是首次运行时)(对于可以使用基于主机的虚拟服务器且无法与之配合使用的HTTP除外)裸IP-未测试),但在服务更改IP地址时将停止工作,因此速度可能更快,但不能满足未来需求。
评论
如果您从自己的位置看到一些有趣的结果,或者您认为应该推荐其他主机而不是我选择的主机,请发表评论。如果缺少任何重要服务,请在GitHub上发表评论或发布问题。我想通过最新选择的性能最佳的服务来保持此帖子的更新。
评论
您是否按照Krinkle的回答对myip.opendns.com DNS方法进行了基准测试?当前,由于不知道此方法的其他提供者,因此默认情况下是赢家,但将其与其他方法进行比较仍然很有用。
–詹姆斯·海格(James Haigh)
2015年4月29日在8:16
@JamesHaigh感谢您的建议。我在答案中添加了DNS和其他方法(telnet,ftp)。最快的方法似乎是直接使用解析器的IP地址(而不是域名)的DNS。
–rsp
15年6月16日在15:13
您还应该添加/测试canhazip.com / canhazip.com(HTTP和HTTPS)。
–xxdesmus
15年8月22日在16:15
您可以将myip.addr.space添加到列表中。我自己创建了这个文件,因为我对当时看到的其他任何文件都不满意。
–迈克尔·汉普顿
16年5月7日在4:07
有时我使用dig + short myip.opendns.com @ resolver1.opendns.com(36.86.63.180),dig -4 @ ns1-1.akamaitech.net -ta whoami.akamai.net + short(118.98.115.34)会得到不同的结果),然后卷曲http://canhazip.com(36.71.64.71)。如何确定哪一个是正确的?
–Sutandiono
16年9月12日在3:10
#3 楼
curl -s http://whatismijnip.nl |cut -d " " -f 5
荷兰人替换了一个工作地点。
评论
@MaciekSawicki在这种情况下,真的需要-s选项吗?我在我的fedora 15-bash 4.2.10(1)中尝试使用/不使用它,并且它以两种方式工作。
–ztank1013
2011-10-15 14:05
通过CLI似乎不再起作用,但是可以从Web浏览器转到该网页。我正在使用openSUSE 12.1 x64。
– SaultDon
2012年8月16日16:13
whatismyip.com删除了免费服务来检查外部IP。因此,恐怕这不再正确。 icanhazip.com仍然有效。
– daSong
2013年1月17日10:20
@daSong您不是说whatismyip.org吗?
– Cory Klein
2013年11月25日19:30
一些替代方案:curl ifconfig.me,curl icanhazip.com,curl ipecho.net/plain、curl ifconfig.co,但请记住,使用此方法进行自动化操作是非常不安全的(这些站点的所有者以后随时可以更改输出)而不知道),因此请尽可能使用dig方法。
–马恩
1月8日18:25
#4 楼
由于已经提到whatsmyip.org和ifconfig.me:curl -s icanhazip.com
评论
另一个:ip.appspot.com或ip.appspot.com
– Lekensteyn
2011年11月9日在8:31
这两个都支持IPv6。
–李Jo
2012年10月8日17:31
@JoshLee,请注意,icanhazip也支持ipv6。另外,请注意OP,所有这些curl解决方案(尽管有效)仍然依赖于外部库(libcurl)。
– HalosGhost
14年7月29日在2:51
另一个:ifcfg.me
–恩
2014年12月17日14:04
#5 楼
您可以使用ifconfig.me替代whatismyip.org。curl -s http://ifconfig.me
ifconfig.me还有其他一些功能。要了解您还能收到什么其他信息,请访问网站。
评论
它非常慢。我经常获得超过30秒的响应时间,有时甚至超过一分钟!有时是半秒(仍然很多),然后是15秒左右。这是从不同的位置进行测试的。请参阅我的答案以获取更多信息和基准。
–rsp
2015年4月3日4:12
#6 楼
Amazon AWScurl https://checkip.amazonaws.com
样本输出:
123.123.123.123
也可以在浏览器上使用:http://checkip.amazonaws.com
我喜欢它,因为:
它只返回回复正文中的纯文本IP,没有别的
它来自知名提供商,不太可能很快下线
#7 楼
wget -O - -q http://whatismyip.org/
评论
我无法获得这样的IP,只能将其指定为:
–于ugian
13年4月4日在13:38
可以与大量正则表达式魔术配合使用,但这并不容易。如果您坚持使用此服务,请确保将该行包装到脚本中:$ curl -s http://whatismyip.org | grep -o'\([[[:digit:]] \ {1,3 \} \。\)\ {3 \} [[:digit:]] \ {1,3 \}'
–syntaxerror
16-2-1在2:40
#8 楼
curl ident.me
OR
curl ifconfig.me
OR
curl https://tnx.nl/ip
OR
curl ipecho.net/plain
OR
curl whatismyip.akamai.com
OR
curl icanhazip.com
OR
curl wgetip.com
OR
curl ip.tyk.nu
OR
curl bot.whatismyipaddress.com
参考
#9 楼
netcat icanhazip.com 80 <<< $'GET / HTTP/1.1\nHost: icanhazip.com\n\n' | tail -n1
评论
尽管该站点可以运行,但此处的输出为空。知道为什么吗?如果相关,我将在代理后面,但wget icanhazip.com可以工作。
–l0b0
13年4月4日在11:23
@ l0b0尝试忽略|尾部-n1部分,看看您从代理那里得到什么
– Eugene Yarmash
2013年4月4日13:18
没什么,只是退出代码1。netcat icanhazip.com 80的同上。看起来它忽略了$ http_proxy和朋友,因为用-x指定代理和端口只会导致挂起进程。
–l0b0
2013年4月4日14:05
@ l0b0:netcat代理3128 <<< $'GET http://icanhazip.com/ HTTP / 1.0 \ n \ n'| tail -n 1用于基本的HTTP代理(假设它在端口3128上运行)。不过,您显然会获得代理的IP地址。
–tripleee
13年7月4日在4:07
HTTP 1.0没有主机:请求标头-基于名称的虚拟主机是HTTP 1.1的主要改进之一。更改请求以指定HTTP / 1.1,或删除Host标头(我建议使用前者)。
–用户
13年7月4日在7:39
#10 楼
我更喜欢使用curlmyip.com,它很简单:curl curlmyip.com
它很短很容易记住。
评论
为了在bash中使用(OP的意图),没有其他答案中提到的-s选项,您将无法做。
– Serge Stroobandt
2014年7月20日在11:53
@SergeStroobandt是的,可以。 -s开关所做的所有操作均以静默方式运行,即。错误消息将不会显示。因此,这取决于他希望脚本如何处理错误。该命令本身将像使用-s一样可靠地返回IP地址。
–加里特·佛格利(Garrett Fogerlie)
14年7月24日在22:48
到目前为止,该站点是多项测试中最可靠的站点。
–阿莫斯·夏皮拉(Amos Shapira)
2014年12月12日上午9:05
#11 楼
如果在阅读完所有这些建议后还想阅读更多内容,可以看这里是过度设计的Bash脚本。其中包含DNS和HTTP服务器列表,这些列表到2017年2月似乎还可以正常工作。
如果您有
dig
,它将首先尝试使用DNS,该DNS几乎比各种HTTP服务快一个数量级。它在收到第一个答复时退出。
/>
如果没有
dig
或所有DNS服务器都失败,则它会尝试HTTP服务,直到得到答复为止。使用以避免始终使用相同的脚本。 #!/bin/bash
## Get my external IP
timeout=2 # seconds to wait for a reply before trying next server
verbose=1 # prints which server was used to STDERR
dnslist=(
"dig +short myip.opendns.com @resolver1.opendns.com"
"dig +short myip.opendns.com @resolver2.opendns.com"
"dig +short myip.opendns.com @resolver3.opendns.com"
"dig +short myip.opendns.com @resolver4.opendns.com"
"dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com"
"dig +short -4 -t a whoami.akamai.net @ns1-1.akamaitech.net"
"dig +short whoami.akamai.net @ns1-1.akamaitech.net"
)
httplist=(
4.ifcfg.me
alma.ch/myip.cgi
api.infoip.io/ip
api.ipify.org
bot.whatismyipaddress.com
canhazip.com
checkip.amazonaws.com
eth0.me
icanhazip.com
ident.me
ipecho.net/plain
ipinfo.io/ip
ipof.in/txt
ip.tyk.nu
l2.io/ip
smart-ip.net/myip
tnx.nl/ip
wgetip.com
whatismyip.akamai.com
)
# function to shuffle the global array "array"
shuffle() {
local i tmp size max rand
size=${#array[*]}
max=$(( 32768 / size * size ))
for ((i=size-1; i>0; i--)); do
while (( (rand=$RANDOM) >= max )); do :; done
rand=$(( rand % (i+1) ))
tmp=${array[i]} array[i]=${array[rand]} array[rand]=$tmp
done
}
## if we have dig and a list of dns methods, try that first
if hash dig 2>/dev/null && [ ${#dnslist[*]} -gt 0 ]; then
eval array=( \"${dnslist[@]}\" )
shuffle
for cmd in "${array[@]}"; do
[ "$verbose" == 1 ] && echo Trying: $cmd 1>&2
ip=$(timeout $timeout $cmd)
if [ -n "$ip" ]; then
echo $ip
exit
fi
done
fi
# if we haven't succeeded with DNS, try HTTP
if [ ${#httplist[*]} == 0 ]; then
echo "No hosts in httplist array!" >&2
exit 1
fi
# use curl or wget, depending on which one we find
curl_or_wget=$(if hash curl 2>/dev/null; then echo "curl -s"; elif hash wget 2>/dev/null; then echo "wget -qO-"; fi);
if [ -z "$curl_or_wget" ]; then
echo "Neither curl nor wget found. Cannot use http method." >&2
exit 1
fi
eval array=( \"${httplist[@]}\" )
shuffle
for url in "${array[@]}"; do
[ "$verbose" == 1 ] && echo Trying: $curl_or_wget "$url" 1>&2
ip=$(timeout $timeout $curl_or_wget "$url")
if [ -n "$ip" ]; then
echo $ip
exit
fi
done
示例用法(我称为脚本
myip
):$ myip
Trying: dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com
"151.101.65.69"
$ ip=$(myip); echo "IP = '$ip'"
Trying: dig +short myip.opendns.com @resolver1.opendns.com
IP = '151.101.65.69'
在脚本顶部注释掉
verbose
变量,以避免打印使用的服务器。更新:此脚本现在也在Github上,我可以在需要时更新它:https:// githu b.com/mivk/myip
#12 楼
这始终对我有用,我在conky中使用它来获取我的IP地址。wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'
评论
+1尽管看上去很笨拙,但这种方法对我来说却已经挽救了生命几次。因为互联网不是WWW。您可以访问Internet,但是(通常在服务器机房中)注定要使用非GUI控制台,在这种情况下,请务必牢记其中一个checkIP服务URL。而且由于这是一种非常普遍的方式,因此它似乎只是经过编译,因为与亚马逊的一种相比,您将更容易记住DynDNS的一种。也就是说,如果您无法通过Google进行搜索。 (甚至不是山猫)。
–syntaxerror
16-2-1在2:24
#13 楼
如果要使用HTTPS来避免某些潜在的陷阱,请执行以下操作:_result=$(wget -qO- https://ipcheckit.com/)
_result="${_result##*Your IP address is<br><b>}"
printf '%s\n' "${_result%%</b></p>*}"
评论
也许您可以详细说明您在这里要避免的潜在陷阱?
–卡莱布
2012年10月17日下午6:27
域名ipcheckit.com显然是出售的,不再托管IP地址显示服务。
–manatwork
13年1月17日在11:59
啊,只写脚本的陷阱:)
–ЯрославРахматуллин
13年7月4日在14:07
@Chris Down技术仍然有效,您只需要另一个支持SSL的站点即可使用它。
–卡莱布
13年11月25日在21:09
#14 楼
这是另一种选择,它取决于托管业务的主机围绕管理动态IP而不是可能会消失或更改格式的“公共服务”站点来解决。在众多服务器之一中注册服务器免费的动态dns服务(例如,no-ip.com),这将为您提供一个DNS条目,例如xxx.no-ip.org。
安装服务的动态更新工具(将IP更改报告给服务)。
要获取脚本中的IP地址,只需执行以下操作:
external_ip=`dig +short xxx.no-ip.org`
非常适合用于cron作业,以检查动态IP是否已更改以及一些配置条目需要更改。
#15 楼
由于我不依赖连接或服务,因此使用以下代码,该代码尝试使用不同的服务来获取IP(随意添加更多):# Get my ip address and put in a file
declare -a arr=("ipecho.net/plain" "ident.me" "tnx.nl/ip" "ip.appspot.com" "https://shtuff.it/myip/short/")
IP=$(curl -s --retry 3 --retry-delay 10 ipecho.net/plain)
while [ -z "$IP" ] # If no IP found yet, keep trying!
do
sleep 30
IP=$(curl -s --retry 3 --retry-delay 10 ${arr[$(( RANDOM % ${#arr[@]} ))]})
done
echo -n "$IP" > /root/clientIP.txt #puts ip address in clientIP.txt
echo "Our address is $IP"
要增强鲁棒性(例如,其中一项服务更改了格式),可以使用以下功能检查
$IP
是否为有效IP:# Verify that the parameter passed is an IP Address:
# http://zindilis.com/blog/2013/05/10/bash-check-that-string-is-ip.html
# @Author: Marios Zindilis
# @License: Creative Commons Attribution-ShareAlike 4.0 International License.
# @Date: 2013-05-10
function is_IP() {
if [ `echo | grep -o '\.' | wc -l` -ne 3 ]; then
echo "Parameter '' does not look like an IP Address (does not contain 3 dots).";
exit 1;
elif [ `echo | tr '.' ' ' | wc -w` -ne 4 ]; then
echo "Parameter '' does not look like an IP Address (does not contain 4 octets).";
exit 1;
else
for OCTET in `echo | tr '.' ' '`; do
if ! [[ $OCTET =~ ^[0-9]+$ ]]; then
echo "Parameter '' does not look like in IP Address (octet '$OCTET' is not numeric).";
exit 1;
elif [[ $OCTET -lt 0 || $OCTET -gt 255 ]]; then
echo "Parameter '' does not look like in IP Address (octet '$OCTET' in not in range 0-255).";
exit 1;
fi
done
fi
return 0;
}
#16 楼
ifcfg.me支持:curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me
IPv4和IPv6,还有更多带有curl的东西:ifcfg.me/?
评论
nslookup方法与Krinkle答案中的dig方法有何关系?他们俩都使用DNS,对吗?因此,我可以通过一些选项进行挖掘以使其检索与nslookup在此处执行的相同DNS记录吗?
–詹姆斯·海格(James Haigh)
2015年4月29日在8:09
是的,您可以使用dig + short。 @ ifcfg.me,如果你愿意
–恩
2015年5月1日18:22
#17 楼
我为家人提供了云服务,我做了这个快速脚本,每天早上5点在cron
中运行,因为我很便宜,不会购买静态IP。 它获取公共IP,并将其通过电子邮件发送给我的用户。以超链接格式发送电子邮件,因此我的妈妈不必键入端口或其他任何内容。也许其他人可以使用它。
#!/bin/bash
ipvariable=$(wget http://ipecho.net/plain -O - -q);
echo "Today the location is http://$ipvariable:123456/foldertheyreach" | mail -s "From your friendly cloud service provider" user1@someemail.com, user2@ect.com
#18 楼
这将在弹出窗口中显示当前ip地址:zenity --info --text "$(curl -s icanhazip.com)"
#19 楼
我已经设置了将IP地址返回为JSON / XML或纯文本的服务。您可以在这里找到它们http://ipof.in/txt
与/ json和/ xml相同的URL也会为您提供其他格式
如果需要HTTPS,则可以使用带有https前缀的相同URL。优点是,即使您使用的是Wifi上网,您也将获得公共地址。
因此,简单的别名myip =“ curl https://ipof.in/txt”将获得您的IP
#20 楼
w3m Plaintext-Browser非常适合bash。您可以使用grep
和tail
缩短答复,如下所示:w3m -no-cookie -dump "http://www.whatismyip.com/" | grep -A 1 -m 1 "Your IP:" | tail -n 1
#21 楼
另外,您也可以使用STUN,它被发明为自动回答此问题,并广泛用于互联网通信中,例如通过SIP和WebRTC。使用stunclient(在debian / ubuntu上执行
apt-get install stuntman-client
)只需执行以下操作:$ stunclient stun.services.mozilla.com
Binding test: success
Local address: A.B.C.D:42541
Mapped address: W.X.Y.Z:42541
其中
A.B.C.D
是IP地址您的计算机在本地网络上的位置,并且W.X.Y.Z
是IP地址服务器,例如从外部(以及您正在寻找的)网站看到的网站。使用sed
可以将上面的输出减少到仅一个IP地址:stunclient stun.services.mozilla.com |
sed -ne "s/^Mapped address: \(.*\):.*$//p"
对于使用基本命令行工具但不使用其他方法的STUN查找,请参见
我的答案在AskUbuntu上使用(旨在作为一种有趣的练习,不用于生产用途)。
#22 楼
使用curl击打shtuff.it的IP服务curl -s https://shtuff.it/myip/short
评论
301永久移动
– McPeppr
16年11月8日在9:44
现在链接已死
– Eugene Bujak
17年4月24日在18:50
#23 楼
即使在转换DNS地址的NAT路由器后面也使用DNS请求,这可以起作用:$ dig +short -t txt o-o.myaddr.l.google.com @ns1.google.com | cut -d'"' -f2
x.y.z.t
,或者,您可以使用HTTP请求方法代替:
$ curl -s ipinfo.io/ip
x.y.z.t
评论
为什么您会推荐一个?
–roaima
18年11月6日在7:10
@roaima是的,这取决于每个用户。
–SebMa
18年11月8日在10:40
#24 楼
如果您中的任何一个托管面向Internet的Web服务器,则只需制作一个简单的页面即可显示请求者的IP地址,例如在PHP中:<?php
echo $_SERVER['REMOTE_ADDR'];
?>
在服务器上部署它。例如在
http://mydomain.com/whatismyip.php
处,然后使用标准的curl技巧将其检索:curl -s http://mydomain.com/whatismyip.php
请注意,如果服务器执行任何重定向(例如,从HTTP到HTTPS),您将获得重定向响应而不是您的IP地址。因此,请正确处理curl请求。
这种方法的优点是,该服务不会像您免费服务那样经常从您的身下移动或消失。缺点显然是它的速度可能会变慢,除非您拥有一些高端主机。
#25 楼
只有ip.tyk.nu通过http返回正确的IP,而没有https。这里还有一些返回我们的公共IP并可以执行https的http站点。我在这里了解到,正如一些人所说,在无线链接上使用https而不是http将绕过IP的ISP修改。欧文·霍夫曼(Erwin Hoffman)向dnscache添加了“曲线”加密的dns,我可以尝试使用dig,因为这里有这个。myip()shell func可以查询http网站列表或使用https:
# ~/bin/.bash/.ifaces https://pastebin.com/DiPUdqPJ
myip() {
[[ "" =~ -s ]] && s='https://' || s=''
( for site in ipaddr.pub/cli ipecho.net/plain icanhazip.com ifconfig.me \
ipconfig.in/ip ident.me bot.whatismyipaddress.com diagnostic.opendns.com/myip \
checkip.amazonaws.com trackip.net/ip api.ipify.org tnx.nl/ip ip.tyk.nu \
l2.io/ip wgetip.com
do echo "$site "
wget -qO- ${s}$site
echo
done
wget -qO- ${s}checkip.dyndns.org |\
sed -n -E '/IP Address/s/^.*:[\t ]+([^<]+).*$/checkip.dyndns.org \n/p' ) |\
sed -n -E '/^$/d;H;${g;s/^[\n]+//;s/( )\n/ /g;p;}'
wget -qO- ${s}ipinfo.io | sed '1s/.*/ipinfo.io:/;$d;'
}
myip (without https):
ipaddr.pub/cli 166.137.143.2
ipecho.net/plain 166.137.143.2
icanhazip.com 166.137.143.2
ifconfig.me 166.137.143.2
ipconfig.in/ip 166.137.143.2
ident.me 166.137.143.2
bot.whatismyipaddress.com 166.137.143.2
diagnostic.opendns.com/myip 166.137.143.2
checkip.amazonaws.com 166.137.143.2
trackip.net/ip 166.137.143.2
api.ipify.org 166.137.143.2
tnx.nl/ip 166.137.143.2
ip.tyk.nu 107.77.201.2 (without https but this one gets it)
l2.io/ip 166.137.143.2
wgetip.com 166.137.143.2
checkip.dyndns.org 166.137.143.2
ipinfo.io:
"ip": "166.137.143.2",
"hostname": "mobile-166-137-143-2.mycingular.net",
"city": "Dallas",
"region": "Texas",
"country": "US",
"loc": "32.7831,-96.8067",
"org": "AS20057 AT&T Mobility LLC",
"postal": "75270",
"timezone": "America/Chicago",
"readme": "https://ipinfo.io/missingauth"
myip -s (with https):
ipaddr.pub/cli 107.77.201.2
ipecho.net/plain 107.77.201.2
icanhazip.com 107.77.201.2
ifconfig.me 107.77.201.2
ipconfig.in/ip 107.77.201.2
ident.me 107.77.201.2
bot.whatismyipaddress.com 107.77.201.2
diagnostic.opendns.com/myip 107.77.201.2
checkip.amazonaws.com 107.77.201.2
trackip.net/ip 107.77.201.2
api.ipify.org 107.77.201.2
tnx.nl/ip 107.77.201.2
ip.tyk.nu 107.77.201.2
l2.io/ip 107.77.201.2
wgetip.com 107.77.201.2
ipinfo.io:
"ip": "107.77.201.2",
"hostname": "mobile-107-77-201-2.mobile.att.net",
"city": "Dallas",
"region": "Texas",
"country": "US",
"loc": "32.7831,-96.8067",
"org": "AS20057 AT&T Mobility LLC",
"postal": "75270",
"timezone": "America/Chicago",
"readme": "https://ipinfo.io/missingauth"
评论
外部IP是什么意思?到目前为止,这两个答案使用HTTP。响应最终可能是您ISP的代理服务器的IP。 (可能是您想要的。)@billpg:我的意思是NAT路由器的IP
然后,您将需要一个使用HTTPS的what-is-my-IP Web服务。 las,我什么都不知道。
@billpg ipcheckit.com
checkip.amazonaws.com使用知名提供商的服务