python腳本監(jiān)聽域名證書過期時間并通知消息到釘釘(最新推薦)
版本一:
執(zhí)行腳本帶上 --dingtalk-webhook和–domains后指定釘釘token和域名
python3 ssl_spirtime.py --dingtalk-webhook https://oapi.dingtalk.com/robot/send?access_token=avd345324 --domains www.abc1.com www.abc2.com www.abc3.com
腳本如下
#!/usr/bin/python3
import ssl
import socket
from datetime import datetime
import argparse
import requests
def get_ssl_cert_expiration(domain, port=443):
context = ssl.create_default_context()
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=domain)
conn.connect((domain, port))
cert = conn.getpeercert()
conn.close()
# Extract the expiration date from the certificate
not_after = cert['notAfter']
# Convert the date string to a datetime object
expiration_date = datetime.strptime(not_after, '%b %d %H:%M:%S %Y %Z')
return expiration_date
def send_dingtalk_message(webhook_url, message):
headers = {'Content-Type': 'application/json'}
payload = {
"msgtype": "text",
"text": {
"content": message
}
}
response = requests.post(webhook_url, json=payload, headers=headers)
if response.status_code == 200:
print("Message sent successfully to DingTalk")
else:
print(f"Failed to send message to DingTalk. HTTP Status Code: {response.status_code}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Test SSL certificate expiration for multiple domains")
parser.add_argument("--dingtalk-webhook", required=True, help="DingTalk webhook URL")
parser.add_argument("--domains", nargs='+', required=True, help="List of domains to test SSL certificate expiration")
args = parser.parse_args()
for domain in args.domains:
expiration_date = get_ssl_cert_expiration(domain)
current_date = datetime.now()
days_remaining = (expiration_date - current_date).days
print(f"SSL certificate for {domain} expires on {expiration_date}")
print(f"Days remaining: {days_remaining} days")
if days_remaining < 300:
message = f"SSL certificate for {domain} will expire on {expiration_date}. Only {days_remaining} days remaining."
send_dingtalk_message(args.dingtalk_webhook, message)版本二
執(zhí)行腳本帶上 --dingtalk-webhook、–secret和–domains后指定釘釘token、密鑰和域名
python3 ssl_spirtime4.py --dingtalk-webhook https://oapi.dingtalk.com/robot/send?access_token=abdcsardaef--secret SEC75bcc2abdfd --domains www.abc1.com www.abc2.com www.abc3.com
#!/usr/bin/python3
import ssl
import socket
from datetime import datetime
import argparse
import requests
import hashlib
import hmac
import base64
import time
def get_ssl_cert_expiration(domain, port=443):
context = ssl.create_default_context()
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=domain)
conn.connect((domain, port))
cert = conn.getpeercert()
conn.close()
# Extract the expiration date from the certificate
not_after = cert['notAfter']
# Convert the date string to a datetime object
expiration_date = datetime.strptime(not_after, '%b %d %H:%M:%S %Y %Z')
return expiration_date
def send_dingtalk_message(webhook_url, secret, message):
headers = {'Content-Type': 'application/json'}
# Get the current timestamp in milliseconds
timestamp = str(int(round(time.time() * 1000)))
# Combine timestamp and secret to create a sign string
sign_string = f"{timestamp}\n{secret}"
# Calculate the HMAC-SHA256 signature
sign = base64.b64encode(hmac.new(secret.encode(), sign_string.encode(), hashlib.sha256).digest()).decode()
# Create the payload with the calculated signature
payload = {
"msgtype": "text",
"text": {
"content": message
},
"timestamp": timestamp,
"sign": sign
}
response = requests.post(f"{webhook_url}×tamp={timestamp}&sign={sign}", json=payload, headers=headers)
if response.status_code == 200:
print("Message sent successfully to DingTalk")
else:
print(f"Failed to send message to DingTalk. HTTP Status Code: {response.status_code}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Test SSL certificate expiration for multiple domains")
parser.add_argument("--dingtalk-webhook", required=True, help="DingTalk webhook URL")
parser.add_argument("--secret", required=True, help="DingTalk robot secret")
parser.add_argument("--domains", nargs='+', required=True, help="List of domains to test SSL certificate expiration")
args = parser.parse_args()
for domain in args.domains:
expiration_date = get_ssl_cert_expiration(domain)
current_date = datetime.now()
days_remaining = (expiration_date - current_date).days
print(f"SSL certificate for {domain} expires on {expiration_date}")
print(f"Days remaining: {days_remaining} days")
if days_remaining < 10:
message = f"SSL certificate for {domain} will expire on {expiration_date}. Only {days_remaining} days remaining."
send_dingtalk_message(args.dingtalk_webhook, args.secret, message)終極版本
python執(zhí)行腳本時指定配置文件

