无语的小紫英 发表于 2024-5-14 16:37

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

本帖最后由 无语的小紫英 于 2024-5-14 16:42 编辑

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


定时任务处理:

方法一: 使用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()
```

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

网页防篡改系统基本原理{:1_921:}

铭焱 发表于 2024-5-14 23:26

学习一下,正好在学习python

狗哥哥 发表于 2024-5-15 17:54

学习了
正好在学python

资料终结者 发表于 2024-5-18 12:33

学习了~~
页: [1] 2
查看完整版本: python实现监控企业网站页面变动并发送钉钉机器人提醒