网络:离线推演 DNS 与双向路径证据
本篇给出配置文件、输入与操作步骤。示例未执行;实际使用时先核对平台、版本、身份与路径,再按正文的成功和失败预期验收。
前置、依赖与输入
网络完整示例是离线证据处理器,示例未执行。需要Python3.11以上标准库,第三方依赖为零,不需要服务、管理员或网络。输入JSON只含虚构记录,程序不调用系统命令、不建立连接、不修改主机。完整文件位于examples/m5-next-network,必须一起阅读README、lab.py和case.json。
完整源码与配置
下面包括完整源码与全部输入;这不是产品配置验证器,也不执行协议、密码学或系统策略。判断只依据输入声明,不能用输出证明真实环境。
"""Offline teaching model. No network, subprocesses, or system mutations."""
import json
from pathlib import Path
import sys
def require(value, schema):
if type(value) is not dict or set(value) != set(schema):
raise ValueError("unexpected or missing fields")
for key, expected in schema.items():
if type(value[key]) is not expected:
raise ValueError("wrong field type: " + key)
def decide(row):
require(row, {"name": str, "dns": bool, "route": bool, "syn_seen": bool, "reply_seen": bool})
if not row["dns"]:
return "CHECK_DNS"
if not row["route"]:
return "CHECK_ROUTE"
if not row["syn_seen"]:
return "CHECK_LOCAL_PATH"
if not row["reply_seen"]:
return "CHECK_PEER_AND_RETURN"
return "TRANSPORT_OBSERVED"
def main(args):
if len(args) != 1:
print("usage: python lab.py case.json", file=sys.stderr)
return 2
try:
source = Path(args[0]).read_text(encoding="utf-8")
data = json.loads(source)
if type(data) is not list or not data:
raise ValueError("nonempty list required")
# Validate every row before publishing any decisions.
results = [(row, decide(row)) for row in data]
for row, result in results:
print(row["name"] + ": " + result)
return 0
except (OSError, ValueError, KeyError, TypeError, OverflowError):
print("invalid input", file=sys.stderr)
return 2
if __name__ == "__main__":
raise SystemExit(main(sys.argv[1:]))[
{
"name": "dns-failed",
"dns": false,
"route": true,
"syn_seen": false,
"reply_seen": false
},
{
"name": "return-unknown",
"dns": true,
"route": true,
"syn_seen": true,
"reply_seen": false
},
{
"name": "observed",
"dns": true,
"route": true,
"syn_seen": true,
"reply_seen": true
}
]读者自跑、成功和失败
网络离线推演先复制三个文件到独立目录。Windows PowerShell使用python,Linux Bash使用python3调用lab.py case.json;命令在README完整列出。正常输入输出逐行判定并以0结束;缺字段、非法类型或JSON损坏输出invalid input并以2结束。预期拒绝是业务判定,不等同输入错误,仍以0结束。
恢复、清理与边界
恢复时从仓库还原case.json,重新核对变更前后字段。程序不写结果文件,不产生系统资源,不需要关闭端口或停止服务。清理只删除读者自己复制的练习目录;不要删除仓库示例。修改输入不会改变真实授权、证书或路由。
综合练习与分开的解答
练习:先不看参考答案,解释输入中每个正常和失败判定,修改一项条件让一个判定改变,再写出该变化仍不能证明的现实条件。
参考解答
dns-failed先因dns为false输出CHECK_DNS,不根据其余字段猜业务。return-unknown已有解析、路由与SYN但缺响应,输出CHECK_PEER_AND_RETURN而非断言某一端故障。observed只输出TRANSPORT_OBSERVED,不能证明TLS或应用成功。
具体变体:只把 return-unknown 的 reply_seen 从 false 改为 true,其余字段不变,按源码将由 CHECK_PEER_AND_RETURN 变为 TRANSPORT_OBSERVED;这只表示虚构输入包含传输回复,仍不能证明HTTP业务成功。
完整项目说明与依赖声明
以下同源文件完整列出读者前置、自跑命令、正常/失败预期和清理;正文只供阅读,示例未执行。
# Python >=3.11; standard library only; no third-party dependencies.完整 README(与项目文件一致)
# network 离线证据推演
示例未执行。lab.py 按输入中的 DNS、路由、SYN 与响应观测声明,依次定位应调查的层次;它不解析域名、不抓包、不发送网络请求。先区分“尚无响应证据”和“已证明远端故障”,再阅读判定输出。
## 文件与前置
离线程序需要 Python 3.11 以上和标准库,无第三方安装、服务或管理员权限。输入从 [case.json](case.json) 的三例开始,逐项对照 dns、route、syn_seen、reply_seen;[lab.py](lab.py) 给出判读顺序。字段是人工摘要,不是程序现场采集的事实。解释器路径取决于已有环境,macOS 未做原生运行验收。
## 读者自跑
先复制全部文件到自己的隔离练习目录并进入该目录。以下仅是读者步骤,本轮未执行。
Windows PowerShell:
```powershell
python .\lab.py .\case.json
```
Linux Bash(macOS若已有Python3也使用此形式):
```bash
python3 ./lab.py ./case.json
```
预期标准输出如下,进程退出0;明确拒绝是正常决策而不是输入错误。
```text
dns-failed: CHECK_DNS
return-unknown: CHECK_PEER_AND_RETURN
observed: TRANSPORT_OBSERVED
```
## 失败路径
把case.json复制为broken.json,再人工删除第一条记录的name字段。使用同一命令把参数换成broken.json,预期标准错误invalid input、退出2,不发布部分判定。破损JSON、非法字段类型、未知字段、空列表或不存在的文件同样退出2。不打印异常原文,防止输入内容意外进入日志。程序严格匹配固定教学字段,不接受任意扩展。
## 恢复与清理
从原仓库重新复制case.json恢复,或撤销练习副本编辑。程序没有写文件、创建用户或启动连接,无需服务清理;只删除自己复制的目录和broken.json,不删除仓库原文件。
## 解释边界
输入只表示两端抓包摘要,未解析PCAP或发包。TRANSPORT_OBSERVED不证明TLS、HTTP或业务成功。缺响应可能有多个原因,输出保留调查范围。
输入由读者提供,不具有独立真实性。需要真实运行验证时,另行取得授权并采集环境证据,不能用本程序作产品验收工具。继续阅读
- 知识专题
- 知识专题
- 知识专题