Huanglei

I’m PADI No.1409AZ6094

0%

哨兵脚本

今天写一个Python:智能监控与自动网页弹出哨兵脚本。

一个高可用、动态配置的轮询监控脚本。它的核心任务是持续检查特定 ID网页内容,一旦检测到包含“设定的关键字”的内容,立即自动打开浏览器跳转到详情页查看。

单位的内网主页是一个标准的前台 JS 调用后台 Json 的结构,查看 api 的URL返回数据判断,脚本主要轮询检查新发布的页面有没有包含设定的关键字,有关键字就直接把对应网页保存进日志并自动打开网页查看。

🚀 核心工作流程

1. 🛠️ 初始化与环境准备

  • 日志系统双写:配置日志同时输出到控制台monitor_log.txt 文件,确保运行轨迹可追溯。
  • 加载配置文件:读取 config.ini 获取关键参数:
    • base_url:API 根地址。
    • current_id:当前监控的起始 ID。
    • keywords:触发报警的关键字列表。
    • interval_seconds:默认等待时间(用于异常情况)。
  • 安全校验:若配置文件缺失,程序直接报错退出,防止盲目运行。

2. 🔄 主循环监控 (无限轮询)

程序进入 while True 循环,按以下顺序执行:

A. 🔄 动态重载配置

  • 机制:每次循环开始时重新读取 config.ini
  • 目的:支持热更新。用户可以在程序运行时修改关键字或调整 ID,无需重启程序即可生效。

B. 🌐 发起网络请求

  • 构建 URL:拼接目标接口 .../detail/by/id/{current_id}
  • 发送请求:使用 requests.get 发起访问,设置 10秒超时 防止网络卡死。

C. 🛡️ 双层状态过滤 (容错核心)

程序对响应结果进行严格的两级判断,只有全部通过才视为“成功”:

层级 判断条件 判定结果 后续决策
第一层 HTTP 状态码是否为 200 ❌ 否 失败:ID 不变,长间隔等待
第二层 业务码 code 是否为 500 且含 “未知异常”? ❌ 是 失败:ID 不变,长间隔等待
最终 以上均通过 成功 进入数据处理流程

D. 🔍 数据解析与智能兼容

这是代码的核心修复点,专门处理 API 返回数据结构不一致的问题:

  1. 获取 data 字段
  2. 类型判断
    • 如果是 字典 (Dict) → 直接提取 fl
    • 如果是 列表 (List) → 取第一个元素 [0] 再提取 fl
  3. 结果:无论接口返回哪种格式,都能准确拿到 fl 值(如 2, 3, 4…)。

E. ⚡ 关键字匹配与动作触发

  • 全文扫描:将返回的 JSON 转为字符串,遍历检查是否包含配置的 keywords
  • 命中逻辑
    1. 🚨 记录警报:在日志中高亮显示命中的关键字。
    2. 🔗 构造链接:生成目标 URL http://www.hhs.zj/html/page/detail_{fl}.html?id={id}
    3. 🌍 自动打开:调用 open_url_smart 函数,尝试三种方式(os.startfile, webbrowser, subprocess)强制拉起默认浏览器打开该页面。
  • 未命中:仅记录普通日志,静默处理。

F. 💾 状态持久化与休眠策略

根据本次循环的结果,决定下一步动作:

  • ✅ 成功路径 (请求正常 + 业务正常):

    • ID 递增current_id = current_id + 1
    • 保存进度:立即写入 config.ini,防止断电重复消费。
    • 快速休眠:等待 5秒 (FAST_INTERVAL),迅速检查下一条。
  • ❌ 失败路径 (网络错误 / 业务异常):

    • ID 保持不变:下次循环重试同一个 ID,确保不漏数据。
    • 慢速休眠:等待 默认长间隔 (如 30秒),避免对故障服务器造成压力。
  • ⏱️ 精确计时

    • 计算 睡眠时长 = 设定间隔 - 本次耗时
    • 确保整体循环频率稳定,不受网络波动影响过大。

💡 逻辑特点总结

  1. 鲁棒性强:双重错误检查机制,区分“网络故障”和“业务异常”,并在异常时自动降频保护。
  2. 数据兼容:完美解决 API 返回结构变动(列表 vs 字典)导致的解析失败问题。
  3. 实时热更:支持运行时修改配置,运维灵活。
  4. 断点续传:每次成功后立即保存 ID,意外关闭后重启可从断点继续,不重不漏
  5. 多模态报警:通过多种底层方法尝试打开浏览器,最大化保证报警动作执行成功。
-------------本文结束 感谢阅读-------------
  • 本文作者: HuangLei
  • 本文链接: https://maxlay.github.io/2026/03/25/哨兵脚本/
  • 版权声明: 本博客所有原创文章(除文末特别标注转载或特殊声明外),均采用知识共享署名。非商业性使用 ,相同方式共享 4.0 国际许可协议 BY-NC-SA 进行许可。
    您可以:自由地分享(复制、分发、传播)和演绎(修改、改编、创作衍生作品)。
    须遵守署名(BY):必须给出适当的信用,提供指向本许可协议的链接,并指出是否进行了修改。转载请注明出处及原文链接。禁止整站搬运、禁止去除作者信息、禁止用于自媒体洗稿盈利。
    非商业性使用(NC):您不得将本作品用于商业目的。
    相同方式共享(SA):如果您再混合、转换或者基于本作品进行创作,您必须基于与原作品相同的许可协议分发您的贡献。

    商业授权:如需商业用途(包括但不限于出版、付费课程、企业内训等),请事先联系作者获取书面授权。任何形式的商用、二次分发、改编后商用均需授权。本网站所有技术分享严格遵守《中华人民共和国网络安全法》《数据安全法》《个人信息保护法》及相关法律法规。
    用途限制:站内涉及渗透测试、漏洞分析、逆向工程、脚本工具等技术内容,仅限用于合法的教育、学术研究及获得明确授权的安全测试场景。
    禁止行为:任何个人或组织不得利用本站提供的技术信息、代码或工具从事危害网络安全、侵入他人系统、干扰网络正常功能及防护措施等非法活动。
    责任自负:使用者应严格遵守法律法规,因滥用本站内容而导致的任何法律纠纷、经济损失或刑事责任,均由使用者自行承担,与本站及作者无关。作者不对任何因使用本站内容而产生的后果负责。

    技术具有时效性,本站部分内容可能随时间推移而过时或不准确。作者尽力保证内容的正确性,但不对其准确性、完整性、适用性或及时性做任何明示或暗示的保证。读者在参考本站内容进行实际操作(如修改配置、运行代码)前,请务必在测试环境中验证,并做好数据备份。尊重知识产权,保护网络安全,本站不提供任何系统、网站、设备的渗透目标,所有技术仅用于学习与防护。若您认为本站内容侵犯了您的合法权益,或发现本站存在违法违规内容,请通过左侧电子邮箱联系作者,作者将尽快核实并处理。

    本声明自2012年5月5日起生效