我可以使用ifconfig或hostname -i命令找到我的IP地址。
但是如何找到我的公共IP?
(我有一个静态公共IP,但是我想使用unix命令找到它)
我可以使用ifconfig或hostname -i命令找到我的IP地址。
但是如何找到我的公共IP?
(我有一个静态公共IP,但是我想使用unix命令找到它)
Answers:
curl ifconfig.me
curl ifconfig.me/ip
(仅用于ip)
curl ifconfig.me/all
(有关更多信息,需要时间)
有关更多命令,请访问:http : //ifconfig.me/#cli_wrap
curl http://checkip.amazonaws.com/
您可以要求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
。
dig @208.67.222.220 myip.opendns.com +short
为了直接获取ip,而不必经历整个答案。
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)。如果Google正确启用,则为一天的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
dig +short AAAA myip.opendns.com @2620:0:ccc::2
。
-4
或-6
是否需要特定的IP版本。
我为此编写了一个简单而快速的Web服务。
curl ident.me
您可以要求提供IPv4:
curl v4.ident.me
或IPv6:
curl v6.ident.me
该API记录在http://api.ident.me/
一种方式:http : //www.whatismyip.com/
如果
那么您只需解析ifconfig的输出以获取接口的IP地址(“ inet addr:”部分),即可获取所有接口的IP地址列表。不在私有范围内的一个IP地址(请参阅http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses)是您的公共IP地址。
相同的列表也可以通过以下方式获得
ip addr show
这可能更容易解析。
如果您没有直接的Internet连接(NAT等),则没有外部帮助就无法找到您的公共IP地址(因为您的计算机不知道)。然后,您必须像其他答案一样进行操作。
通过使用专为NAT穿越设计的STUN协议,我采取了一些不同的方法。如果您使用Ubuntu,则可以通过输入以下命令安装软件包“ stun”:
sudo apt-get install stun
该软件包安装了您可能不需要的STUN服务器,但它也附带了我用来解决此问题的STUN测试客户端。现在,您可以使用一个(不是那么简单)的命令来检索公共IP:
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
现在,它的作用是:stun与公共STUN服务器“ stunserver.org”联系,并用您的公共IP返回答案,其余命令只是从输出中过滤出IP。
text/html
伪API返回的结果很好-当然不是XML或JSON。text/plain
也许,但它完全可以用作text/html
。
wget -q -O - http://wgetip.com/
Google现在显示您的公共IP地址:http : //www.google.com/search?q= ip
User-Agent
提供给页面的字符串显示您的IP地址。使用Firefox,它可以工作;但是SeaMonkey禁用了“ Firefox”字符串(通过将“ general.useragent.compatMode.firefox”设置为false),却突然没有。完全不知道为什么Google明确地仅对Firefox而不是对任何Gecko才启用这样的功能,因为还有许多其他基于Gecko的桌面浏览器同样兼容,包括SeaMonkey。
最简单的方法是按照建议使用http://ifconfig.me/。
在此页面上,您将知道要用于检索什么信息的命令。
对于IP:
卷曲ifconfig.me要么
卷曲ifconfig.me/ip
对于公共主机名:
卷曲ifconfig.me /主机
有关XML文件中的所有信息:
卷曲ifconfig.me/all.xml
等等...只需查看http://ifconfig.me
我经常在很多设备上进行此操作,因此我在服务器上做了自己的两项服务:
Web服务器根目录下的php文件:
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
在外壳上的用法:
$ curl -4 mydomain.com
79.22.192.12
也可以使用ipv6:
$ curl mydomain.com
2a01:e34:ee7d:180::3
使用netcat:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
在思科路由器上:
router#more http://myserver.com/index.php
79.22.192.12
使用自定义的telnet服务器进行快速破解:xinetd生成/ usr / bin / env:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
然后远程登录到它:
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
与路由器的工作原理相同:
router#telnet myserver.com
79.22.192.12
这样,如果通信中涉及到一些nat或代理,并且您想从显示的IP中知道,则可以使其在内部网络上工作。
它不需要任何第三方服务。
为了避免依赖外部资源,我使用Expect远程登录到路由器并获取其公共接口的IP地址。这是一个期望脚本示例:
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
然后,我像这样执行上面的脚本以获取公共IP:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
当然,这是基于这样的假设:我可以使用ifconfig命令对路由器及其基于Linux的路由器进行管理员访问。
与许多其他问题重复(因此我以-1票通过)。
一个简单的shell脚本解决方案可以在这里找到:
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
可在Linux,FreeBSD,SunOS和Apple Darwin(稍作修改)上工作。
您可以只使用外壳程序来检查您的外部IP,也可以使用外部提供程序
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
输出
lynx --dump http://www.whatismyip.com/ | grep -o'[0-9]。* \。[0-9]。* \。[0-9]。* \。[0-9]。*' -m1
在OS X上,这里有两种简单的解决方案,可同时获取私有IP和公共IP(如果使用LaunchBar,则具有奖励代码)。
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"