python3 ssl_spirtime.py --config-file config.json
config.json配置文件內容如下
{
"dingtalk-webhook": "https://oapi.dingtalk.com/robot/send?access_token=avbdcse345dd",
"secret": "SECaegdDEdaDSEGFdadd12334",
"domains": [
"www.a.tel",
"www.b.com",
"www.c.app",
"www.d-cn.com",
"www.e.com",
"www.f.com",
"www.g.com",
"www.gg.com",
"www.sd.com",
"www.234.com",
"www.456.com",
"www.addf.com",
"www.advdwd.com",
"aqjs.aefdsdf.com",
"apap.adedgdg.com",
"cbap.asfew.com",
"ksjsw.adfewfd.cn",
"wdxl.aeffadaf.com",
"wspr.afefd.shop",
"sktprd.daeafsdf.shop",
"webskt.afaefafa.shop",
"www.afaead.cn",
"www.afewfsegs.co",
"www.aaeafsf.com",
"bdvt.aeraf.info",
"dl.afawef.co",
"dl.aefarge.com"
]
}腳本內容如下
#!/usr/bin/python3
import ssl
import socket
from datetime import datetime
import argparse
import requests
import hashlib
import hmac
import base64
import time
import json
def get_ssl_cert_expiration(domain, port=443):
context = ssl.create_default_context()
conn = context.wrap_socket(socket.socket(socket.AF_INET), server_hostname=domain)
conn.connect((domain, port))
cert = conn.getpeercert()
conn.close()
# Extract the expiration date from the certificate
not_after = cert['notAfter']
# Convert the date string to a datetime object
expiration_date = datetime.strptime(not_after, '%b %d %H:%M:%S %Y %Z')
return expiration_date
def send_dingtalk_message(webhook_url, secret, message):
headers = {'Content-Type': 'application/json'}
# Get the current timestamp in milliseconds
timestamp = str(int(round(time.time() * 1000)))
# Combine timestamp and secret to create a sign string
sign_string = f"{timestamp}\n{secret}"
# Calculate the HMAC-SHA256 signature
sign = base64.b64encode(hmac.new(secret.encode(), sign_string.encode(), hashlib.sha256).digest()).decode()
# Create the payload with the calculated signature
payload = {
"msgtype": "text",
"text": {
"content": message
},
"timestamp": timestamp,
"sign": sign
}
response = requests.post(f"{webhook_url}×tamp={timestamp}&sign={sign}", json=payload, headers=headers)
if response.status_code == 200:
print("Message sent successfully to DingTalk")
else:
print(f"Failed to send message to DingTalk. HTTP Status Code: {response.status_code}")
if __name__ == "__main__":
# 從配置文件中加載配置
with open("config.json", 'r') as config_file:
config = json.load(config_file)
dingtalk_webhook = config.get("dingtalk-webhook")
secret = config.get("secret")
domains = config.get("domains")
for domain in domains:
expiration_date = get_ssl_cert_expiration(domain)
current_date = datetime.now()
days_remaining = (expiration_date - current_date).days
print(f"SSL certificate for {domain} expires on {expiration_date}")
print(f"Days remaining: {days_remaining} days")
if days_remaining < 10:
message = f"SSL certificate for {domain} will expire on {expiration_date}. Only {days_remaining} days remaining."
send_dingtalk_message(dingtalk_webhook, secret, message)執(zhí)行結果
/usr/bin/python3 /root/ssl_spirtime.py --config-file /root/config.json
SSL certificate for www.a.tel expires on 2024-06-08 23:59:59
Days remaining: 220 days
SSL certificate for www.b.com expires on 2024-05-23 07:45:13
Days remaining: 203 days
SSL certificate for www.c.app expires on 2024-05-23 07:45:13
Days remaining: 203 days
SSL certificate for www.d-cn.com expires on 2024-03-03 00:00:00
Days remaining: 122 days
SSL certificate for www.aed.com expires on 2024-11-17 06:30:15
Days remaining: 381 days
SSL certificate for www.afedf.com expires on 2024-06-20 23:59:59
Days remaining: 232 days
SSL certificate for www.aefdfd.com expires on 2024-06-20 23:59:59
釘釘告警消息如下

到此這篇關于python腳本監(jiān)聽域名證書過期時間,并將通知消息到釘釘?shù)奈恼戮徒榻B到這了,更多相關python域名證書過期時間內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Nginx?CertBot配置HTTPS泛域名證書Debian及常見問題
- shell腳本檢查域名證書是否過期的流程分析
- iis提示尚未創(chuàng)建默認SSL站點,若要支持不帶SNI 功能的瀏覽器,建議創(chuàng)建一個默認SSL站點
- IISCrypto(SSL/TLS一鍵配置工具) iis服務器如何開啟tls v1.2協(xié)議
- 一個SSL證書在線轉換工具以及IIS7環(huán)境下開通https的方法
- IIS站點綁定/切換SSL證書的實現(xiàn)
- IIS10服務器安裝SSL證書的圖文教程
- iis服務器如何安裝ssl證書
- IIS服務器配置阿里云https(SSL)證書的方法
- Microsoft?iis服務器安裝ssl證書(https)的簡單方法
- IIS綁定SSL證書的方法(圖文詳解)
- 制作能在nginx和IIS中使用的ssl證書
- 在win2008 r2 英文版 IIS7.5上配置Https,SSL的方法
- 有了SSL證書,如何在IIS環(huán)境下部署https
- startssl申請SSL證書 并且配置 iis 啟用https協(xié)議
- win2000服務器在IIS中使用SSL配置HTTPS網(wǎng)站
- IIS7下配置SSL的方法分析
- World Wide Web Publishing 服務嘗試刪除 IIS 所有的 SSL 配置數(shù)據(jù)失敗的幾種方法
- windows server 2019 IIS10配置SSL或更新域名證書(https)
相關文章
Python函數(shù)調用的幾種方式(類里面,類之間,類外面)
本文主要介紹了Python函數(shù)調用的幾種方式(類里面,類之間,類外面),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07
Pandas DataFrame如何按照一列數(shù)據(jù)的特定順序進行排序
這篇文章主要介紹了Pandas DataFrame如何按照一列數(shù)據(jù)的特定順序進行排序,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
Python使用openpyxl批量處理數(shù)據(jù)
openpyxl 是一個用于處理 xlsx 格式Excel表格文件的第三方python庫,其支持Excel表格絕大多數(shù)基本操作。本文給大家介紹Python使用openpyxl批量處理數(shù)據(jù)的操作方法,感興趣的朋友一起看看吧2021-06-06

