首页 > 所有文章 > 行业 >文章详情

批处理 自动获取ip地址(本地ip)

时间:2023-10-28 21:42:30 浏览量:28

如今,家庭中的网络设备越来越多,除了台式电脑、笔记本、手机、机顶盒、平板这些常备产品,高端一点的还有AC、AP、软路由等。多样化的设备给我们带来了丰富多彩的体验,也带来了管理方面的困扰。为方便、高效地解决这些问题,技术人的手艺派上了用场。今天介绍一个本人实际生活中用Python解决群晖外网访问的案例,简单、好用、有疗效。


一、什么是群晖

先介绍下群晖,群晖是具有存储、分享与同步文件和多媒体娱乐的功能的NAS服务器,同型号的高端配置可以安装虚拟机、docker,可挖掘的玩法如私人专享且多端同步的RSS阅读器、个人书库、文件批处理脚本等等。家庭普通应用主要以照片、视频下载和保存为主。



群晖的很多玩法都离不开外网访问这个功能,即通过外网操控位于家庭内网的群晖。你可以坐在办公室让家里的群晖下载高清电影,待下班回家后,电影已下载完毕,直接享受高清的爽快。也可以在旅游的时候随时随地地将手机照片统统上传至家里的群晖,确保可以毫无顾忌地清空手机内存继续拍拍拍。没错,私有云。



二、问题场景

外网访问有很多方法,如花生壳、群晖自带的QuickConnect等,大部分人用的是群晖DDNS,方便、稳定、快速,DDNS通过手动指定IP地址和域名以达到外网访问目的。这里需要找电信要一个公网的静态IP地址(打10000号找人工,说家里要装NAS或摄像头,一般都会给)。



不过自从我家里添置了软路由后,之前找电信开通的公网IP不知何时变成了动态地址,隔两三天IP就会变,直接导致我的一个PT账号被封。。。每次从外部访问不了群晖的时候都需要回家在内网重新设定DDNS的IP。多次打电话向电信反应情况,客服都回答已经是公网了,显然就是公家搞不定了。。


怎么才能解决群晖公网IP随机变动的问题呢?


三、解决思路

既然IP随机变动我控制不了,那我就控制群晖自动匹配外网IP,初步思路为:首先获取外网IP(我是通过IP138获取的);接着将获取的外网IP直接写入群晖DDNS;定期执行前面的步骤。


1、获取外网IP

自己家庭内部的外网IP如何获取呢?ipconfig一般只能看到本机的内网地址,外网IP可以通过互联网的一些公开接口查询,IP138就是这样一个接口。



然后打开浏览器开发者工具,发现显示IP的地方有一个特别的URL:http://2021.ip138.com。



打开这个地址,发现是个只显示IP的“干净”页面,对于我们抓取IP特别友好。于是用python的requests库捕获该页面,解析过程中只需要配置简单的ua,非常友好。



接下来解析页面元素,提取IP字符串。



2、将IP写入群晖DDNS


群晖中DDNS的IP一般在这里修改。



但要通过代码修改它的话怎么办呢?不会要用selenuim这么麻烦吧。。对于群晖这种模块化平台,应该会有专门的配置文件,那凭感觉找找,先从/etc目录开始。



发现一个ddns.conf的文件,有点像,打开看看,果然是它,居然一下就找到了,哈哈。。。



接下来只需要将新获取的IP覆盖写入ddns.conf中的IP即可。



3、重复执行前面的步骤

因为外网IP动态更替,需要随时获取更新,所以最好执行一个定时任务。这里可以用 APSScheduler 等定时库,但解决问题一定是越简单越不会出错。既然是群晖的问题,那就用群晖自带的定时任务去执行就行了。

根据自己的使用频率,设定为每12小时更新,同时也避免了频繁请求IP138。



四、总结

通过学习python,解决了生活中出现的实际问题,虽然代码本身很简短,但也正体现了python快捷、方便的特性。另外,说到底python也只是一个编程工具,它是为解决问题服务的,有现成的轮子就没必要自己造,有现成的功能就没必要自己死磕,拿来即用,方便、稳定也高效。目前该代码我仍在使用,没有出现问题,群晖也一直稳定运行。需要代码的同学可以关注我的公众号:Python生活志,后台回复0111获取。