用于公共IP地址的Linux命令

时间:2014-08-05 14:59:24

标签: linux shell terminal command

我希望命令获取Linux机器(亚马逊)external / public IP地址。

我尝试了hostname -I以及来自博客和stackoverflow的其他命令,如

ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p'

还有更多。但他们都给了我internal IP地址。

然后我发现了一些为此提供API的网站。

示例:curl http://ipecho.net/plain; echo

但我不想依赖第三方网站服务。那么,是否有任何命令行工具可用于获取external IP地址?

13 个答案:

答案 0 :(得分:2)

除了127.0.0.1之外,这将打印IPv4地址:

ifconfig | awk '/inet / && $2 != "127.0.0.1" { print $2 }'

更具体地说,我建议你指定像

这样的界面
ifconfig eth0 | awk '/inet / { print $2 }'

答案 1 :(得分:2)

清洁输出

ifconfig eth0 | awk '/inet / { print $2 }' | sed 's/addr://'

答案 2 :(得分:1)

您可以使用此脚本

# !/bin/bash 
#
echo 'Your external IP is: '
curl -4 icanhazip.com

但这依赖于第三方,尽管是可靠的第三方。 我不知道你是否可以在没有询问某人/某个网站(即某些第三方)的情况下获取外部IP,但我知道什么。

你也可以跑:

curl -4 icanhazip.com

这与-4在Ipv4中获取输出的命令的作用相同

答案 3 :(得分:1)

最简单的是: curl ifconfig.me

答案 4 :(得分:0)

它可能无法在亚马逊上运行,因为您可能正在使用NAT或服务器访问世界其他地方(并且您也可以使用它)。如果你无法ssh进入ifconfig中列出的ip,那么你要么在另一个网络中,要么没有启用ssh。

答案 5 :(得分:0)

您可以使用此命令获取公共IP和私有IP(第二行是私有IP;第三行是公共IP。)

ip addr | awk '/inet / {sub(/\/.*/, "", $2); print $2}'

答案 6 :(得分:0)

我建议您使用命令external-ipsudo apt-get install miniupnpc)因为它(我几乎可以肯定)使用upnp协议来询问路由器而不是询问外部网站所以它应该更快,但当然路由器必须启用upnp。

答案 7 :(得分:0)

这是我能做的最好的事情(仅依赖于我的ISP):

ISP=`traceroute -M 2 -m 2 -n -q 1 8.8.8.8 | grep -m 1 -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'`
extIP=`ping -R -c 1 -t 1 -s 1 -n $ISP | grep RR | grep -m 1 -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'`
echo $extIP

或者,在一行中功能相同:

ISP=`traceroute -M 2 -m 2 -n -q 1 8.8.8.8 | grep -m 1 -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'` | ping -R -c 1 -t 1 -s 1 -n $ISP | grep RR | grep -m 1 -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' 

将其保存到临时&隐藏文件将> .extIP添加到最后一行的末尾,然后cat .extIP查看它。

如果您的ISP地址永远不会改变(说实话,我不确定是否会这样),那么您可以获取一次,然后用第二行替换$ ISP

这已在Mac上测试并取得了巨大成功。 到目前为止,我发现的对linux的唯一调整就是traceroute" -M" flag可能需要" -f"代替 它严重依赖于ping" -R" flag,告诉它发回" Record Route"信息,主机始终不支持。但值得一试!

在不依赖任何外部服务器的情况下执行此操作的唯一方法是从卷曲中调整调制解调器的状态页面...我已经使用我们的前沿DSL调制解调器成功完成了此操作但它很脏,很慢,不可靠,并且需要硬编码调制解调器的密码。 这是"过程"为此:

curl http://[user]:[password]@[modem's LAN address]/[status.html] | grep 'WanIPAddress =' | grep -m 1 -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

获取原始html,搜索包含" WanIpAddress ="的任何行。 (更改它以使其适合您的调制解调器的结果),然后将这些结果缩小为IPv4样式地址。

希望有所帮助!

答案 8 :(得分:0)

正如其他人所说,我们必须依赖第三方服务,我觉得使用它并不安全。所以,我在this answer上找到了亚马逊API:

$ curl http://169.254.169.254/latest/meta-data/public-ipv4

54.232.200.77

有关详细信息,请https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-retrieval

答案 9 :(得分:0)

您可以简单地做到这一点:

curl https://ipinfo.io/ip

答案 10 :(得分:0)

超级简单的方法是使用扫视工具。您可以使用以下方法在 Ubuntu 上安装它:

$ sudo apt install glances

然后使用它:

$ glances

在终端的顶部,它会突出显示您的公共 IP 地址,以及有关您的系统的许多其他信息(例如 htop 的作用)和网络状态。

答案 11 :(得分:0)

对于格式化输出使用:-

dig TXT +short o-o.myaddr.l.google.com @ns1.google.com

它会给你这样的格式化输出

"30.60.10.11"

也仅供参考,

digcurlwget

更快

答案 12 :(得分:0)

只要你有 ifconfig 和 curl,下面就可以工作。

curl ifconfig.me