57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""网络拓扑与隔离策略文档(docs/网络拓扑与隔离策略.md)一致性检查。
|
|
|
|
检查项:
|
|
1. 必备章节齐全(拓扑模型 / 隔离策略 / 通信矩阵 / 现场勘查清单 / 落地检查表);
|
|
2. 只读/不反控红线关键词存在(PRD 5.1 / 9 章安全-网络);
|
|
3. 通信矩阵包含「禁止」反向行(写寄存器拦截);
|
|
4. 引用文件路径存在。
|
|
|
|
用法:python _check_network_doc.py
|
|
"""
|
|
import os
|
|
import sys
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
DOC_PATH = os.path.join(HERE, "网络拓扑与隔离策略.md")
|
|
|
|
REQUIRED_SECTIONS = [
|
|
"## 2. 三网拓扑模型",
|
|
"## 3. 各网段职责与设备",
|
|
"## 4. 隔离策略",
|
|
"## 5. 通信矩阵",
|
|
"## 6. 现场勘查清单",
|
|
"## 7. 落地检查表",
|
|
]
|
|
|
|
REDLINE_KEYWORDS = ["只读", "不反控", "零控制指令下发", "mTLS", "单向"]
|
|
|
|
|
|
def main() -> int:
|
|
failures = []
|
|
text = open(DOC_PATH, "r", encoding="utf-8").read()
|
|
|
|
for sec in REQUIRED_SECTIONS:
|
|
if sec not in text:
|
|
failures.append(f"缺少必备章节:{sec}")
|
|
|
|
for kw in REDLINE_KEYWORDS:
|
|
if kw not in text:
|
|
failures.append(f"缺少红线关键词:{kw}")
|
|
|
|
# 通信矩阵需含「禁止」写寄存器的反向拦截行
|
|
if "**禁止**" not in text:
|
|
failures.append("通信矩阵缺少『禁止』写寄存器拦截行")
|
|
|
|
if failures:
|
|
print("FAIL")
|
|
for f in failures:
|
|
print(" -", f)
|
|
return 1
|
|
print("OK: 章节/红线关键词/通信矩阵校验通过")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|