一个面向 macOS / Windows 的本地审计工具,用来检查“网络出口、DNS、代理、语言环境、浏览器语言信号、浏览器侧 WebRTC / Header 暴露”是否彼此一致。
这个仓库是 liangai.org 产品矩阵之一:一个“网络与浏览器环境一致性审计”CLI 工具,核心能力是把出口 IP/ASN、系统 DNS/代理/路由、语言环境、浏览器 Accept-Language/WebRTC 暴露等分散信号,采集成结构化的 JSON / Markdown / HTML 报告,用于排查“环境不一致”问题(详见上文“它解决什么问题”)。
产品形态与部署:
- 无独立服务端部署,也不挂独立子域名;产品即“GitHub 开源仓库 + 本地 CLI”,用户
git clone后直接在本机运行 - 对应的落地页挂在主站 liangai.org 的
/products/network-audit路径下(落地页内容由 liangai-web 仓库的其他任务维护,本仓库只负责工具本身和这份 README)
与 claude-code-trust-audit skill 的关系:
- 本机已确认存在该 skill,路径为
~/.codex/skills/claude-code-trust-audit/(这是 Codex CLI 侧的 skill,不在~/.claude/skills/下) - 关系是明确的“调用”而非单纯概念呼应:该 skill 的工作流第一步就是运行其
scripts/run_network_audit.py下载并驱动本仓库(network_audit.py),推荐参数为python3 network_audit.py --default-browser-tracking-probe --no-open - 该 skill 读取本仓库产出 JSON 中的
agent_brief字段(风险等级、关键因素、证据路径、未完成检测)作为 Claude Code / Codex 账号信任与环境一致性诊断的输入,再结合对~/.claude等本地配置的检查(需用户单独同意)产出审计报告 - 简言之:本仓库是通用的网络/浏览器指纹采集器,
claude-code-trust-auditskill 是面向“Claude Code 账号信任风险”场景的上层封装,二者是底层工具与场景化上层封装的关系,可以独立使用,也可以配合使用
我是一个充满好奇心的 AI 应用从业者,关注 AI 产品、自动化工作流,以及把复杂系统整理成可实际落地的工具。
- 联系方式:
shineagentic@duck.com
很多“环境不一致”问题并不在单一代理节点,而是出在:
- 系统 DNS 和实际出口不一致
- 终端语言、系统语言、浏览器语言彼此打架
- 浏览器 profile 还保留着旧的
Accept-Language - 浏览器侧 WebRTC 额外暴露了本地地址或另一条公网路径
- 系统代理 / 自动代理发现让不同应用走了不同链路
这个项目的目标不是“伪装指纹”,而是把这些信号收集到一份结构化报告里,方便排查、复查和做前后差异对比。
- 检查公网出口 IP、ASN、地理位置、时区,并融合 ipapi.is / proxycheck.io / Cloudflare trace 等外部观测
- 检查系统 DNS、当前活跃网络服务 DNS、默认路由、macOS
utun/ Windows 路由与监听端口、127.0.0.1:53/7890 监听 - 检查系统代理、自动代理 URL、WPAD 自动代理发现
- 检查
LANG、LC_ALL、AppleLanguages、AppleLocale - 检查 Chrome / Chromium / Microsoft Edge 各 profile 的
Accept-Language - 启动临时 headless Chrome / Chromium / Edge,检查浏览器实际发出的
Accept-Language、navigator.language(s)、WebRTC 地址暴露 - 可选打开用户默认浏览器,模拟“打开邮件即加载远程追踪资源”的场景,检查 1x1 像素、CSS 背景图、beacon/fetch 是否被拦截,以及服务端可见的请求头
- 额外识别常见代理客户端进程 / 配置路径,并对 Clash Verge / Mihomo 等可读配置生成去敏摘要
- 自动生成 JSON、中文 Markdown 和结构化 HTML 报告;JSON 内包含
agent_brief,方便 Agent 直接解读风险因素与证据字段
- 核心检测依赖系统代理、DNS、路由、监听端口和浏览器探针,因此对大多数会影响这些信号的代理方案都适用。
- 核心审计不绑定具体客户端:Clash/Mihomo、Surge、sing-box、V2Ray、Shadowsocks、Outline、Hiddify 等只要影响系统代理、TUN/VPN、DNS、路由、出口或浏览器,就会反映在通用检测结果里。
- 当前会额外识别常见客户端的进程和配置路径;Clash Verge / Mihomo 等可读配置会提供去敏摘要,其他客户端先以“线索识别”为主,不强行读取订阅、节点或密钥内容。
- 如果某个代理软件不写入系统代理、不走常见本地监听端口、只在单个 App 内手动配置,系统层和浏览器层结果可能仍可见,但不会保证能识别该客户端内部配置。
这个项目定位为“审计 / 诊断工具”,不是“结果保证工具”。
这些结果来自系统命令或浏览器实测,可信度相对高:
scutil --proxy、scutil --dns、route、netstat、networksetupdefaults read -g AppleLanguages、defaults read -g AppleLocale- 本地浏览器 profile 配置文件中的
Accept-Language - headless 浏览器真实发出的请求头和 WebRTC 地址暴露
这些判断是“提示”,不是绝对结论:
- “Datacenter egress detected” 优先基于 ipapi.is / proxycheck.io 的结构化风险字段;只有外部情报不可用时才退回 ASN / 主机名关键词
- “China-oriented public resolvers” 基于常见公共 DNS 列表
- “locale signals include Chinese” 基于本地语言字段的组合判断
- 修复建议本质上是经验规则,不代表唯一正确做法
- 支持 macOS 和 Windows;Linux 暂不支持
- 浏览器探针使用临时 headless profile,不等于完整复现你的日常浏览器
- 浏览器探针依赖外网可访问;断网或严格拦截时只能拿到部分数据
- 这不是反检测绕过工具,也不能证明某个目标站点一定“不会风控”
当前实现包含几项关键的稳健性处理:
- 不再把
networksetup查询硬编码到Wi-Fi,而是优先跟随默认路由对应的活跃网络服务 - 出口风险不再只靠 ASN 关键词,新增 ipapi.is 和 proxycheck.io 两类外部情报源,并保留 Cloudflare trace 作为独立观测
- 语言信号判断同时纳入
LANG、LC_ALL、AppleLanguages、AppleLocale - 增加 Microsoft Edge profile 语言扫描
- 增加最小单元测试,覆盖网络服务解析和区域信号判断
- macOS 自带:
scutil、networksetup、route、netstat、defaults - Windows 自带:
ipconfig、route、netstat、netsh、reg、powershell、tzutil python3- 可选:Chrome / Chromium / Edge,用于浏览器侧探针
git clone https://github.com/Liang-HZ/network-fingerprint-audit.git
cd network-fingerprint-audit
./bin/audit-network默认行为:
- 采集本机信号
- 生成报告到
reports/ - 自动打开最新的 HTML 报告
如果你已经有本地仓库副本,直接在仓库根目录运行:
./bin/audit-network./bin/audit-network --skip-network
./bin/audit-network --skip-browser-probe
./bin/audit-network --default-browser-tracking-probe
./bin/audit-network --no-open
./bin/audit-network --output-dir ./reports
./bin/audit-network --browser-path "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"--default-browser-tracking-probe 会显式打开系统默认浏览器,并在本机 127.0.0.1 启动一次性探针页面。它模拟邮件客户端打开或预览邮件时自动加载远程图片/CSS 资源的行为;用户不需要点击图片,资源请求只要被浏览器加载就会被记录。该探针不会上传数据,报告只保存在本地。
每次运行会生成:
reports/audit-YYYYMMDD-HHMMSS.mdreports/audit-YYYYMMDD-HHMMSS.htmlreports/audit-YYYYMMDD-HHMMSS.json
其中:
- Markdown 适合快速看结论
- HTML 适合按模块浏览和复查
- JSON 适合做前后 diff 或接入 Agent 自动化;其中
agent_brief会把原始检测压缩成账号信任 / 环境一致性诊断所需的风险等级、关键因素、证据路径、建议和未完成检测
这个仓库可以作为 Agent skill 的本地采集器使用。推荐流程是:Agent 下载或更新仓库,运行 network_audit.py,读取最新 JSON,然后优先解释 agent_brief,必要时再回到原始字段核验证据。
agent_brief 的目标不是指导规避平台治理,而是帮助定位可能导致账号信任异常、误判或环境不一致的因素。Agent 输出建议时应引用 evidence_paths,并先说明 unverified_or_failed_checks 里哪些检测没有完成。
仓库本身不会读取 Claude Code 的本地配置或 session。agent_brief.manual_agent_checks 会提醒 Agent 在用户同意后检查 ~/.claude/settings.json、项目 .claude/settings*.json、相关 ~/.claude/projects/ session 和 ANTHROPIC_BASE_URL / ANTHROPIC_MODEL 等环境变量;对面向中国用户的账号信任诊断,未知中转站、共享订阅、非官方 baseURL 或非官方模型 ID 应视为高风险源,并建议先备份再清理。
- 左侧固定目录,便于在长报告里跳转
- 顶部概览区,先看高 / 中 / 低风险分布
主要发现用表格集中展示问题和证据修复建议给出按优先级排序的处理方向浏览器与 WebRTC、网络与区域信号、代理设置、代理运行态快照分模块展示
这份布局优先服务排障,而不是展示炫技 UI。
高风险:更可能导致“出口和环境看起来不像同一台机器/同一类用户”中风险:存在明显不一致,但未必单独触发问题低风险:会增加复杂性或不确定性信息:主要用于补全上下文,不一定需要处理
比较推荐的用法是:
- 修改一个变量,例如 DNS、代理或浏览器语言
- 重新运行审计
- 对比前后两份 JSON 报告
这样比只看单次结果更有价值。
- 脚本只抓取排障相关字段
- 当前内置的代理客户端识别只保留进程名、配置路径和去敏后的关键片段,不会整段写入订阅或 token
- 报告默认不再写入主机名、当前工作目录;家目录绝对路径会被脱敏成
~ - 浏览器探针在本地临时目录运行,结束后清理 profile
- 默认浏览器追踪模拟只监听
127.0.0.1,用于记录本机默认浏览器是否自动加载类似邮件追踪的远程资源;远程服务在真实场景中看到的公网出口需结合报告里的公网 IP 情报判断 - 生成的报告保存在本地
reports/,不会自动上传 reports/已被.gitignore忽略,不建议把生成报告公开发布
当前仓库至少应通过:
python3 -m py_compile network_audit.py
python3 -m unittest discover -s tests -v
python3 network_audit.py --no-open
python3 network_audit.py --skip-network --no-open
python3 network_audit.py --skip-browser-probe --no-open- 不承诺“修复后一切站点都通过”
- 不负责伪造完整浏览器指纹
- 不尝试绕过站点风控策略
- 不替代代理、DNS 或浏览器本身的正确配置