吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1880|回复: 12
收起左侧

[Python 原创] python实现监控企业网站页面变动并发送钉钉机器人提醒

  [复制链接]
无语的小紫英 发表于 2024-5-14 16:37
本帖最后由 无语的小紫英 于 2024-5-14 16:42 编辑

起因:
因为之前很多ThinkPHP开发的企业网站容易被注入后修改数据,跳转到不正规网站。但很多这种站点不长久更新,有时候被修改了数据不能及时发现。
就想着搞一个python的定时检测页面md5值,如果md5值发生了变化就给钉钉机器人发推送提醒。



定时任务处理:
[Python] 纯文本查看 复制代码
方法一: 使用time.sleep()基础函数实现简单定时任务
import time

def simple_task():
    print("任务执行时间:", time.ctime())

# 每隔5分钟执行一次任务
while True:
    simple_task()
    time.sleep(5 * 60)

方法二: 结合系统定时任务(如cron)执行Python脚本
Linux (cron):
在用户家目录下编辑crontab文件:
crontab -e
添加定时任务条目:
0 3 * * * /usr/bin/python3 /path/to/your/script.py
上述cron表达式表示每天凌晨3点执行指定Python脚本。


代码如下:
import requests
import json
import time
import hmac
import hashlib
import base64
import urllib.parse

# 设置谷歌浏览器的请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 - monitor"
}
# 设置手机标头
mobilePhoneUserAgent = {
    "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 - monitor"
}
# 2024.5.14 检测正常页面的时间
defaultTime = "2024.5.14"

#需要检测的网址与md5值 (md5值第一次获取后填写)
toBeTestArr = [
    {"url": "网站1", "md5": "第一次需要手动填写"},
    {"url": "网站2", "md5": "第一次需要手动填写"},
]
#需要手机标头访问的
mobileStation = [
    "网站1"
]

#钉钉相关配置
secret = " "  #密匙
access_token = " " #链接里面的

def timingDetection():
    changeContent = ''
    for ix in toBeTestArr:
        if ix['url'] in mobileStation:
            print(ix['url'])
            response = requests.get(ix['url'], headers=mobilePhoneUserAgent)
        else:
            response = requests.get(ix['url'], headers=headers)
        content = response.content.decode('utf8')
        soup = str(content)
        soup = soup[:1800]  # 截取前1800字符
        md = hashlib.md5(soup.encode())
        mdx = md.hexdigest()
        if mdx != ix['md5']:
            changeContent += "网站:【" + ix['url'] + "】\n"
        print(ix['url'], mdx)
    if changeContent:
        changeContent += "以上网站页面内容与" + defaultTime + "检测的内容不一致,请手动判断是否被篡改。"
        sendMessage(changeContent)
    else:
        print("检测未发生篡改")

def sendMessage(content):
    timestamp = str(round(time.time() * 1000))
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    ddUrl = "https://oapi.dingtalk.com/robot/send?access_token=" + access_token + "×tamp=" + timestamp + "&sign=" + sign
    data = {
        'at':
            {
                'atUserIds': [],
                'atMobiles': [],
                'isAtAll': True,
            },
        'text': {
            'content': content
        },
        'msgtype': 'text',
    }
    headers['Content-Type'] = 'application/json'
    r = requests.post(url=ddUrl, data=json.dumps(data), headers=headers)
    w = json.loads(r.text)
    print(w)

if __name__ == '__main__':
    timingDetection()

免费评分

参与人数 5吾爱币 +11 热心值 +4 收起 理由
junjia215 + 1 + 1 谢谢@Thanks!
五岁杀人 + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
soul0701 + 1 热心回复!
laozhang4201 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

poptop 发表于 2024-5-20 09:51
好好学习                                                               
dork 发表于 2024-5-14 19:10
cenoser795 发表于 2024-5-14 20:01
chinasniu 发表于 2024-5-14 20:30
学习吧!!!!
a540584012 发表于 2024-5-14 21:30
好好学习天天向上。
fdsuf4 发表于 2024-5-14 22:01
dork 发表于 2024-5-14 19:10
思路好,后面可以添加微信消息提醒

给钉钉发消息很容易,给微信发消息比较难:
ab123 发表于 2024-5-14 22:35
网页防篡改系统基本原理
铭焱 发表于 2024-5-14 23:26
学习一下,正好在学习python
狗哥哥 发表于 2024-5-15 17:54
学习了
正好在学python
资料终结者 发表于 2024-5-18 12:33
学习了~~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-14 00:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表