0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在命令行快速获取公网动态IP地址

jf_qwOiugB3 来源:通信弱电交流学习 2023-04-18 10:25 次阅读

0b214c5c-dd86-11ed-bfe3-dac502259ad0.png

如何确定公网IP地址是一个让很多家用宽带朋友们经常遇到的问题,毕竟固定IP地址总是价格不菲因而不适用于家庭宽带,而我们的电信宽带运营商(ISP)往往给我们分配的是动态IP地址,之所以称作为动态IP地址,是因为每次拨号得到的IP地址可能会不一样,还有更骚的操作就是有的运营商每天或不定期在某个时间刷新IP地址池,这样已经获得的IP地址将会被强制释放并分配新的IP地址。

这对于我们一些运行在家用带宽下的服务带来了影响——需要重新设置服务端 IP 地址,比如监控、网络存储等等,这时候 DDNS 就发挥作用的,现在大部分路由器内置了 DDNS 客户端,比如花生壳等服务客户端,但是这些客户端存在收费、不稳定以及刷新间隔小等问题,对于自己有域名的朋友可以使用 DNS 服务商的 API 自己实现 IP 更新操作,比如阿里云(Aliyun)、Cloudflare 均可以实现。

对于 DDNS 如何使用 API 更新不在本文叙述范围内,但调用 API 有个关键参数那就是公网IP地址,如何获取当前运营商分配的公网 IP地址呢?除了问路由器外(打开路由器管理界面找到 WAN 口信息)我们还可以通过一些网络服务进行检测

1使用 Shell 命令获取公网 IP 地址

浏览器方式

如果我们使用浏览器打开这个地址checkip.amazonaws.com你就会发现你的公网IP地址赫然在目,互联网上的服务器总是能够知道是什么 IP地址的客户端发起了连接,当然就可以通过这种方式获取公网 IP,同样功能的网站有很多,这里列举部分我收集到的:

https://checkip.amazonaws.com
https://api.ipify.org
https://ifconfig.me/ip
https://icanhazip.com
https://ipinfo.io/ip
https://ipecho.net/plain
https://checkipv4.dedyn.io

curl方式

在命令行下我们当然不能为这点小事随便启动浏览器,我们可以请出另外一个功能强大的工具,那就是curl,cURL 是一个利用URL语法在命令行下工作的文件传输工具,关于cURL的快速用法可以参考阮一峰的网络日志《curl 的用法指南》,这里不再详述,最简单的用法就是curl 你要请求的网址,比如curl checkip.amazonaws.com。

[root@www.lutixia.cn ~]# curl cip.cc
IP  : 171.43.148.打码
地址  : 中国  ...
运营商  : 电信
...
URL  : http://www.cip.cc/171.43.148.打码


[root@www.lutixia.cn ~]# curl ip.sb
171.43.148.打码


[root@www.lutixia.cn ~]# curl ifconfig.me
171.43.148.打码


[root@www.lutixia.cn ~]# curl  myip.ipip.net
当前 IP:171.43.148.打码  来自于:中国 。。。电信


[root@www.lutixia.cn ~]# curl ip.threep.top
171.43.148.打码

使用 dig 命令

首次在别人脚本中看到这个方式获取公网IP觉得比较新奇,命令如下:

dig+shortmyip.opendns.com@resolver1.opendns.com

这个是由OpenDNS提供的服务,如果你的主机上没有安装dig命令,对于Debian系列系统可以通过apt-get install dnsutils安装,这个命令的原理是指定resolver1.opendns.com为域名myip.opendns.com的解析服务器,为什么要指定,主要是避免 DNS 下游服务器缓存,另外这个指定的解析服务器被 OpenDNS 进行了特殊配置,其始终将域名myip.opendns.com解析为发起 DNS 请求的客户端 IP 地址,这样也就实现了查找公网 IP的功能。

这个和 cURL 方式比有什么优势呢?当然是数据量更小传输更快,毕竟使用 cURL 发起 HTTP 请求必然会导致协议头等无关信息的交换,如果启用了 HTTPS/TLS 那么还要进行加密协商,效率会比较低,当然这种方式的缺点就是 DNS 查询容易被运营商审计和过滤,稳定性略差,不过我测试下来除了偶尔查询失败外其余情况是完全 OK 的。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9046

    浏览量

    85237
  • ip地址
    +关注

    关注

    0

    文章

    296

    浏览量

    17017
  • 浏览器
    +关注

    关注

    1

    文章

    1016

    浏览量

    35294
  • 命令行
    +关注

    关注

    0

    文章

    77

    浏览量

    10382
  • Shell
    +关注

    关注

    1

    文章

    363

    浏览量

    23311

