【问题标题】:Linux command for public ip address用于公共 IP 地址的 Linux 命令
【发布时间】:2014-09-28 07:21:28
【问题描述】:

我想要命令获取 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 地址?

【问题讨论】:

    标签: linux shell terminal command


    【解决方案1】:

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

    curl ifconfig.me
    

    【讨论】:

      【解决方案2】:

      对于格式化输出,请使用:-

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

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

      "30.60.10.11"
      

      也仅供参考,

      digcurlwget

      更快

      【讨论】:

        【解决方案3】:

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

        $ sudo apt install glances
        

        然后使用它:

        $ glances
        

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

        【讨论】:

          【解决方案4】:

          你可以这样做:

          curl https://ipinfo.io/ip
          

          【讨论】:

            【解决方案5】:

            正如其他人所建议的,我们必须依赖第三方服务,我觉得使用它并不安全。所以,我在 this answer 上找到了 Amazon 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

            【讨论】:

              【解决方案6】:

              这是我能做的最好的(仅依赖于我的 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" 标志可能需要改为 "-f" 它在很大程度上依赖于 ping 的“-R”标志,它告诉它发送回主机并不总是支持的“记录路由”信息。但值得一试!

              不依赖任何外部服务器的唯一另一种方法是通过卷曲调制解调器的状态页面来获取它...我已经使用我们的前沿 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 样式地址。

              希望有帮助!

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                  【解决方案8】:

                  最简单的做法是: curl ifconfig.me

                  【讨论】:

                  • 是的,正如我在问题中提到的那样,它工作正常,但我不想依赖这个第三方服务。如果该服务器将来停止此服务怎么办?
                  【解决方案9】:

                  你可以使用这个命令获取公网ip和私网ip(第二行是私网ip;第三行是公网ip)

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

                  【讨论】:

                    【解决方案10】:

                    你可以使用这个脚本

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

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

                    你也可以直接运行:

                    curl -4 icanhazip.com
                    

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

                    【讨论】:

                      【解决方案11】:

                      更干净的输出

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

                      【讨论】:

                      • 返回亚马逊内部 IP 地址
                      • 返回分配给您的 eth0 设备的 IP 地址。因此,如果您的服务器托管在 Amazon 上,并且被分配了一个内部 IP 地址,并且由于 Amazon 实例使用的是 NAT,那么您就会看到。如果您想要一种可靠的方式来获取您的外部公共 IP 地址,请使用 ifconfig.me 等外部服务之一。
                      【解决方案12】:

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

                      【讨论】:

                        猜你喜欢
                        • 2012-12-04
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-02-11
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多