用python检测电脑IP地址是否发生变化并提醒自己

前言

有时候我们需要电脑的IP地址进行远程访问或者作其他用途,倘若自己的IP是动态分配且无法固定的话,某一时候IP地址突然变更了而自己不知道那倒是挺折腾人的。特别是在别的地方想要远程自己的电脑的时候,发现IP地址不对,真让人头疼,因此写个脚本程序,定时检查一下电脑IP地址,一旦发生变化就提醒自己。

实现过程

获取IP地址
获取IP地址的方式有很多,并且看是需要获取公网IP还是内网IP,方式都不一样。
这篇文章以windows系统cmd终端下,输入命令ipconfig得到的IP地址为例。

在Windows终端输入命令:ipconfig
用python检测电脑IP地址是否发生变化并提醒自己_第1张图片
我们就是要获得这个地址。

接下来我们用python实现:

  • 所用到的库:os库,re
  • 所用到的函数:os.popen()

os.popen()可以代替我们在终端输入命令,并把结果通过管道传送过来
os.popen()在Linux上也是一样用,不过Linux获取ip地址的命令是ifconfig

python获取电脑IP地址的代码如下

import os

fp = os.popen('ipconfig')
txt = fp.read()
print(txt)

脚本代码运行输出结果如下:
用python检测电脑IP地址是否发生变化并提醒自己_第2张图片
获取的结果和自己手动查看是一样的。

我们的目的是获取IPv4地址,接下来用正则表达式去匹配它
我这儿显示的是局域网的地址,前面192.168.1.部分都是固定的,所以可以根据这个特点进行匹配

import re
ip = re.search(r'192\.168\.1\.\d{1,3}',txt).group()
print(ip)

如果你的ip地址是172开头或者别的地址,请自己修改正则表达式。

获取到IP地址之后,我们要跟以前的IP地址比较,看看是否发生了变化,

  • 方式一:可以在脚本所在目录下建一个文本文件,里面写入以前的IP地址,每次读取这个文本文件即可,如果IP地址不一样,就把新的IP地址写入文本保存
  • 方式二:我们直接把IP地址保存在脚本代码.py文件的第一行。

我们要实现脚本自动化运行,如果需要多携带一个文本文件,况且文本里面的数据就只为了保存一个IP地址,显得就臃肿了一些。所以,采用方式二更美观。

方式二的思路:

  1. 把IP赋值给一个变量并放在代码的第一行,第二行开始才是代码正文
  2. 获取到IP之后,如果IP有发生变化,用open()函数读取本身代码文件,把新的ip地址写入第一行,再把第二行之后的代码重新写入脚本。
  3. 再对用户提示IP地址已经发生变化。

完整代码

ipaddr = "192.168.1.14"
import os
import re

try:
    txt = os.popen('ipconfig').read()
    ip = re.search(r'192\.168\.1\.\d{1,3}',txt).group()  # 请检查正则表达式是否能匹配自己的IP地址
    if ip != ipaddr:
        with open('my_ip.py', 'r+', encoding='utf-8') as fp:
            # my_ip.py是本程序脚本文件的文件名
            code = fp.readlines()[1:]
            fp.seek(0, 0)
            fp.truncate(0)
            fp.write('ipaddr = "%s"\n' % ip)
            for c in code:
                fp.write(c)
            input('请注意,IP地址发生变化:%s' % ip)
except AttributeError:
    input('可能是正则表达式错误,请检查')
except FileNotFoundError:
    input('文件名有误,请检查')
except:
    input('程序出现错误,请检查')

为什么要用input()来打印信息?
因为直接用python解释器来运行脚本代码的时候,程序报错或运行完成之后会直接退出,那样我们将看不到结果,所以用input()等待用户输入,程序就不会结束了。

现在,脚本文件已经制作完成。只要定时运行脚本即可,如果IP地址发生变化,就会进行提醒。

虽然我们可以在代码中用死循环一直定时检查ip地址,但为了节省内存,不采取这个方式。

Windows系统有一个功能:任务计划程序,可以制定定时任务,可以实现定时提醒、定时关机、定时执行程序等
制定一个任务计划就可以定时运行代码了。

如何制定任务计划程序可以参考以下文章:

  • https://baijiahao.baidu.com/s?id=1653154035182486818&wfr=spider&for=pc
  • https://jingyan.baidu.com/article/6525d4b11b7e2fed7c2e9451.html
  • https://blog.csdn.net/mao_mao37/article/details/82592603

这里实现的提醒方式只是在电脑上进行弹窗,当然,可以封装得更高级,比如发送邮件提醒你?发微信消息提醒?那就自己去实现啦。

总结

  • os.popen()可以获得系统执行命令的返回值
  • 简单的持久化数据可以保存到代码文件的开头,需要用的时候读取代码文件就能得到
  • Windows的任务计划程序可以帮我们定时运行程序

你可能感兴趣的:(python,python)