原文标题:如何在命令行快速获取公网动态 IP 地址

文章出处:【微信号:通信弱电交流学习,微信公众号:通信弱电交流学习】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    NanoPi NEO - 使用命令行查看IP 地址和主机名 - 04

    `1、 使用命令行查看IP 地址和主机名NEO 联网后,我们会需要知道它的IP 地址和设备的hostname.这个章节会告诉你们如何
    发表于 05-06 13:50

    请问如何在代码里执行命令行啊?

    请问如何在代码里执行命令行啊?比如,在命令行可以执行echo abcdefg aaa.txt生成一个aaa.txt。那么如何在程序中执行 echo abcdefg aaa.txt 这一
    发表于 10-28 10:15

    cmd网络经典命令行

    cmd网络经典命令行:
    发表于 06-11 15:17 36次下载
    cmd网络经典<b class='flag-5'>命令行</b>

    如何获取其它程序的命令行参数

    开发环境:VC6 Windows XP 测试环境:WindowsXP 我们都知道,在程序里获取命令行参数很简单,WinMain函数会以参数的形式传递给我们,或者可以调用API GetCommandLine 获取。但
    发表于 10-14 09:24 1次下载

    caxa命令行中的应用

    caxa命令行中的应用 命令行对于大多用户来说往往只是输入数据的作用,但是其中的奥妙还有很多,下面就给大家
    发表于 10-18 18:18 2284次阅读

    CMD的命令行高级教程

    CMD的命令行高级教程
    发表于 10-24 08:31 30次下载
    CMD的<b class='flag-5'>命令行</b>高级教程

    如何从命令行获取和解析参数

    这是一篇技术干货快文,能够快速阅读完。文章内容是关于如何从命令行获取和解析参数,包括SystemVerilog本身支持的系统函数和UVM提供的函数封装,并给出示例代码和仿真结果。
    的头像 发表于 05-30 14:05 2852次阅读

    【openssl】利用openssl命令行快速生成RSA私钥

    【openssl】如何利用openssl命令行快速生成RSA私钥?
    的头像 发表于 08-31 12:58 3300次阅读
    【openssl】利用openssl<b class='flag-5'>命令行</b><b class='flag-5'>快速</b>生成RSA私钥

    何在Linux命令行中格式化输出xml

    我们先前分享过一篇关于在命令行中格式化输出 json 文件的文章,今天我们再来分享一下如何在命令行中格式化输出 xml。
    的头像 发表于 01-12 17:37 1521次阅读
    如<b class='flag-5'>何在</b>Linux<b class='flag-5'>命令行</b>中格式化输出xml

    何在Linux命令行中运行Python脚本

    Python 脚本。 在本文中,我们将详细介绍如何在 Linux 命令行中运行 Python 脚本。我们将讨论以下主题:
    的头像 发表于 05-12 14:49 1664次阅读

    LabVIEW命令行调用exe传入的参数如何获取

    有些场景下,我们用LabVIEW开发的应用程序,需要通过命令行来调用,并向该应用程序传递参数,那么在程序中如何才能获取这些参数呢?
    发表于 10-11 09:28 2354次阅读
    LabVIEW<b class='flag-5'>命令行</b>调用exe传入的参数如何<b class='flag-5'>获取</b>

    linux切换到命令行模式

    在Linux中,可以通过以下步骤切换到命令行模式: 打开终端。可以在应用菜单中找到终端或命令行终端。 在终端中输入命令“exit”或“logout”,然后按回车键。 系统会提示您输入管理员密码。输入
    的头像 发表于 11-13 16:47 1738次阅读

    pycharm命令行终端运行代码

    。 PyCharm的命令行终端允许开发者在IDE中直接执行命令,并查看输出结果。通过使用命令行终端,开发者可以在不离开PyCharm的情况下运行代码、调试程序和执行其他与开发相关的任务。 在本文中,我们将详细介绍如
    的头像 发表于 11-22 11:20 4693次阅读

    eclipse怎么使用命令行

    命令行中使用Eclipse来完成一些特定的任务。本文将详细介绍如何在命令行中使用Eclipse。 首先,我们需要确保已经正确安装了JDK(Java Development Kit)和Eclipse
    的头像 发表于 12-06 11:26 2517次阅读

    idea如何输入命令行参数

    在许多软件开发和系统管理的任务中,我们经常需要向应用程序传递命令行参数。命令行参数是在运行时传递给程序的值,用于指定程序的行为和配置选项。本文将详细介绍如何在不同的编程语言和操作系统中输入命令
    的头像 发表于 12-06 15:01 1106次阅读