当前位置: 首页 > news >正文

编写Python脚本在域名过期10天内将域名信息发送到钉钉

1、config.json配置文件

{"dingtalk-webhook": "https://oapi.dingtalk.com/robot/send?access_token=XXXXXXXXXXXXXX","secret": "XXXXXXXXXXXXXXXXXXXXXX","domains": ["www.advd.tel","dre.dfefer.cn:8443"]
}

2、python正文

import json
import datetime
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
import argparse
import whois
import tldextract
import osCONFIG_FILE = 'config.json'   # 你的配置文件路径
ALERT_DAYS = 10               # 小于多少天触发告警def load_config(config_file):"""加载配置文件"""if not os.path.exists(config_file):print(f"[ERROR] 配置文件不存在: {config_file}")sys.exit(1)with open(config_file, 'r', encoding='utf-8') as f:return json.load(f)def sign_dingtalk(secret):"""生成钉钉安全签名"""timestamp = str(round(time.time() * 1000))string_to_sign = f'{timestamp}\n{secret}'hmac_code = hmac.new(secret.encode('utf-8'),string_to_sign.encode('utf-8'),digestmod=hashlib.sha256).digest()sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))return timestamp, signdef send_dingtalk_message(webhook, secret, message):"""发送钉钉告警消息"""timestamp, sign = sign_dingtalk(secret)url = f"{webhook}&timestamp={timestamp}&sign={sign}"headers = {'Content-Type': 'application/json'}data = {"msgtype": "text","text": {"content": message}}try:resp = requests.post(url, headers=headers, data=json.dumps(data))resp.raise_for_status()print(f"[+] 已发送钉钉告警: {message}")except Exception as e:print(f"[!] 发送钉钉失败: {e}")def get_root_domain(domain):"""提取顶级域名"""ext = tldextract.extract(domain)return f"{ext.domain}.{ext.suffix}"def check_domain_expiry(domain):"""获取域名过期时间"""try:w = whois.whois(domain)expiry_date = w.expiration_dateif isinstance(expiry_date, list):expiry_date = expiry_date[0]return expiry_dateexcept Exception as e:print(f"[!] 获取 {domain} 过期时间失败: {e}")return Nonedef main():# 添加命令行参数parser = argparse.ArgumentParser(description="Domain Expiry Monitor")parser.add_argument("--config-file", required=True, help="Path to configuration JSON file")args = parser.parse_args()config = load_config(args.config_file)#config = load_config()webhook = config["dingtalk-webhook"]secret = config["secret"]domains = config["domains"]alerts = []now = datetime.datetime.now()for domain in domains:root_domain = get_root_domain(domain)expiry = check_domain_expiry(root_domain)if not expiry:continueif isinstance(expiry, datetime.date):expiry = datetime.datetime.combine(expiry, datetime.time.min)days_left = (expiry - now).daysprint(f"{domain} 到期时间: {expiry}, 剩余 {days_left} 天")if days_left < ALERT_DAYS:alerts.append(f"⚠️ 域名 {domain} 即将过期,仅剩 {days_left} 天!(到期日: {expiry.date()})")if alerts:message = "\n".join(alerts)send_dingtalk_message(webhook, secret, message)else:print("✅ 所有域名都在安全期内。")if __name__ == '__main__':main()

3、执行命令

05 00 * * * cd /root/domain && /usr/bin/python3 domain_expiry_monitor.py --config-file config.json /root/domain/domain_expiry_monitor.log 2>&1

4、告警信息图示
在这里插入图片描述

http://www.dtcms.com/a/469945.html

相关文章:

  • Flutter 开发环境安装
  • 中科时代建设官方网站设计品牌logo
  • 【C++】模板 - - - 泛型编程的魔法模具,一键生成各类代码
  • Vue3知识详解(一)(基础知识部分)
  • 网站网页链接网站变灰色 html
  • Docker核心技术:深入理解网络模式 ——Bridge模式全栈实战与性能调优
  • Spring Web MVC构建现代Java Web应用的基石
  • 如何做tiktok的数据排行网站手机网站页面大小
  • 单片机睡眠模式详解:睡眠、停止与待机
  • 长春做网站公司哪家好做统计图的网站
  • 【Android Gradle学习笔记】第一天:认识下Gradle
  • 一级a做爰片免费网站孕交视频教程wordpress添加作者名字
  • 《基础算法递归-----汉诺塔问题》
  • 网站前台设计模板荆州网站建设 松滋网站建设
  • 【agent】AI 数字人构建8:本地edge-tts实现 tts
  • 做网站的法律贵州门户网站建设
  • 创建公司网站需要什么外贸网站系统
  • MySQL字符集与排序规则全解析
  • 在云计算环境中实施有效的数据安全策略
  • 建设电子商务网站的意义巴中市建设厅官方网站
  • DES 加密算法:核心组件、加解密流程与安全特性
  • 游戏怎么做充值网站天津市建设工程监理公司网站
  • 01-Python简介与环境搭建-练习
  • Flink面试题及详细答案100道(81-100)- 部署、优化与生态
  • 机器学习实践项目(一)- Rossman商店销售预测 - 预处理数据
  • spring-Integration
  • SQL核心语言详解:DQL、DML、DDL、DCL从入门到实践!
  • 相亲网站怎么做的免费做网站tk
  • 在阿里巴巴上做网站要多少钱怎样制作自己的app
  • 数据湖Hudi - 二级索引:配置方法、存储位置与自动构建全解析(附电商实操案例)