前言

由于一定的原因,本人内网DHCP得到的内网地址总是会不断变化,严重影响内网各项服务的正常工作

在找遍GitHub也没有找到一个可靠的跨平台的支持clooudflare的ddns脚本之后,博主决定自己动手写一个脚本

在这里感谢cloudflare-ddns-client项目

开始

查看了该项目的代码之后,发现该项目并不能很好的运用在本人的环境中,主要的问题在于如何获取内网的ip地址

在这里我决定使用python的psutil库来解决该问题,psutil库同时也提供了跨平台能力

贴一下获取地址的代码

1
2
3
4
5
6
7
def get_ip(prefix):
interfaces = psutil.net_if_addrs()
for i, k in interfaces.items():
for a in k:
if a.family == socket.AF_INET:
if prefix in a.address:
return a.address

prefix是ip的前几段,例如10.0

因为本人环境比较特殊,每次获取到的ip都是前几段相同的,所以用这样的方式来解决获取想要的ip的问题

下面是获取ipv6

1
2
3
4
5
6
7
def get_ipv6():
interfaces = psutil.net_if_addrs()
for i, k in interfaces.items():
for a in k:
if a.family == socket.AF_INET6:
return a.address
return None

也是同样的方案,但是并没有考虑多网卡的问题

socket.AF_INET6socket.AF_INET是标准库socket里的常量,用来表示类型

原代码已上传

项目地址