个人服务器外网地址监测

个人服务器情况

先简单介绍一下我的个人服务器的情况,如果有情况类似的朋友可以参考一下,首先我并没有购买云服务器,而是用一台老旧的笔记本搭建的一台服务器,放在自己家中用来学习和练习项目,幸运的是我家分到了外网公有IP地址,只不过是通过PPPOE拨号进行上网,因此这个地址不是静态IP,是动态IP,然后服务器主机通过一个家用的无线路由器联网。

问题介绍

我在阿里云购买了一个域名,域名解析需要与服务器的外网IP绑定,但是由于我的IP会动态变化,所以每当IP改变,我要手动修改,但再修改之前要查询到外网地址(百度查询ip或者访问ip.cn进行查询,但每次查询需要在连接到家中的网络才能进行查询,而且不知道什么时候IP变动)

解决思路

我的解决思路是让服务器每隔一段时间访问ip.cn查一下ip是否变化,如果变化就用qq邮箱发送一封邮件告诉我IP变为了多少(我有两个qq邮箱,一个用来发送邮件,一个用来接收)

代码实现

我利用python做了个简单的小程序,用来监听ip并发送邮件

import time
import smtplib
import requests
import re
from email.mime.text import MIMEText
from email.header import Header

# 发送邮件的函数,参数是要发送的IP地址
def send_email(ip):
    #使用qq邮箱
    mail_host = "smtp.qq.com" #设置qq服务器
    mail_user = "*********@qq.com" #登录账号
    mail_pass = "abcdefghijklmn" #SMTP登录的授权码

    #邮件发收方
    sender = '*********@qq.com' #发送方地址(可以用上面的mail_user)
    receivers = '*********@**.com' #接收方邮件地址

    message = MIMEText(ip, 'plain', 'utf-8') #邮件的内容
    message['From'] = Header("Leetto", 'utf-8') #发件人
    message['To'] = Header("Leon", 'utf-8') #收件人

    subject = 'IP变动提醒' #邮件主题
    message['Subject'] = Header(subject, 'utf-8')

    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, 465) #用SMTP_SSL方式连接服务器(465代表服务器端口,端口一般为465)
        smtpObj.login(mail_user, mail_pass) #登录邮箱
        smtpObj.sendmail(sender, receivers, message.as_string())
        print("Successful")
    except smtplib.SMTPException:
        print("Error:Fail to send")

if __name__ == '__main__':
    ip = ("0.0.0.0") #将ip初始化为0.0.0.0
    while True:
        text = requests.get("https://ip.cn").text #首先爬取ip.cn
        ip_text = re.search(r'\d*\.\d*\.\d*\.\d*', text) #利用正则表达式找到IP地址
        if ip != ip_text.group(0): #判断ip中的内容是否与ip.cn上的外网地址相同,若不同就记录到log中,并发送邮件通知IP变动
            with open('log.txt', 'a+') as f:
                f.write(ip_text.group(0) + '\n')
            ip = ip_text.group(0)
            send_email(ip)
        time.sleep(1800) #每个30分钟监测一次IP是否变动

总结

能力有限,水平一般,我也是参考了别人的代码,并自己做了一下修改和添加,希望能帮助到有需要的同学,其实还有很多方法可以使用,觉得我的方法不够完美的同学可以尝试其他方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leetto_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值