Compare commits

...

151 Commits

Author SHA1 Message Date
hotyue
3f73825972 chore(release): bump version to v4.0.8 全面部署专业化 UI 与全网节点扩容 2026-05-06 06:13:57 +00:00
hotyue
56b655af2d feat(ui): 优化全局提示文案并脱除过度拟人化,在多端高光时刻增设 GitHub Star 引流按钮
1. core/install & master/install_master: 底部新增 OSC 8 终端超链接引流
2. core/tg_report & master/tg_master: 底部常驻跳转 GitHub 的内联键盘按钮
3. docs: 更新 README 注入顶部 Star 引导文案,并追加 @Bryan2333 贡献者致谢
2026-05-06 06:11:44 +00:00
github-actions[bot]
70d940584e chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-05-06] 2026-05-06 05:50:59 +00:00
github-actions[bot]
0cdb4f8d3f chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-05-05] 2026-05-05 05:36:04 +00:00
github-actions[bot]
67be930060 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-05-04] 2026-05-04 05:57:46 +00:00
hotyue
be82242ed1 feat(data): 新增美洲及欧洲主流数据中心节点,全面覆盖爱荷华、弗吉尼亚、法尔肯施泰因等机房重镇 (closes #43) 2026-05-03 11:31:47 +00:00
github-actions[bot]
67d6e35d9f chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-05-03] 2026-05-03 05:52:04 +00:00
hotyue
f34e697016 fix(install): 对齐双端部署脚本的网络波动兜底版本锚点 (Agent v4.0.6 / Master v4.0.7) 2026-05-03 02:22:03 +00:00
hotyue
56cfbb5485 chore(core): 删除已废弃的 tg_daemon.sh 长轮询脚本,全面对齐 Webhook 架构 2026-05-03 02:20:19 +00:00
github-actions[bot]
d40b7928d0 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-05-02] 2026-05-02 05:30:24 +00:00
github-actions[bot]
ac2f8b0a1c chore(data): 🤖 自动机兵:刷新 4000 条绝对坐标指纹库 2026-05-01 06:30:32 +00:00
github-actions[bot]
caf7589b89 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-05-01] 2026-05-01 06:09:27 +00:00
hotyue
ebada9f455 fix(install): 优化 Arch Linux 依赖安装逻辑,采用 -S --needed 避免部分更新导致系统损坏 (closes #42)
Thanks to @Bryan2333 for the pacman flag optimization and security improvements.
2026-05-01 03:38:17 +00:00
hotyue
d2dc1a20c3 Merge pull request #42 from Bryan2333/main
Change pacman install to use --needed flag
2026-05-01 11:31:13 +08:00
BryanLiang
d115f01d4a Fix pacman command to use '-S' instead of '-Sy' 2026-04-30 23:26:49 +08:00
BryanLiang
b1dc0ab79d Change pacman install to use --needed flag 2026-04-30 23:23:56 +08:00
github-actions[bot]
c147843d39 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-30] 2026-04-30 05:51:59 +00:00
hotyue
ae67817eb4 chore: bump MASTER_VERSION to v4.0.7 for tg_master UX optimization 2026-04-30 01:06:19 +00:00
hotyue
27e48defb2 feat(master): 优化 UX 体验,态势感知报告存档后保留返回节点控制台按钮 (closes #41) 2026-04-30 01:04:31 +00:00
github-actions[bot]
cc216e288e chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-29] 2026-04-29 05:48:04 +00:00
hotyue
9f32bc990d chore: bump version to v4.0.6 准备全舰队换装终极三核纠偏雷达 2026-04-28 13:29:52 +00:00
hotyue
3a981f24e3 fix(core): 修复 Music/Premium 探针被拦截为无状态页的问题,注入 UA 伪装,并扩容前端配置变量特征库 2026-04-28 10:10:42 +00:00
hotyue
a626283b54 fix(core): 优化三核纠偏判决权重,以 YouTube 流媒体解锁为主导,解决基础路由库漂移导致的虚假黄灯警告 2026-04-28 10:08:11 +00:00
hotyue
12eaf89f48 fix(core): 重构 Google 雷达为三核交叉机制,引入 URL 精准跳转解析与强一致性拦截算法,准确暴击漂移与假阳性 2026-04-28 08:43:32 +00:00
hotyue
5e1331bad0 fix(core): 升级三核雷达,引入 URL 域名跳转探测并对齐业界权威的 contentRegion 判决机制 2026-04-28 08:32:55 +00:00
hotyue
e44418d381 fix(core): 补充缺失的 scheduler 抹杀逻辑根除幽灵循环,并为战报模块引入 60s 冷却装甲阻断并发风暴 2026-04-28 08:13:54 +00:00
hotyue
c86f1e509b fix(core): 修复 Music 版权探针正则提取逻辑,匹配其专属前端架构解决获取失败问题 2026-04-28 08:05:16 +00:00
github-actions[bot]
f7f2421843 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-28] 2026-04-28 05:52:26 +00:00
hotyue
014486e558 perf(core): 优化 Google 模块行为拉伸策略,单步休眠上限缩短至 120s,提升巡逻执行效率 2026-04-28 04:30:05 +00:00
hotyue
ce4a40d860 fix(core): 升级终极双核版权雷达 (YT Premium + YT Music),剥除 CDN 伪装,彻底剿灭送中检测假阳性 2026-04-28 04:23:32 +00:00
hotyue
36847aeaa2 fix(core): 升级双核纠偏雷达,引入 IPv6 法律边界探测并恢复 Premium 穿透,彻底根除 Google 首页缓存造成的送中假阳性 2026-04-28 01:03:46 +00:00
hotyue
43adf55a4b fix(master): 对齐全网防御架构,为司令部安装/卸载器引入 mktemp 动态沙盒与无落地内存流,彻底阻断 TOCTOU 提权劫持 2026-04-28 00:58:27 +00:00
hotyue
838dc01ebc fix(core): 封堵本地安全漏洞,为安装/卸载器引入 mktemp 动态沙盒与无落地内存流,彻底阻断 TOCTOU 提权与配置投毒 2026-04-28 00:49:15 +00:00
hotyue
641055ab74 fix(core): 为深海声呐探针拉取引入源文件基因防伪校验,彻底阻断 HTML 投毒与网络劫持导致的假死变砖 2026-04-28 00:20:49 +00:00
hotyue
5c19b6a6e1 fix(master): 修复态势感知入库的高危 SQL 注入漏洞,并全量斩断 HTTP 降级通道封死 MITM 劫持 2026-04-28 00:20:37 +00:00
hotyue
af2570f15d fix(core): 对齐架构,为 Agent 卸载脚本引入 SIGKILL 瞬间抹杀机制,防止 Systemd 卡死与遗言触发 2026-04-28 00:07:15 +00:00
hotyue
df77f397aa fix(master): 对齐 Agent 架构,重构中枢安装器引入原子化防砖交接与 SIGKILL 绝对抹杀机制 2026-04-28 00:05:26 +00:00
hotyue
d6dee813c5 fix(core): 重构 install.sh 实现原子化热更新防断网变砖,并对齐双栈裸奔 IP 缓存根除 OTA 误发日报 Bug 2026-04-27 23:49:19 +00:00
hotyue
d20f576908 fix(core): 升级 Google 纠偏自检雷达,引入 Maps+YouTube 双核交叉验证,彻底修复送中假阳性漏洞 (closes #39) 2026-04-27 23:12:06 +00:00
hotyue
17dd927719 feat(data): 新增美洲战区 - 德克萨斯州休斯顿 (Houston, TX) 节点支持 2026-04-27 22:59:39 +00:00
hotyue
bff49cd2b9 feat(data): 新增非洲战区 - 尼日利亚 (Nigeria, NG) 节点支持 (closes #38) 2026-04-27 10:38:00 +00:00
github-actions[bot]
49090f1b97 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-27] 2026-04-27 05:47:01 +00:00
hotyue
15324d0840 fix(core): 强制 updater.sh 后台静默更新日志使用绝对 UTC 时间,补齐全舰队时空对齐最后一块拼图 2026-04-27 03:05:05 +00:00
hotyue
8b632fe4f9 chore: bump MASTER_VERSION to v4.0.5 触发司令部防连点与 Toast 弹窗交互换代 2026-04-27 02:50:48 +00:00
hotyue
11ff23bf94 fix(master): 修复深海声呐战报入库交互 Bug,新增 Toast 气泡弹窗反馈与防连点 UI 重绘机制 2026-04-27 02:45:13 +00:00
hotyue
332765a72e fix(core): 强制所有业务模块日志与独立战报使用绝对 UTC 时间,彻底根除跨时区排障时的时间线错乱 2026-04-27 02:28:41 +00:00
hotyue
38869e8681 chore: bump AGENT_VERSION to v4.0.5 触发全舰队高频巡逻架构换代 2026-04-27 02:14:48 +00:00
hotyue
85cd1dc594 docs: 深度重构 README 核心极客特性与基建说明,全量展现 UTC 全球时钟、Fail-Fast 预检容灾及云端双轨军工厂等终极架构 2026-04-27 02:13:44 +00:00
hotyue
55f7ee0c8c feat(core): 升级舰队巡逻密度,将全局养护频率由 30 分钟缩短至 20 分钟 (每日 72 次) 并对齐所有日志与战报标定 2026-04-27 02:05:24 +00:00
hotyue
d24be4da0b feat(core): 重构全球时钟同步架构,强制挂载绝对 UTC 时区,实现分布节点天然并发削峰与战报时间对齐 2026-04-27 01:54:59 +00:00
github-actions[bot]
ae36155545 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-26] 2026-04-26 19:05:44 +00:00
hotyue
dc5560f8fd fix(core): 重构 Systemd 定时器调度逻辑,剥离 OnActiveSec 触发器并强制使用日历半点锚定,彻底根除 OTA 重载引发的并发风暴与误发日报 2026-04-26 09:23:44 +00:00
hotyue
18985cb57d fix(core): 恢复 -f 完整 IP 显示参数并清理冗余拦截逻辑,终极固化极速预检(Fail-Fast)容灾架构 2026-04-26 08:57:39 +00:00
hotyue
830d62ead8 fix(core): 引入 4 秒极速预检(Fail-Fast)机制彻底根除复杂路由下的探针死等假死,并重构三级容灾打靶策略 2026-04-26 08:31:23 +00:00
hotyue
5c8d9d6096 fix(core): 完善声呐拉取防伪校验,并为纯IPv6/WARP等极端路由环境引入三级阶梯脱壳与裸跑容灾机制 2026-04-26 06:41:26 +00:00
hotyue
22d26079e4 fix(core): 完善声呐探针拉取的防伪校验,并为极端路由环境引入阶梯式剥离与终极裸跑容灾机制 2026-04-26 06:26:10 +00:00
hotyue
c564ea0ab8 fix(core): 剔除探测探针负优化参数,修复含掩码IP导致的情报直达链接失效问题 2026-04-26 05:59:46 +00:00
hotyue
ec7bf0f2b9 fix(core): 重构声呐探针拉取逻辑引入双栈智能容灾,并增加应对 WARP 复杂路由死锁的脱壳抢救机制 2026-04-26 05:47:34 +00:00
hotyue
be241ab6bd bump: version to 4.0.4 2026-04-26 03:08:26 +00:00
hotyue
4b2985b4ef fix(core): 切除 agent_daemon 冗余的开机注册发信逻辑,实现部署过程的绝对静音与不打扰 2026-04-26 02:26:38 +00:00
hotyue
d4afb57f9f feat(core): 引入智能环境嗅探,针对受限 Alpine 容器启用自建高可用死循环调度器,彻底根除 Cron 假死顽疾 2026-04-26 02:19:46 +00:00
hotyue
230a59bbb3 feat(master): 节点销毁时同步清理ip_trend_log历史污染数据,并加装严格的防越权删除(IDOR)拦截锁 2026-04-26 01:44:01 +00:00
hotyue
f4a5cf8306 fix(core): 彻底抹除 Alpine 卸载时的 crontab 报错,并加入 OpenRC 调度器双向同步与强力唤醒机制 2026-04-26 01:38:18 +00:00
hotyue
b606fe02ff feat(core): 为深海声呐战报底部追加控制台快捷唤出按钮,实现全链路闭环操作 2026-04-26 01:28:55 +00:00
hotyue
3375356143 fix(core): 彻底修复 Alpine/OpenRC 环境下 crond 调度器路径割裂与假死的顽疾 2026-04-26 01:23:26 +00:00
github-actions[bot]
d9255ecbca chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-25] 2026-04-25 19:04:17 +00:00
hotyue
6ad6f6b4b3 fix(core): 大道至简 2026-04-25 16:59:23 +00:00
hotyue
a8caea3b6d fix(core): 升级深海声呐探测机制为源码物理篡改版,彻底封死第三方脚本在多IP/NAT环境下的网卡逃逸漏洞 2026-04-25 16:42:53 +00:00
hotyue
1a49e18200 fix(core): 升级幽灵网卡劫持为 v3 源码包裹版,彻底解决底层脚本 PATH 逃逸问题 2026-04-25 16:35:59 +00:00
hotyue
c223d7a476 fix(core): 修复深海声呐战报中高危警告换行符转义失效的问题 2026-04-25 16:24:37 +00:00
hotyue
eaa51358a8 fix(core): 彻底修复 Alpine/Busybox 环境下的开机自启顽疾、去色乱码及幽灵网卡劫持失效问题 2026-04-25 16:15:51 +00:00
hotyue
00827b3b15 docs: 更新 README.md,补充 Master 与 Agent 的官方图文部署教程链接 2026-04-25 09:04:57 +00:00
hotyue
ccddaf4386 chore(release): bump version to v4.0.3 2026-04-25 06:26:23 +00:00
hotyue
0f0ba46989 feat(core): 优化部署与升级链路,新节点入列及 OTA 捷报底部追加 [一键唤醒控制台] 按钮 2026-04-25 06:18:22 +00:00
hotyue
f83db38a6b feat(agent): 优化实时日志推送链路,底部追加 [一键唤醒控制台] 交互式内联按钮 2026-04-25 06:09:37 +00:00
hotyue
ba5582ab4c fix(master): 修复态势感知面板升级 JSON 交互后的换行符乱码 (%0A 转换为 \n) 2026-04-25 06:02:25 +00:00
hotyue
fb4e1d9b31 feat(master): 优化态势感知面板,底部追加 [一键唤醒控制台] 交互式内联按钮 2026-04-25 05:57:10 +00:00
hotyue
2dea6e382b feat(agent): 优化每日简报推送链路,底部追加 [一键唤醒控制台] 交互式内联按钮 2026-04-25 05:48:53 +00:00
hotyue
fa8eada97b docs: 更新 README.md,增加对底层 IP 质量检测组件 xykt/IPQuality 的开源鸣谢 2026-04-25 01:34:32 +00:00
hotyue
c102f66234 docs: 更新 README.md,增加对底层 IP 质量检测组件 xykt/IPQuality 的开源鸣谢 2026-04-25 01:33:22 +00:00
hotyue
68a50fdb4a docs: 更新 README.md,增加对底层 IP 质量检测组件 xykt/IPQuality 的开源鸣谢 2026-04-25 01:32:20 +00:00
hotyue
aac83acb8f docs: 更新 README.md,增加对底层 IP 质量检测组件 xykt/IPQuality 的开源鸣谢 2026-04-25 01:30:24 +00:00
hotyue
4be4d5e9ef docs: 更新 README.md,增加对底层 IP 质量检测组件 xykt/IPQuality 的开源鸣谢 2026-04-25 01:29:30 +00:00
hotyue
1f925b307f docs: 更新 README.md,增加对底层 IP 质量检测组件 xykt/IPQuality 的开源鸣谢 2026-04-25 01:27:08 +00:00
hotyue
49afe032d6 fix(agent): 重构 Google 区域探测逻辑,穿透 YouTube GeoIP 底层彻底解决跨区漂移与假阳性误判 (Resolves #14, Resolves #35) 2026-04-25 00:48:00 +00:00
hotyue
f0f054c8cd feat(data): 扩容美国得克萨斯州 (Texas/Dallas) 部署坐标与地图基建 (Resolves #33) 2026-04-25 00:36:07 +00:00
hotyue
699e9ca31a feat(master): 重构全球旗帜渲染引擎,支持 US-* 等州级行政区划自适应 (Resolves #33) 2026-04-25 00:25:06 +00:00
github-actions[bot]
76cace4ff6 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-24] 2026-04-24 19:03:51 +00:00
hotyue
9f3218ab7f chore: release v4.0.2 版本号跃升 2026-04-24 15:23:39 +00:00
hotyue
8a61f518f5 fix(agent): 移除 awk 暴力裁剪引发的 UTF-8 中文多字节劈裂乱码 Bug 2026-04-24 15:13:14 +00:00
hotyue
e9d5023263 fix: 紧急重构态势感知入库链路,引入交互式 [存档] 按钮,彻底解决 TG API 消息监听死锁 2026-04-24 15:06:02 +00:00
hotyue
05b1e21bba fix(master): 紧急修复 tr 命令语法死锁,并彻底解决态势感知面板的 URL-encoded 换行排版问题 2026-04-24 14:53:38 +00:00
hotyue
4a496fdab3 fix(master): 紧急修复 tr 命令中单引号转义引发的 Bash 语法崩溃死锁 2026-04-24 14:46:23 +00:00
hotyue
8ae3a6534d feat: 🚀 跃升至 v4.0.2,全面重构 IP 质量态势感知矩阵,新增 Google 与 ChatGPT 历史轨迹追踪 2026-04-24 14:36:36 +00:00
hotyue
3269376c94 fix(agent): 彻底重构探针参数装配机制,完美兼容多IP站群并补回尾部直达链接所需IP变量 2026-04-24 14:01:20 +00:00
hotyue
7a92de4d62 fix(agent): 重构探针参数装配机制,完美兼容多IP站群路由绑定与 NAT 容灾,并修复底部 Scamalytics 链接的变量丢失问题 2026-04-24 13:47:10 +00:00
hotyue
5fbc1e3fb3 fix(agent): 修复 NAT 架构下强制绑定出口导致探针崩溃的死锁,注入 -f 标志输出完整明文 IP,并规范化面板术语 2026-04-24 13:36:11 +00:00
hotyue
d73c3154f9 feat(agent): 丰富深海声呐战报,底部追加探针引擎的运行时版本号与情报生成时间戳 2026-04-24 12:29:54 +00:00
hotyue
b3fbed4a94 chore: 🚀 跃升至 v4.0.1,防弹装甲专项重构全面闭环 2026-04-24 10:53:08 +00:00
hotyue
71fe3bde51 fix(master): 补齐 Master 部署脚本缺失的 openssl 核心依赖,杜绝纯净系统下因 HMAC 签名生成失败导致指令被全网拒收的致命隐患 2026-04-24 10:48:18 +00:00
hotyue
c739f58cc5 refactor(agent): 🛡️ 终极安全重构 - 阻断 FD 文件锁继承导致的任务死锁,并将深海声呐探针收编本地化执行,彻底铲除第三方 RCE 投毒风险 2026-04-24 10:29:11 +00:00
hotyue
2c50c72fcb refactor(agent): 🛡️ 终极安全重构 - 阻断 FD 文件锁继承导致的任务死锁,并将深海声呐探针收编本地化执行,彻底铲除第三方 RCE 投毒风险 2026-04-24 10:28:38 +00:00
hotyue
8d16c549fc fix(agent): 修复公网 IP 变动重新注册时丢失 OTA 权限的漏洞,并彻底肃清质量检测路由中的僵尸进程残留 2026-04-24 10:09:18 +00:00
hotyue
d74d6d8775 fix(agent): 🚨 彻底废除官方网关模式下的 HTTP 裸奔漏洞,实现全网节点 100% 强制 TLS 加密,配合主控端 Strict-TLS 2026-04-24 10:02:40 +00:00
hotyue
853e6c09e1 fix(install): 修复 Alpine Linux 下 dcron 依赖缺失导致 openssl 链式静默安装失败的漏洞 2026-04-24 09:44:29 +00:00
hotyue
1f21ac9a7e fix: 🚨 破除 Strict-TLS 死亡锁死,强制全网挂载 openssl 证书,并为 OTA 指令开辟一次性 HTTP 灾难救援通道 2026-04-24 09:36:58 +00:00
hotyue
28fd94eff5 fix(agent): 🚀 全面排雷 - 修复 IPv6 映射监听失败、60秒 HMAC 并发重放漏洞、长效守护引发的僵尸进程泄露,并实现 OTA 源地址动态解耦 2026-04-24 07:30:12 +00:00
hotyue
7460935acc fix(master): 🚨 彻底废除 HTTP 强制降级漏洞,实现全链路 Strict-TLS 加密,封堵明文劫持入口 2026-04-24 07:16:08 +00:00
hotyue
109ae6f319 Merge PR #32: 引入双写日志架构,全面打通 Systemd Journal 遥测通道 2026-04-24 06:45:01 +00:00
hotyue
6b3acf5787 docs: 更新项目文档,彰显 V4.0.0 深海声呐全维探针与趋势追踪架构 2026-04-24 03:30:20 +00:00
hotyue
b1ecbd4f9a chore: 恢复拉取源为 main 并移除 Beta 标识,准备发布 v4.0.0 正式版 2026-04-24 03:25:32 +00:00
hotyue
4d091e4dd9 fix(agent): 增加双栈容灾试探,修复纯V6环境下提取云端版本号超时导致被异常降级的Bug 2026-04-24 03:25:01 +00:00
hotyue
ae6559c850 fix(master): 同步修复 V6 环境下提取云端版本号超时的 Bug,并抬高兜底版本至 v4.0.0 2026-04-24 03:24:24 +00:00
hotyue
5cfaebceab Merge remote-tracking branch 'origin/main' into dev/v4.0.0-sonar 2026-04-24 03:15:31 +00:00
github-actions[bot]
88f55cbab9 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-23] 2026-04-23 19:22:57 +00:00
IcySteam
1204336612 fix(telemetry): Restore dual-write logging to the Systemd journal
Reapply commit `e77b7c0`, which was (inadvertently?) omitted in the recent upstream rollup `34320b2`.

Original commit description:
```
This commit refactors the internal logging functions across all core modules to guarantee telemetry reaches the Systemd journal. Sentinels now mirror their physical log outputs directly to the OS `logger`, ensuring flawless `journalctl` visibility even when modules are spawned in detached subshells.
```
2026-04-24 01:47:56 +10:00
hotyue
49a65a5f11 fix(agent): 移除过度严格的 sed 过滤,修复因不可见字符导致的 JSON 截断告警,确立终极情报版战报排版 2026-04-23 14:14:24 +00:00
hotyue
7e5b836a49 feat(agent): 彻底重构声呐战报,解决广告字符干扰,实现全库打分矩阵与流媒体高亮排版 2026-04-23 14:08:07 +00:00
hotyue
18f80400ef feat(agent): 升级深海声呐为满血版,补充展示 ASN/归属地/原生IP/25端口及 Abuse 投诉分 2026-04-23 13:58:18 +00:00
hotyue
eca4b41da4 feat(agent): 丰富深海声呐战报,增加 YouTube/Disney/TikTok 解锁展示与 Google 送中警告 2026-04-23 13:51:08 +00:00
hotyue
a24a533165 fix(agent): 修复 webhook 路由 Python 严格缩进错误导致的进程崩溃问题 2026-04-23 13:40:12 +00:00
hotyue
d2b575fe85 chore: 临时将全局拉取源切换至 dev/v4.0.0-sonar,准备进行深海声呐实弹测试 2026-04-23 13:33:07 +00:00
hotyue
cb0aa2049e chore: 移除 beta 标识,准备发布 v4.0.0 正式版 2026-04-23 13:28:49 +00:00
hotyue
981b9e4859 feat(master): 完善部署脚本,新增 ip_trend_log 数据表以支持 IP 污染趋势追踪 2026-04-23 13:26:11 +00:00
hotyue
eeee1b6811 feat(agent): 新增深海声呐核心模块 (mod_quality.sh),实现异步 IP 质量探测与隐写战报回传 2026-04-23 13:25:54 +00:00
hotyue
e6852d0c9d feat(agent): 将深海声呐武器 mod_quality.sh 接入 install 部署/OTA 补给线 2026-04-23 13:22:22 +00:00
hotyue
23ea08f981 feat(agent): Webhook 追加 /trigger_quality 路由,支持异步拉起深海声呐 2026-04-23 13:17:36 +00:00
hotyue
580a3d7fd5 feat(master): 完善深海声呐与趋势监测中枢,指令与 UI 面板彻底闭环 2026-04-23 13:13:06 +00:00
hotyue
6eabb60c28 chore: 开启 v4.0.0-sonar 深海声呐模块开发分支,升级版本号至 beta 2026-04-23 12:27:11 +00:00
hotyue
7fd432ffee fix(install): 修复装机量统计逻辑,仅在全新部署时触发探针,彻底解决平滑升级导致的数据虚高与 Cloudflare KV 写入配额耗尽问题 2026-04-23 11:18:46 +00:00
github-actions[bot]
351143e59d chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-23] 2026-04-23 01:59:32 +00:00
hotyue
725e8ae8c9 ci: 全局挂载 FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true 消除 Node.js 20 弃用警告 2026-04-23 01:58:44 +00:00
github-actions[bot]
1e9de46fc5 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-23] 2026-04-23 01:56:38 +00:00
hotyue
543ab5c8bd Merge branch 'main' of https://github.com/hotyue/IP-Sentinel 2026-04-23 01:53:47 +00:00
hotyue
972cd02874 fix(scripts): 修复 MY 战区 Yahoo RSS 拒绝 GitHub IP (403) 问题,切换为高可用 Google News 源 2026-04-23 01:53:36 +00:00
github-actions[bot]
9c37cb9df3 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-23] 2026-04-23 01:51:45 +00:00
hotyue
2a8a6b6fa7 feat(region): 拓展亚太战区,新增马来西亚 (MY) 节点及本地骨干网与 RSS 活体流 (Resolves #31) 2026-04-23 01:50:15 +00:00
hotyue
e4b4c747eb chore(data): 初始化 MY (马来西亚) 战区热点词库基石,防止边缘节点初次部署时 404 2026-04-23 01:49:39 +00:00
github-actions[bot]
eabd33e6b2 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-22] 2026-04-22 19:24:05 +00:00
hotyue
233af7181f release: bump AGENT_VERSION to v3.6.4 for Trust module Live News Engine 2026-04-22 14:03:41 +00:00
github-actions[bot]
62fb19f0c5 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-22] 2026-04-22 13:49:03 +00:00
hotyue
54178ddcf1 fix(scripts): 修复 TW 战区 Yahoo RSS 拒绝 GitHub Actions IP 访问 (403) 的问题,切换至高可用 Google News TW 源 2026-04-22 13:48:06 +00:00
github-actions[bot]
92a65d8308 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-22] 2026-04-22 13:45:37 +00:00
hotyue
eaaa7dabf0 Merge branch 'main' of https://github.com/hotyue/IP-Sentinel 2026-04-22 13:43:44 +00:00
hotyue
e797c8203f fix(scripts): 修复 HK 与 TW 战区 RSS 情报源失效报 404/解析错误的问题,切换至高可用源 2026-04-22 13:43:31 +00:00
github-actions[bot]
9ecf50c153 chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [2026-04-22] 2026-04-22 13:37:10 +00:00
hotyue
c02b7eecc9 feat(scripts): 引入 v3.6.4 活体新闻融合引擎,重构 Action 流水线实现冷热数据合并原子提交 2026-04-22 13:35:20 +00:00
hotyue
6af8b6b25d chore(data): 注入全球国家级权威骨干网基石,重构 Trust 模块冷数据结构 2026-04-22 13:31:28 +00:00
hotyue
7081aa77cc fix(core): 废除 OnBootSec 相对开机时间,改用高兼容性的 OnActiveSec,彻底修复老内核系统下自动巡逻瘫痪的 Bug 2026-04-22 12:42:04 +00:00
hotyue
5e48edb030 fix(core): 废除物理阉割,全量下载模块脚本,彻底修复动态启用模块后提示 403 文件不存在的 Bug 2026-04-22 11:53:20 +00:00
github-actions[bot]
5f0f677f59 chore(data): 🤖 自动机兵:刷新全战区热点词库 [2026-04-21] 2026-04-21 19:22:42 +00:00
77 changed files with 10021 additions and 5693 deletions

View File

@@ -1,16 +1,19 @@
name: Daily Trends Factory
name: Daily Data Factory
on:
schedule:
# 每天 UTC 18:00 运行 (北京时间凌晨 02:00)
- cron: '0 18 * * *'
# 每天 UTC 03:00 执行,为各节点全天随机拉取准备好弹药
- cron: '0 3 * * *'
workflow_dispatch:
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
permissions:
contents: write
jobs:
update-trends:
update-data:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
@@ -23,15 +26,20 @@ jobs:
with:
python-version: '3.10'
- name: Execute Trends Engine
- name: Execute Trends Engine (搜索词库)
run: python scripts/fetch_trends.py
- name: Commit and Push
- name: Execute Trust URL Engine (活体新闻流融合)
run: python scripts/fetch_trust_urls.py
- name: Commit and Push All Data
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
# 一揽子添加搜索词库和地区白名单的变化
git add data/keywords/
git add data/regions/
# 防御机制:如果没有新数据,就静默退出,不产生空提交
if git diff --staged --quiet; then
@@ -39,6 +47,6 @@ jobs:
exit 0
fi
# 策略:放弃危险的 amend 强制覆盖,采用带日期的标准安全提交
git commit -m "chore(data): 🤖 自动机兵:刷新全战区热点词库 [$(date +'%Y-%m-%d')]"
git push origin main
# 策略:将两路数据的更新合并为一个原子提交
git commit -m "chore(data): 🤖 自动机兵:同步全战区热点词库与活体新闻流 [$(date +'%Y-%m-%d')]"
git push origin main

View File

@@ -2,8 +2,8 @@ name: Automated Massive UA Factory
on:
schedule:
# 每个月 1 号凌晨 00:00 执行
- cron: '0 0 1 * *'
# 每个月 1 号凌晨 04:00 执行
- cron: '0 4 1 * *'
workflow_dispatch: # 允许手动点击运行
jobs:

View File

@@ -5,6 +5,7 @@
![License](https://img.shields.io/github/license/hotyue/IP-Sentinel)
> **一个极度轻量、零感知、支持中枢遥控的 VPS IP 自动化养护与区域纠偏引擎。**
> **💡 提示:如果本项目提升了您的节点稳定性,请点击右上角点亮 🌟 Star您的支持是我们持续研发和维护指纹库的核心动力。**
📢 官方战术交流频道: 🛰️ [IP-Sentinel Matrix](https://t.me/IP_Sentinel_Matrix)
@@ -12,17 +13,18 @@
## ✨ 核心极客特性 (Core Architecture)
- **无损高并发引擎 (WAL Concurrency)**:司令部 SQLite 数据库全面激活 `WAL` (Write-Ahead Logging) 模式与毫秒级排队削峰算法。即使您同时对 500 台边缘节点发起全军总攻,也能完美规避 `database is locked` 与 Telegram `429` 频率拦截,实现 100% 战报送达
- 🪶 **抽脂级极简部署 (Zero-Bloat Native)**:全栈剔除 `pip``flask` 等臃肿第三方依赖,完全基于 Python3 原生标准库运行。安装底层强制注入 `--no-install-recommends` 防捆绑参数。无论是 128MB 内存的极简 NAT 小鸡,还是 Alpine/Arch Linux 特种系统,均可如丝般顺滑运行
- 🎛️ **扁平化指挥矩阵 (Flat Command Matrix)**[v3.6.1 重构] 引入扁平化 L0-L3 四级战区降维视图与双轨身份制。深度定制 Inline Keyboard 逃生舱交互,支持在统一哨兵终端进行原位丝滑重绘 (In-place UI Edit),实现毫秒级模块热启停与日志抓取,彻底告别刷屏烦恼
- 🔄 **全栈零信任 OTA 引擎 (Zero-Trust OTA Upgrade)**:首创双端物理熔断机制。长官可通过私有中枢,一键向全舰队下发静默热重载指令;更支持**「司令部金蝉脱壳」**,中枢大脑可在此面板自我抛出幽灵进程进行免交互直装覆盖,实现真正的全栈去 SSH 化运维
- 🛡️ **SSOT 溯源与热更新装甲 (Smooth Upgrade Engine)**:全系脚本彻底消灭硬编码,部署时动态抓取云端版本信标。自带状态机嗅探逻辑与防撞甲探测,即使是手动在终端运行安装,也仅需回车瞬间完成配置继承、数据同步与无损换代
- 🗺 **全球拓扑矩阵与活体词库 (Global Nexus)**:守护版图横跨亚欧美三大洲。接入 GitHub Actions 云端流水线,每日静默同步全球各大区当日 Google 真实热搜榜单与高权重本土站点,让伪装行为永远贴合当地网络脉搏
- 👻 **资产持久化与错峰调度 (Hash-Seeded Persona)**:摒弃随机抽取指纹,基于节点物理 IP 哈希永久锁定 3 个绝对专属设备,完美构建高权重真实家庭内网画像。叠加按需智能分频与随机防并发休眠,化解“惊群效应”
- 🖧 **底层路由死锁与高精度探针 (Hard-Bind Routing)**:底层探测引擎强力接管 curl 核心参数 (`--interface`),将发出的每一滴伪装流量死死绑定在物理网卡或隧道 IP 上。配合多级 ISP 容灾链路,彻底杜绝双栈环境下的流量溢出与 API 误判
- 📊 **深海声呐全维探针 (Deep Sea Sonar v4.0.4)**:内嵌强效正则去污的 JSON 提取引擎,无损展现免掩码的真实 IP 情报。聚合 Scamalytics、AbuseIPDB 等五大权威防欺诈库,精准嗅探代理/VPN特征、25端口及流媒体原生解锁状态并自带 Google “送中”高危预警与污染趋势图谱
- **无损高并发引擎 (WAL Concurrency)**:司令部 SQLite 数据库全面激活 `WAL` (Write-Ahead Logging) 模式与毫秒级排队算法。即使对 500 台边缘节点发起全军总攻,也能完美规避 `database is locked` 与 Telegram `429` 拦截
- 🪶 **抽脂级极简部署 (Zero-Bloat Native)**:全栈剔除第三方依赖,基于 Python3 原生标准库运行。安装强制注入 `--no-install-recommends` 防捆绑参数。无论是 128MB 内存的极简 NAT还是 Alpine 游击队容器,均可如丝般顺滑运行
- 🎛️ **扁平化指挥矩阵 (Flat Command Matrix)**:引入扁平化四级战区降维视图与双轨身份制。深度定制 Inline Keyboard 逃生舱交互,支持原位丝滑重绘 (In-place UI Edit),实现毫秒级模块热启停与跨地域深海声呐投放
- 🔄 **全栈零信任 OTA 引擎 (Zero-Trust OTA Upgrade)**:首创双端物理熔断机制。长官可通过私有中枢,一键向全舰队下发静默热重载指令;更支持**「司令部金蝉脱壳」**,实现真正的全栈去 SSH 化运维
- 🛡 **SSOT 溯源与热更新装甲 (Smooth Upgrade Engine)**:全系脚本彻底消灭硬编码,动态抓取云端版本信标。自带状态机嗅探逻辑,即便是手动在老节点执行安装,也仅需回车瞬间完成配置继承与无损换代
- 🗺️ **全球拓扑矩阵与活体词库 (Global Nexus)**:接入 GitHub Actions 云端兵工厂,每日静默同步全球各大区真实热搜榜单与高权重本土站点,让伪装行为永远贴合当地网络脉搏
- 👻 **绝对时空对齐与高频错峰 (UTC-Seeded Scheduling)**:摒弃传统随机轮询,全栈强制接管底层时钟为**绝对 UTC 时间**。全舰队以 **20 分钟 (每日 72 次)** 的极高密度进行养护巡逻,叠加基于部署锚点的天然削峰与随机防并发休眠,完美化解十万级集群的“惊群效应”与 API 熔断
- 🖧 **极速预检与三级容灾架构 (Fail-Fast & Fallback)**:底层引擎强力接管发包参数 (`--interface`) 的同时,创新引入 **4 秒极速预检 (Fail-Fast)** 雷达与**三级阶梯脱壳**机制。无论是纯 IPv6 孤岛、WARP 劫持死锁还是复杂 NAT 嵌套,系统均能瞬间避开网络黑洞,彻底杜绝探针假死与流量溢出。
**—— 💎 骨干基建特征 ——**
- 🏭 **自动化指纹兵工厂**:依托 GitHub Actions CI/CD 流水线,每月 1 日无人值守锻造 4000+ 带绝对物理分区的真实终端设备数据
- 🏭 **自动云端军工厂 (CI/CD Data Factory)**:依托 GitHub Actions 构建双轨无人值守流水线。**每月 1 日**批量锻造 4000+ 带绝对物理分区的原生终端指纹库;**每日凌晨 (UTC)** 实时抓取全球各战区 Google 真实热搜榜单与本土骨干新闻 RSS。为前线舰队源源不断地输送最鲜活的伪装弹药
- 🔒 **叹息之墙 (Zero-Trust HMAC)**:底层通讯引入 时间戳 + HMAC-SHA256 军用级动态签名。指令有效期仅 60 秒(阅后即焚),未授权请求直接触发系统级 403 物理熔断,彻底免疫中间人抓包与重放攻击。
- ☁️ **云端中枢 (Public Master)**:官方公共机器人 [@OmniBeacon_bot](https://t.me/OmniBeacon_bot) ,新手免自建,一键接入极速入伍!同时支持硬核极客私有化 SQLite 分布式部署。
- 👁️‍🗨️ **玻璃房透明遥测 (Glasshouse)**:基于 Cloudflare Workers 的全透明计数中枢,绝对零隐私收集,仅作原子累加,底层网关源码全开源。
@@ -34,8 +36,8 @@
```text
📦 IP-Sentinel
┣ 📂 .github/workflows/ # 🏭 自动化兵工厂:每月定时触发指纹生成的 CI/CD 流水线
┣ 📂 master/ # 🧠 司令部SQLite 存储、TG 监听与 Webhook 调度中心
┣ 📂 core/ # 🛡️ 边缘哨兵Webhook 被动监听、哈希锚定执行引擎
┣ 📂 master/ # 🧠 司令部SQLite 存储 (含 ip_trend_log 趋势跟踪表)、TG 监听与 Webhook 调度
┣ 📂 core/ # 🛡️ 边缘哨兵Webhook 被动监听、哈希锚定执行引擎 (集成深海声呐探测模块)
┣ 📂 scripts/ # 🐍 兵工厂引擎:基于 Python 的多物理分区 UA 生成器
┣ 📂 data/ # 🗂️ 全球数据规则库 (动态拓扑)
┃ ┣ 📜 map.json # 🌍 全球区域大脑 (v3.5.0 大洲战区拓扑)
@@ -56,11 +58,12 @@
> ☢️ **核按钮系统已就绪**:采用私有部署,您将解锁 **OTA 远程静默升级** 权限!所有私有前线节点均可通过您的 TG 面板实现一键全网代码热重载换代!
- **部署 Master (中枢大脑)**:找一台 VPS 作为司令部(仅需部署一台),执行:
- [官方部署教程](https://blog.iot-architect.com/engineering-practice/ip-sentinel-master-deployment-guide/)
```bash
curl -fsSL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/master/install_master.sh -o /tmp/ins_master.sh && sudo bash /tmp/ins_master.sh
```
- 部署 Agent (边缘哨兵):在需要养护的机器上执行 Agent 脚本,安装时选择私有独立中枢,并分别输入您自建机器人的 [Token](https://blog.iot-architect.com/engineering-practice/create-private-telegram-bot-via-botfather) 以及您的个人 [Chat ID](https://blog.iot-architect.com/engineering-practice/get-telegram-personal-id-via-userinfobot)
- [官方部署教程](https://blog.iot-architect.com/engineering-practice/ip-sentinel-installation-and-upgrade-guide/)
```Bash
curl -fsSL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/core/install.sh -o /tmp/ins_agent.sh && sudo bash /tmp/ins_agent.sh
```
@@ -72,7 +75,7 @@ curl -fsSL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/core/instal
- 关注机器人:在 TG 中关注官方安全网关 [@OmniBeacon_bot](https://t.me/OmniBeacon_bot) 并发送 /start。
- 部署 Agent在目标 VPS 上执行以下指令,安装过程中选择官方公共网关,并输入您的 Chat ID
- [官方部署教程](https://blog.iot-architect.com/engineering-practice/ip-sentinel-installation-and-upgrade-guide/)
```Bash
curl -fsSL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/core/install.sh -o /tmp/ins_agent.sh && sudo bash /tmp/ins_agent.sh
```
@@ -127,6 +130,9 @@ bash <(curl -sL https://raw.githubusercontent.com/hotyue/IP-Sentinel/legacy/core
如果你想为项目增加新的节点区域(例如德国、英国、大洋洲等),或者提供更丰富的本土化搜索词库,非常欢迎提交 Pull Request
> - 感谢 @xykt 本项目IP质量检测采用[xykt/IPQuality](https://github.com/xykt/IPQuality) 脚本!
**💡 全球节点贡献规范:**
1.`data/regions/国家代码/省州代码/` 目录下新增对应城市的配置 `.json`
2.`data/keywords/` 目录下新增或完善配套国家的词库 `kw_XX.txt`

View File

@@ -40,38 +40,27 @@ else
fi
if [ -n "$AGENT_IP" ]; then
# --- [重点升级 2: 智能防打扰注册机制] ---
LAST_IP=""
[ -f "$IP_CACHE" ] && LAST_IP=$(cat "$IP_CACHE" | tr -d '[:space:]')
# 只有当这是第一次运行,或者公网 IP 发生变动时,才发送 Telegram 申请
if [ "$AGENT_IP" != "$LAST_IP" ]; then
# [v3.5.2 核心] 携带 6 字段双轨身份发起注册申请 (展示别名,暗号尾部追加 NODE_ALIAS)
REG_MSG="👋 **[边缘节点接入申请]**%0A大区: \`${REGION_CODE}\`%0A节点: \`${NODE_ALIAS}\`%0A地址: \`${AGENT_IP}:${AGENT_PORT}\`%0A%0A⚠ **安全验证**: 为防止非法节点接入,请长按复制下方代码,并**发送给我**以完成最终授权录入:%0A%0A\`#REGISTER#|${REGION_CODE}|${NODE_NAME}|${AGENT_IP}|${AGENT_PORT}|${NODE_ALIAS}\`"
curl -s -m 5 -X POST "${TG_API_URL}" \
-d "chat_id=${CHAT_ID}" \
-d "text=${REG_MSG}" \
-d "parse_mode=Markdown" > /dev/null
echo "✅ [Agent] 已向司令部发送接入申请,请在 Telegram 手机端完成授权!"
# [静音手术] 仅在本地静默更新 IP 缓存,彻底切除重复的 TG 发信逻辑,做沉默的守夜人
echo "$AGENT_IP" > "$IP_CACHE"
echo " [Agent] 发现本地 IP 变动,已静默更新缓存: $AGENT_IP"
else
echo " [Agent] IP 未变动 ($AGENT_IP)跳过重复注册申请"
echo " [Agent] IP 未变动 ($AGENT_IP)继续后台静默监听"
fi
fi
# ================== [v3.6.3 新增: 自动生成自签名 TLS 加密证书] ==================
# [修复] 仅在私有中枢模式下生成证书。官方网关模式下CF Worker 严格拒绝自签名,必须回退 HTTP
if [ "$TG_TOKEN" != "OFFICIAL_GATEWAY_MODE" ]; then
CERT_FILE="${INSTALL_DIR}/core/cert.pem"
KEY_FILE="${INSTALL_DIR}/core/key.pem"
if [ ! -f "$CERT_FILE" ] || [ ! -f "$KEY_FILE" ]; then
echo "🔐 [Agent] 正在生成本地自签名 TLS 加密证书 (2048位 RSA)..."
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout "$KEY_FILE" -out "$CERT_FILE" \
-subj "/C=US/O=IP-Sentinel/CN=Agent-Sec" >/dev/null 2>&1 || true
fi
# [修复] 彻底废除官方网关免 TLS 的裸奔逻辑,全网强制生成证书装甲
CERT_FILE="${INSTALL_DIR}/core/cert.pem"
KEY_FILE="${INSTALL_DIR}/core/key.pem"
if [ ! -f "$CERT_FILE" ] || [ ! -f "$KEY_FILE" ]; then
echo "🔐 [Agent] 正在生成本地自签名 TLS 加密证书 (2048位 RSA)..."
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout "$KEY_FILE" -out "$CERT_FILE" \
-subj "/C=US/O=IP-Sentinel/CN=Agent-Sec" >/dev/null 2>&1 || true
fi
# ==============================================================================
@@ -85,7 +74,7 @@ import os
import html
# ================== [v3.0.4 新增密码学与解析依赖] ==================
import urllib.parse
import urllib.request # [修复] 提升至全局作用域,防止局部变量遮蔽
import urllib.request
import hmac
import hashlib
import time
@@ -93,6 +82,15 @@ import time
PORT = int(sys.argv[1])
# 🛡️ 防重放攻击 (Nonce 缓存池)
USED_SIGNS = {}
def clean_used_signs():
now = time.time()
# 清理过期签名 (超 60 秒的安全窗口)
expired = [s for s, t in USED_SIGNS.items() if now - t > 65]
for s in expired:
del USED_SIGNS[s]
# 🛡️ 提取全局鉴权 Token (利用 CHAT_ID 作为 PSK 预共享密钥)
AUTH_TOKEN = ""
if os.path.exists('/opt/ip_sentinel/config.conf'):
@@ -122,8 +120,9 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
return
try:
current_time = int(time.time())
# 校验 2时间戳防重放 (误差 ±60秒 内有效,拒绝隔夜抓包重放)
if abs(int(time.time()) - int(req_t)) > 60:
if abs(current_time - int(req_t)) > 60:
self.send_response(401)
self.end_headers()
self.wfile.write(b"401 Unauthorized: Request Expired\n")
@@ -132,6 +131,14 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
self.send_response(401)
self.end_headers()
return
# 校验 2.5:基于 60秒 窗口的精确重放拦截 (拦截 MITM 并发洗劫)
clean_used_signs()
if req_sign in USED_SIGNS:
self.send_response(401)
self.end_headers()
self.wfile.write(b"401 Unauthorized: Replay Attack Detected\n")
return
# 校验 3HMAC 数据完整性与身份合法性校验
msg = f"{req_path}:{req_t}".encode('utf-8')
@@ -143,17 +150,20 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
self.end_headers()
self.wfile.write(b"401 Unauthorized: Signature Mismatch\n")
return
# 鉴权通过,记录该签名至防重放内存池
USED_SIGNS[req_sign] = current_time
# ================== 路由分发 (恢复为安全的精确匹配) ==================
# 路由 0: 全局统筹调度 (处理 /trigger_run 一键全节点维护)
# 路由 0: 全局统筹调度
if req_path == '/trigger_run':
if os.path.exists('/opt/ip_sentinel/core/runner.sh'):
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(b"Action Accepted: runner\n")
subprocess.Popen(['bash', '/opt/ip_sentinel/core/runner.sh'])
os.system("nohup bash /opt/ip_sentinel/core/runner.sh >/dev/null 2>&1 &")
else:
self.send_response(404)
self.end_headers()
@@ -165,7 +175,7 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(b"Action Accepted: mod_google\n")
subprocess.Popen(['bash', '/opt/ip_sentinel/core/mod_google.sh'])
os.system("nohup bash /opt/ip_sentinel/core/mod_google.sh >/dev/null 2>&1 &")
else:
self.send_response(403)
self.send_header("Content-type", "text/plain")
@@ -179,7 +189,7 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(b"Action Accepted: mod_trust\n")
subprocess.Popen(['bash', '/opt/ip_sentinel/core/mod_trust.sh'])
os.system("nohup bash /opt/ip_sentinel/core/mod_trust.sh >/dev/null 2>&1 &")
else:
self.send_response(403)
self.send_header("Content-type", "text/plain")
@@ -192,7 +202,7 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(b"Action Accepted: tg_report\n")
subprocess.Popen(['bash', '/opt/ip_sentinel/core/tg_report.sh'])
os.system("nohup bash /opt/ip_sentinel/core/tg_report.sh >/dev/null 2>&1 &")
# 路由 4: 抓取并回传实时日志
elif req_path == '/trigger_log':
@@ -225,23 +235,45 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
text_msg = f"📄 <b>[{node_alias}] 实时日志 (v{local_ver}):</b>\n<pre><code>{log_data}</code></pre>"
data = urllib.parse.urlencode({
# [v4.0.3 体验升级] 引入 json 模块并改用 JSON Payload挂载返回控制台按钮
import json
node_name_cb = config.get('NODE_NAME', 'Unknown')
payload = {
'chat_id': config.get('CHAT_ID', ''),
'text': text_msg,
'parse_mode': 'HTML'
}).encode('utf-8')
'parse_mode': 'HTML',
'reply_markup': {
'inline_keyboard': [[{'text': '⚙️ 调出该节点控制台', 'callback_data': f'manage:{node_name_cb}'}]]
}
}
data = json.dumps(payload).encode('utf-8')
req = urllib.request.Request(
config.get('TG_API_URL', ''),
data=data,
# [动态化] 彻底消灭硬编码,使用运行态版本号
headers={'User-Agent': f'IP-Sentinel-Agent/{local_ver}'}
# [动态化] 彻底消灭硬编码,使用运行态版本号,并声明 JSON 头
headers={
'User-Agent': f'IP-Sentinel-Agent/{local_ver}',
'Content-Type': 'application/json'
}
)
urllib.request.urlopen(req, timeout=10)
except Exception as e:
print(f"Log transmission failed: {e}")
# ================== [v4.0.0 新增: 触发深海声呐] ==================
elif req_path == '/trigger_quality':
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(b"Action Accepted: trigger_quality\n")
if os.path.exists('/opt/ip_sentinel/core/mod_quality.sh'):
os.system("nohup bash /opt/ip_sentinel/core/mod_quality.sh >/dev/null 2>&1 &")
# =================================================================
# 路由 5: 节点重命名展示别名同步接口 (Base64 终极防御版)
elif req_path == '/trigger_rename':
b64_alias = query.get('b64', [''])[0]
@@ -387,7 +419,14 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
# [修复] 逃逸 Systemd Cgroup并引入 bash -n 语法树校验防砖机制
import shutil
import base64
# 动态提取部署时的源地址,废除强制写死 main 分支,保障隔离测试环境
repo_url = "https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
if os.path.exists('/opt/ip_sentinel/core/install.sh'):
with open('/opt/ip_sentinel/core/install.sh', 'r') as f:
for line in f:
if line.startswith('REPO_RAW_URL='):
repo_url = line.split('=', 1)[1].strip('"\'')
break
# 动态构建报错回执文本 (第一层 Base64 隔离换行与特殊字符)
err_msg = f"❌ **OTA 熔断告警**\n📍 节点: `{config_mem.get('NODE_ALIAS', '未知')}`\n⚠ 原因: 脚本语法校验(bash -n)未通过,下载可能不完整。\n🚀 状态: 升级已取消,节点安全。"
@@ -417,7 +456,8 @@ fi
else:
full_cmd = f"nohup bash -c \"echo '{ota_script_b64}' | base64 -d | bash\" >/dev/null 2>&1 &"
subprocess.Popen(full_cmd, shell=True)
# 彻底统一为 os.system消灭最后一个可能游离的 Popen 僵尸进程
os.system(full_cmd)
except Exception as e:
self.send_response(500)
@@ -435,9 +475,18 @@ import socket
# ================== [v3.0.3 变更: 引入多线程模型抵抗 Slowloris 攻击] ==================
class ThreadedServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
allow_reuse_address = True # 开启端口复用,防止热重启时端口冲突
# [核心修复] 显式关闭 V6ONLY 参数,治愈大量云主机纯双栈下的 IPv4 耳聋现象
def server_bind(self):
if self.address_family == socket.AF_INET6:
try:
self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
except Exception:
pass
super().server_bind()
try:
# 1. 优先尝试监听双栈/IPv6 (大多数 Linux 默认支持 IPv4 映射接入)
# 1. 优先尝试监听双栈/IPv6
ThreadedServer.address_family = socket.AF_INET6
httpd = ThreadedServer(("::", PORT), AgentHandler)
except Exception:
@@ -445,22 +494,13 @@ except Exception:
ThreadedServer.address_family = socket.AF_INET
httpd = ThreadedServer(("0.0.0.0", PORT), AgentHandler)
# ================== [v3.6.3 核心: 挂载 TLS 加密隧道 (动态适配兼容版)] ==================
# ================== [v3.6.3 核心: 挂载 TLS 加密隧道 (强制装甲版)] ==================
import ssl
cert_path = '/opt/ip_sentinel/core/cert.pem'
key_path = '/opt/ip_sentinel/core/key.pem'
# 核心判定:提取配置中的 TOKEN 标识
is_official_gateway = False
if os.path.exists('/opt/ip_sentinel/config.conf'):
with open('/opt/ip_sentinel/config.conf', 'r') as f:
for line in f:
if line.startswith('TG_TOKEN=') and 'OFFICIAL_GATEWAY_MODE' in line:
is_official_gateway = True
break
# 仅在非官方网关且证书存在时,才挂载 TLS 装甲
if not is_official_gateway and os.path.exists(cert_path) and os.path.exists(key_path):
# 全网强制启用 TLS 装甲,彻底消灭 HTTP 裸奔漏洞
if os.path.exists(cert_path) and os.path.exists(key_path):
try:
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile=cert_path, keyfile=key_path)

View File

@@ -14,17 +14,22 @@ if [ "$EUID" -ne 0 ]; then
exit 1
fi
# 🟢 [防劫持沙盒] 创建具备随机哈希且仅 root 可见的专属安全工作区
SECURE_TMP=$(mktemp -d /tmp/ips_install.XXXXXX)
# 确保脚本退出、异常中断或被强杀时,自动销毁沙盒,不留痕迹
trap 'rm -rf "$SECURE_TMP"' EXIT HUP INT QUIT TERM
# 你的 GitHub 仓库 Raw 数据直链前缀
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
# 临时改为开发地址用于测试
# REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/v3.6.2-rc"
INSTALL_DIR="/opt/ip_sentinel"
CONFIG_FILE="${INSTALL_DIR}/config.conf"
# [核心: 动态提取 Agent 专属版本锚点 (KV 解析法)]
TARGET_VERSION=$(curl -s -m 3 "${REPO_RAW_URL}/version.txt" | grep "^AGENT_VERSION=" | cut -d'=' -f2 | tr -d '[:space:]')
# [修复] 增加 -L 与双栈容灾 (-4),解决纯 V6 或 V6 优先机器连接 GitHub Raw 易超时的问题
TARGET_VERSION=$( (curl -sL -m 5 "${REPO_RAW_URL}/version.txt" || curl -4 -sL -m 5 "${REPO_RAW_URL}/version.txt") 2>/dev/null | grep "^AGENT_VERSION=" | cut -d'=' -f2 | tr -d '[:space:]')
# 🛡️ 兜底防线:如果网络波动拉取失败,启用内置的安全兜底版本
TARGET_VERSION=${TARGET_VERSION:-"3.5.1"}
TARGET_VERSION=${TARGET_VERSION:-"4.0.6"}
# 轻量级版本号比对函数 (例如: version_lt "3.3.1" "3.4.0" 返回 true)
version_lt() {
@@ -35,7 +40,7 @@ version_lt() {
echo -e "\n[1/7] 正在探测并安装基础环境依赖 (curl, jq, cron, procps, python3)..."
# 定义必须检测的核心命令
REQUIRED_CMDS=("curl" "jq" "crontab" "pgrep" "python3")
REQUIRED_CMDS=("curl" "jq" "crontab" "pgrep" "python3" "openssl")
MISSING_CMDS=()
# 基础探测:预检查缺失的命令
@@ -54,7 +59,7 @@ if [ ${#MISSING_CMDS[@]} -gt 0 ]; then
# Debian / Ubuntu 系列
apt-get update -y >/dev/null 2>&1
# [v3.6.3 抽脂级优化] 注入 --no-install-recommends 拒绝捆绑销售,大幅节省磁盘与内存
apt-get install -y --no-install-recommends curl jq cron procps python3 >/dev/null 2>&1
apt-get install -y --no-install-recommends curl jq cron procps python3 openssl >/dev/null 2>&1
systemctl enable cron >/dev/null 2>&1 && systemctl start cron >/dev/null 2>&1
elif command -v yum >/dev/null 2>&1 || command -v dnf >/dev/null 2>&1; then
@@ -66,20 +71,21 @@ if [ ${#MISSING_CMDS[@]} -gt 0 ]; then
# [v3.6.3 抽脂级优化] 强行关闭 DNF 的弱依赖拉取
OPT_ARGS="--setopt=install_weak_deps=False"
fi
$PKG_MGR install -y $OPT_ARGS curl jq cronie procps-ng python3 >/dev/null 2>&1
$PKG_MGR install -y $OPT_ARGS curl jq cronie procps-ng python3 openssl >/dev/null 2>&1
systemctl enable crond >/dev/null 2>&1 && systemctl start crond >/dev/null 2>&1
elif command -v apk >/dev/null 2>&1; then
# Alpine 本身就是极致精简,无需特殊参数
echo "Alpine 探测到系统类型为 Alpine Linux正在执行轻量级安装..."
apk add --no-cache curl jq dcron procps python3 bash >/dev/null 2>&1
# [修复] 新版 Alpine 已废弃 dcron。优先尝试 cronie若失败则信任自带 busybox-cron并移除屏蔽以便暴露报错
apk add --no-cache curl jq cronie procps python3 bash openssl || apk add --no-cache curl jq procps python3 bash openssl
mkdir -p /var/spool/cron/crontabs
rc-update add crond default >/dev/null 2>&1
service crond start >/dev/null 2>&1
elif command -v pacman >/dev/null 2>&1; then
# Arch Linux 系列
pacman -Sy --noconfirm curl jq cronie procps-ng python >/dev/null 2>&1
# Arch Linux 系列 (采用 --needed 防重复,剥离 -y 防部分升级炸系统)
pacman -S --needed --noconfirm curl jq cronie procps-ng python openssl >/dev/null 2>&1
mkdir -p /root/.cache/crontab 2>/dev/null
systemctl enable cronie >/dev/null 2>&1 && systemctl start cronie >/dev/null 2>&1
@@ -87,10 +93,11 @@ if [ ${#MISSING_CMDS[@]} -gt 0 ]; then
# 无法识别的系统:退出并给出清晰的引导信息 (同步更新防捆绑参数)
echo -e "\033[31m❌ 自动安装失败:系统未知的包管理器。\033[0m"
echo -e "\033[33m⚠ 请根据您的操作系统,手动执行以下安装命令后重新运行本脚本:\033[0m"
echo -e " Debian/Ubuntu: \033[36mapt-get update && apt-get install -y --no-install-recommends curl jq cron procps python3\033[0m"
echo -e " CentOS/RHEL: \033[36myum install -y curl jq cronie procps-ng python3\033[0m"
echo -e " Alpine Linux: \033[36mapk add --no-cache curl jq dcron procps python3 bash\033[0m"
echo -e " Arch Linux: \033[36mpacman -Sy curl jq cronie procps-ng python\033[0m"
echo -e " Debian/Ubuntu: \033[36mapt-get update && apt-get install -y --no-install-recommends curl jq cron procps python3 openssl\033[0m"
echo -e " CentOS/RHEL: \033[36myum install -y curl jq cronie procps-ng python3 openssl\033[0m"
echo -e " Alpine Linux: \033[36mapk add --no-cache curl jq cronie procps python3 bash openssl\033[0m"
# Arch 用户,如果出问题,应该用 -Syu 进行全系统安全更新
echo -e " Arch Linux: \033[36mpacman -Syu --needed curl jq cronie procps-ng python openssl\033[0m"
exit 1
fi
@@ -108,9 +115,8 @@ echo -e "\033[32m✅ 基础环境检测通过。\033[0m"
# 2. 交互式引导与动态地图解析 (v3.0 全球网络)
echo -e "\n[2/7] 正在连线云端,拉取全球节点地图..."
curl -sL "${REPO_RAW_URL}/data/map.json" -o "/tmp/map.json"
if [ ! -s "/tmp/map.json" ]; then
curl -sL "${REPO_RAW_URL}/data/map.json" -o "${SECURE_TMP}/map.json"
if [ ! -s "${SECURE_TMP}/map.json" ]; then
echo -e "\033[31m❌ 拉取全球地图失败!请检查网络或 GitHub 仓库地址。\033[0m"
exit 1
fi
@@ -135,10 +141,10 @@ else
if [ "$ACTION_CHOICE" == "2" ]; then
echo -e "\n⏳ 正在拉取卸载程序..."
curl -sL "${REPO_RAW_URL}/core/uninstall.sh" -o "/tmp/ip_uninstall.sh"
chmod +x "/tmp/ip_uninstall.sh"
bash "/tmp/ip_uninstall.sh"
rm -f "/tmp/ip_uninstall.sh"
curl -sL "${REPO_RAW_URL}/core/uninstall.sh" -o "${SECURE_TMP}/ip_uninstall.sh"
chmod +x "${SECURE_TMP}/ip_uninstall.sh"
bash "${SECURE_TMP}/ip_uninstall.sh"
rm -f "${SECURE_TMP}/ip_uninstall.sh"
exit 0
fi
@@ -167,26 +173,30 @@ else
fi
# ================== [v3.1.1/v3.2.2 优化: 安装前环境纯净度清理] ==================
echo -e "\n⏳ 正在清理旧版守护进程与冗余任务..."
# [新增] 优雅停止 Systemd 服务,防止代码替换时引发无限复活风暴
if command -v systemctl >/dev/null 2>&1; then
systemctl stop ip-sentinel-runner.timer ip-sentinel-updater.timer ip-sentinel-report.timer ip-sentinel-agent-daemon.service >/dev/null 2>&1 || true
fi
echo -e "\n⏳ 正在清理系统定时任务中的旧版条目..."
# 1. 强制超度可能存活的 Webhook 及各类看门狗进程,释放端口
pkill -9 -f "webhook.py" >/dev/null 2>&1 || true
pkill -9 -f "agent_daemon.sh" >/dev/null 2>&1 || true
pkill -9 -f "runner.sh" >/dev/null 2>&1 || true
# 1. 清除系统定时任务 (Cron) 中的旧版条目 (安全容错版)
crontab -l 2>/dev/null | grep -v "ip_sentinel" > "${SECURE_TMP}/cron_clean" || true
# [追加 >/dev/null 2>&1 堵死 Alpine 的脏话输出]
[ -f "${SECURE_TMP}/cron_clean" ] && crontab "${SECURE_TMP}/cron_clean" >/dev/null 2>&1
rm -f "${SECURE_TMP}/cron_clean"
# 2. 清除系统定时任务 (Cron) 中的旧版条目 (安全容错版)
crontab -l 2>/dev/null | grep -v "ip_sentinel" > /tmp/cron_clean || true
[ -f /tmp/cron_clean ] && crontab /tmp/cron_clean 2>/dev/null
rm -f /tmp/cron_clean
# ==========================================
# 🛑 [物理抹除] 彻底扫除 Alpine 系统的底层残留与双路径文件
# ==========================================
for CRON_FILE in "/var/spool/cron/crontabs/root" "/etc/crontabs/root"; do
if [ -f "$CRON_FILE" ]; then
grep -v "ip_sentinel" "$CRON_FILE" > "${CRON_FILE}.tmp" 2>/dev/null || true
cat "${CRON_FILE}.tmp" > "$CRON_FILE" 2>/dev/null || true
rm -f "${CRON_FILE}.tmp" 2>/dev/null
fi
done
# 清理 OpenRC 开机启动项
rm -f /etc/local.d/ip_sentinel.start 2>/dev/null
# 3. 抹除旧版核心代码,杜绝代码冲突 (根据模式分流)
if [ "$UPGRADE_MODE" == "true" ]; then
# 升级模式:销毁核心引擎,严格保留 config 与 data
rm -rf "${INSTALL_DIR}/core" 2>/dev/null
# [修复] 升级模式:不再提前销毁核心引擎,改为后续下载成功后的原子化替换,彻底防止断网变砖!
if [ "$KEEP_LOGS" == "false" ]; then
rm -rf "${INSTALL_DIR}/logs" 2>/dev/null
echo -e "🗑️ 历史日志已按指令清空。"
@@ -209,13 +219,13 @@ if [ "$UPGRADE_MODE" == "false" ]; then
# 📍 动态零级菜单:战区(大洲)选择
echo -e "\n\033[36m📍 【第零级】请选择目标战区 (Continent):\033[0m"
jq -r '.continents[] | "\(.id)|\(.name)"' /tmp/map.json > /tmp/continents.txt
jq -r '.continents[] | "\(.id)|\(.name)"' "${SECURE_TMP}/map.json" > "${SECURE_TMP}/continents.txt"
i=1; CONT_MAP=()
while IFS="|" read -r cont_id cont_name; do
echo " $i) $cont_name"
CONT_MAP[$i]="$cont_id"
((i++))
done < /tmp/continents.txt
done < "${SECURE_TMP}/continents.txt"
read -p "请输入选择 [1-$((i-1))] (默认1): " CONT_SEL
CONT_SEL=${CONT_SEL:-1}
@@ -223,14 +233,14 @@ if [ "$UPGRADE_MODE" == "false" ]; then
# 📍 动态一级菜单:国家选择 (基于选中战区)
echo -e "\n\033[36m📍 【第一级】正在检索 [$CONT_ID] 战区下的国家/地区...\033[0m"
jq -r ".continents[] | select(.id==\"$CONT_ID\") | .countries[] | \"\(.id)|\(.name)|\(.keyword_file)\"" /tmp/map.json > /tmp/countries.txt
jq -r ".continents[] | select(.id==\"$CONT_ID\") | .countries[] | \"\(.id)|\(.name)|\(.keyword_file)\"" "${SECURE_TMP}/map.json" > "${SECURE_TMP}/countries.txt"
i=1; COUNTRY_MAP=(); KEYWORD_MAP=()
while IFS="|" read -r c_id c_name k_file; do
echo " $i) $c_name"
COUNTRY_MAP[$i]="$c_id"
KEYWORD_MAP[$i]="$k_file"
((i++))
done < /tmp/countries.txt
done < "${SECURE_TMP}/countries.txt"
read -p "请输入选择 [1-$((i-1))] (默认1): " C_SEL
C_SEL=${C_SEL:-1}
@@ -240,11 +250,11 @@ if [ "$UPGRADE_MODE" == "false" ]; then
# 📍 动态二级菜单:省/州选择 (基于选中战区和国家)
echo -e "\n\033[36m📍 【第二级】正在检索 [$COUNTRY_ID] 的行政区数据...\033[0m"
jq -r ".continents[] | select(.id==\"$CONT_ID\") | .countries[] | select(.id==\"$COUNTRY_ID\") | .states[] | \"\(.id)|\(.name)\"" /tmp/map.json > /tmp/states.txt
STATE_COUNT=$(wc -l < /tmp/states.txt)
jq -r ".continents[] | select(.id==\"$CONT_ID\") | .countries[] | select(.id==\"$COUNTRY_ID\") | .states[] | \"\(.id)|\(.name)\"" "${SECURE_TMP}/map.json" > "${SECURE_TMP}/states.txt"
STATE_COUNT=$(wc -l < "${SECURE_TMP}/states.txt")
if [ "$STATE_COUNT" -eq 1 ]; then
IFS="|" read -r STATE_ID STATE_NAME < /tmp/states.txt
IFS="|" read -r STATE_ID STATE_NAME < "${SECURE_TMP}/states.txt"
echo -e "\033[32m💡 该国家下仅有单一配置 [$STATE_NAME],已自动跃迁。\033[0m"
else
i=1; STATE_MAP=()
@@ -252,7 +262,7 @@ if [ "$UPGRADE_MODE" == "false" ]; then
echo " $i) $s_name"
STATE_MAP[$i]="$s_id"
((i++))
done < /tmp/states.txt
done < "${SECURE_TMP}/states.txt"
read -p "请输入选择 [1-$((i-1))] (默认1): " S_SEL
S_SEL=${S_SEL:-1}
STATE_ID="${STATE_MAP[$S_SEL]}"
@@ -260,11 +270,11 @@ if [ "$UPGRADE_MODE" == "false" ]; then
# 📍 动态三级菜单:城市选择 (基于战区、国家、州三层过滤)
echo -e "\n\033[36m📍 【第三级】请锁定具体城市节点:\033[0m"
jq -r ".continents[] | select(.id==\"$CONT_ID\") | .countries[] | select(.id==\"$COUNTRY_ID\") | .states[] | select(.id==\"$STATE_ID\") | .cities[] | \"\(.id)|\(.name)\"" /tmp/map.json > /tmp/cities.txt
CITY_COUNT=$(wc -l < /tmp/cities.txt)
jq -r ".continents[] | select(.id==\"$CONT_ID\") | .countries[] | select(.id==\"$COUNTRY_ID\") | .states[] | select(.id==\"$STATE_ID\") | .cities[] | \"\(.id)|\(.name)\"" "${SECURE_TMP}/map.json" > "${SECURE_TMP}/cities.txt"
CITY_COUNT=$(wc -l < "${SECURE_TMP}/cities.txt")
if [ "$CITY_COUNT" -eq 1 ]; then
IFS="|" read -r CITY_ID CITY_NAME < /tmp/cities.txt
IFS="|" read -r CITY_ID CITY_NAME < "${SECURE_TMP}/cities.txt"
echo -e "\033[32m💡 该区域下仅有单一城市 [$CITY_NAME],已自动锁定。\033[0m"
else
i=1; CITY_MAP=(); CITY_NAME_MAP=()
@@ -273,7 +283,7 @@ if [ "$UPGRADE_MODE" == "false" ]; then
CITY_MAP[$i]="$c_id"
CITY_NAME_MAP[$i]="$c_name"
((i++))
done < /tmp/cities.txt
done < "${SECURE_TMP}/cities.txt"
read -p "请输入选择 [1-$((i-1))] (默认1): " CI_SEL
CI_SEL=${CI_SEL:-1}
CITY_ID="${CITY_MAP[$CI_SEL]}"
@@ -281,7 +291,7 @@ if [ "$UPGRADE_MODE" == "false" ]; then
fi
# 清理临时文件 (增加清理 continents.txt)
rm -f /tmp/map.json /tmp/continents.txt /tmp/countries.txt /tmp/states.txt /tmp/cities.txt
rm -f "${SECURE_TMP}/map.json" "${SECURE_TMP}/continents.txt" "${SECURE_TMP}/countries.txt" "${SECURE_TMP}/states.txt" "${SECURE_TMP}/cities.txt"
# 本地工作目录初始化 (支持 v3.0 的深度层级)
mkdir -p "${INSTALL_DIR}/core"
@@ -321,11 +331,12 @@ if [ "$UPGRADE_MODE" == "false" ]; then
# [v3.6.0 优化] 使用 OSC 8 终端超链接协议,实现“点击即打开”的极客交互
echo -e "\n\033[36m📘 私有 Bot 创建教程: \033[4m\033]8;;https://blog.iot-architect.com/engineering-practice/create-private-telegram-bot-via-botfather/\033\\👉 [点击此处直接在浏览器中打开] 👈\033]8;;\033\\\033[0m"
echo -e "\033[90m (若您的终端较老不支持点击,请手动复制: https://blog.iot-architect.com/engineering-practice/create-private-telegram-bot-via-botfather/ )\033[0m"
read -p "请输入您的私有 Telegram Bot Token: " USER_TOKEN
read -p "请输入您的私有 Telegram Bot Token: " RAW_TOKEN
USER_TOKEN=$(echo "$RAW_TOKEN" | tr -cd 'a-zA-Z0-9_:-')
# 🛡️ 核心防误触修复:拦截空回车或粘贴换行导致的跳过 Bug
while [ -z "$USER_TOKEN" ]; do
read -p "⚠️ Token 不能为空,请重新输入您的 Bot Token: " USER_TOKEN
read -p "⚠️ Token 不能为空或包含非法字符,请重新输入: " RAW_TOKEN
USER_TOKEN=$(echo "$RAW_TOKEN" | tr -cd 'a-zA-Z0-9_:-')
done
TG_TOKEN="$USER_TOKEN"
@@ -348,7 +359,9 @@ if [ "$UPGRADE_MODE" == "false" ]; then
echo -e "\n\033[33m💡 提示:如果您不知道下方自己的 Chat ID 是什么,可以关注 @userinfobot 获取。\033[0m"
echo -e "\033[36m📘 查看图文教程: \033[4m\033]8;;https://blog.iot-architect.com/engineering-practice/get-telegram-personal-id-via-userinfobot/\033\\👉 [点击此处直接在浏览器中打开] 👈\033]8;;\033\\\033[0m"
echo -e "\033[90m (若您的终端较老不支持点击,请手动复制: https://blog.iot-architect.com/engineering-practice/get-telegram-personal-id-via-userinfobot/ )\033[0m"
read -p "请输入你的 Chat ID (必须准确,否则无法联控): " CHAT_ID
read -p "请输入你的 Chat ID (必须准确,否则无法联控): " RAW_CHAT_ID
# 强制只保留数字和负号,封死注入
CHAT_ID=$(echo "$RAW_CHAT_ID" | tr -cd '0-9-')
# ================== [v3.0.3 变更: 智能随机高位端口生成系统] ==================
echo -e "\n\033[36m[4.2/7] 正在构建 Webhook 安全通信隧道...\033[0m"
@@ -406,7 +419,8 @@ if [ "$UPGRADE_MODE" == "false" ]; then
if [ ${#IP_OPTIONS[@]} -eq 0 ]; then
echo -e "\033[33m⚠ 雷达受阻:未能自动探测到公网 IP请手动指定。\033[0m"
read -p "请输入您要绑定的公网 IP (v4 或 v6): " PUBLIC_IP
read -p "请输入您要绑定的公网 IP (v4 或 v6): " RAW_PUBLIC_IP
PUBLIC_IP=$(echo "$RAW_PUBLIC_IP" | tr -cd 'a-fA-F0-9.:[]')
[[ "$PUBLIC_IP" == *":"* ]] && IP_PREF="6" || IP_PREF="4"
else
echo "📍 发现可用出口 IP请选择要注册与养护的锚点:"
@@ -580,7 +594,8 @@ if [ "$UPGRADE_MODE" == "true" ]; then
BIND_IP="$NEW_BIND_IP"
else
# 如果是未来再升级,配置文件已是最新,直接提取变量供安装脚本尾部使用
SAFE_PUBLIC_IP=$(grep "^PUBLIC_IP=" "$CONFIG_FILE" | cut -d'"' -f2)
# [修复] 避免 cut 提取无引号变量失败,直接复用已 source 的原生变量
SAFE_PUBLIC_IP="${PUBLIC_IP}"
fi
# [v3.5.2 热修复] 兼容老版本没有 NODE_NAME 和 NODE_ALIAS 的情况,无损补齐
@@ -609,43 +624,69 @@ if [ "$UPGRADE_MODE" == "true" ]; then
fi
# ========================================================================
# 6. 拉取全套组件 (按需下载,绝不浪费空间)
echo -e "\n[6/7] 正在根据模块开关部署核心引擎与热数据..."
# 确保目录在升级模式下也能被正确建立
mkdir -p "${INSTALL_DIR}/core"
# 6. 拉取全套组件 (原子化升级,防断网变砖)
echo -e "\n[6/7] 正在部署核心引擎与热数据..."
mkdir -p "${INSTALL_DIR}/data/keywords"
# 基础公共组件
curl -sL "${REPO_RAW_URL}/core/runner.sh" -o "${INSTALL_DIR}/core/runner.sh"
curl -sL "${REPO_RAW_URL}/core/updater.sh" -o "${INSTALL_DIR}/core/updater.sh"
curl -sL "${REPO_RAW_URL}/core/tg_report.sh" -o "${INSTALL_DIR}/core/tg_report.sh"
curl -sL "${REPO_RAW_URL}/core/agent_daemon.sh" -o "${INSTALL_DIR}/core/agent_daemon.sh"
curl -sL "${REPO_RAW_URL}/core/uninstall.sh" -o "${INSTALL_DIR}/core/uninstall.sh"
curl -sL "${REPO_RAW_URL}/data/user_agents.txt" -o "${INSTALL_DIR}/data/user_agents.txt"
# [核心修复] 开辟临时下载区,确保下载 100% 成功后再替换旧核心
TMP_CORE="${SECURE_TMP}/core_update"
mkdir -p "$TMP_CORE"
# 动态按需组件
if [ "$ENABLE_GOOGLE" == "true" ]; then
curl -sL "${REPO_RAW_URL}/core/mod_google.sh" -o "${INSTALL_DIR}/core/mod_google.sh"
# [v3.2.2 修复] 动态匹配词库下载逻辑
if [ "$UPGRADE_MODE" == "false" ]; then
curl -sL "${REPO_RAW_URL}/data/keywords/${KEYWORD_FILE}" -o "${INSTALL_DIR}/data/keywords/${KEYWORD_FILE}"
else
# 升级模式:利用已有的 REGION_CODE 更新通用词库
curl -sL "${REPO_RAW_URL}/data/keywords/kw_${REGION_CODE}.txt" -o "${INSTALL_DIR}/data/keywords/kw_${REGION_CODE}.txt" 2>/dev/null || true
fi
# 拉取核心代码至临时区
curl -sL "${REPO_RAW_URL}/core/runner.sh" -o "${TMP_CORE}/runner.sh"
curl -sL "${REPO_RAW_URL}/core/updater.sh" -o "${TMP_CORE}/updater.sh"
curl -sL "${REPO_RAW_URL}/core/tg_report.sh" -o "${TMP_CORE}/tg_report.sh"
curl -sL "${REPO_RAW_URL}/core/agent_daemon.sh" -o "${TMP_CORE}/agent_daemon.sh"
curl -sL "${REPO_RAW_URL}/core/uninstall.sh" -o "${TMP_CORE}/uninstall.sh"
curl -sL "${REPO_RAW_URL}/core/mod_google.sh" -o "${TMP_CORE}/mod_google.sh"
curl -sL "${REPO_RAW_URL}/core/mod_trust.sh" -o "${TMP_CORE}/mod_trust.sh"
curl -sL "${REPO_RAW_URL}/core/mod_quality.sh" -o "${TMP_CORE}/mod_quality.sh"
# 🛡️ 防砖终极校验:检查关键文件是否真实存在且不为空
if [ ! -s "${TMP_CORE}/runner.sh" ] || [ ! -s "${TMP_CORE}/agent_daemon.sh" ]; then
echo -e "\033[31m❌ 致命错误:核心代码拉取失败!网络阻断或 GitHub Raw 异常。\033[0m"
echo "🛡️ 防砖机制触发:已中止覆盖,旧版哨兵引擎仍安全存活中。"
rm -rf "$TMP_CORE"
exit 1
fi
if [ "$ENABLE_TRUST" == "true" ]; then
curl -sL "${REPO_RAW_URL}/core/mod_trust.sh" -o "${INSTALL_DIR}/core/mod_trust.sh"
# 🟢 [原子化交接核心]: 校验完美通过,新代码已在本地备妥!
# 此时再以雷霆手段镇压旧进程,杜绝遗言陷阱与断网变砖的可能!
echo "⏳ 新引擎校验通过,正在抹杀旧版守护进程..."
if command -v systemctl >/dev/null 2>&1; then
systemctl kill --signal=SIGKILL ip-sentinel-agent-daemon.service >/dev/null 2>&1 || true
systemctl stop ip-sentinel-runner.timer ip-sentinel-updater.timer ip-sentinel-report.timer ip-sentinel-agent-daemon.service >/dev/null 2>&1 || true
fi
pkill -9 -f "webhook.py" >/dev/null 2>&1 || true
pkill -9 -f "agent_daemon.sh" >/dev/null 2>&1 || true
pkill -9 -f "runner.sh" >/dev/null 2>&1 || true
pkill -9 -f "tg_report.sh" >/dev/null 2>&1 || true
pkill -9 -f "updater.sh" >/dev/null 2>&1 || true
pkill -9 -f "sentinel_scheduler.sh" >/dev/null 2>&1 || true
# 执行代码目录的物理替换
rm -rf "${INSTALL_DIR}/core" 2>/dev/null
mv "$TMP_CORE" "${INSTALL_DIR}/core"
chmod +x ${INSTALL_DIR}/core/*.sh
# 拉取热数据与词库
curl -sL "${REPO_RAW_URL}/data/user_agents.txt" -o "${INSTALL_DIR}/data/user_agents.txt"
if [ "$UPGRADE_MODE" == "false" ]; then
curl -sL "${REPO_RAW_URL}/data/keywords/${KEYWORD_FILE}" -o "${INSTALL_DIR}/data/keywords/${KEYWORD_FILE}"
else
# 升级模式:利用已有的 REGION_CODE 更新通用词库
curl -sL "${REPO_RAW_URL}/data/keywords/kw_${REGION_CODE}.txt" -o "${INSTALL_DIR}/data/keywords/kw_${REGION_CODE}.txt" 2>/dev/null || true
fi
# 7. 配置系统定时任务 (高频调度与看门狗)
echo -e "\n[7/7] 正在注入系统守护进程与调度器..."
# [v3.3.0 新增] 初始化 UA 指纹库更新时间戳,确立 30 天滚动周期的计算锚点
echo $(date +%s) > "${INSTALL_DIR}/core/.ua_last_update"
# [时钟同步核心] 获取部署时的绝对 UTC 时间锚点,用于打散全球节点的云端拉取并发
DEPLOY_UTC_HOUR=$(date -u +%H)
DEPLOY_UTC_MIN=$(date -u +%M)
# [v3.3.0 新增] 初始化 UA 指纹库更新时间戳,确立 30 天滚动周期的计算锚点 (强制 UTC)
echo $(date -u +%s) > "${INSTALL_DIR}/core/.ua_last_update"
if command -v systemctl >/dev/null 2>&1; then
echo "💡 检测到 Systemd 环境,正在部署原生守护服务..."
@@ -669,8 +710,8 @@ EOF
[Unit]
Description=Timer for IP-Sentinel Runner Service
[Timer]
OnBootSec=10
OnUnitActiveSec=30min
# [频率优化] 改用严格的 20 分钟步进,杜绝 OTA 瞬间的并发走火!
OnCalendar=*:0/20
RandomizedDelaySec=180
Persistent=true
Unit=ip-sentinel-runner.service
@@ -697,7 +738,8 @@ EOF
[Unit]
Description=Timer for IP-Sentinel Updater Service
[Timer]
OnCalendar=*-*-* 03:00:00
# [绝对 UTC 锚点] 每天精确在部署的时刻触发,实现全球请求的天然削峰
OnCalendar=*-*-* ${DEPLOY_UTC_HOUR}:${DEPLOY_UTC_MIN}:00 UTC
Persistent=true
Unit=ip-sentinel-updater.service
[Install]
@@ -727,7 +769,8 @@ EOF
[Unit]
Description=Timer for IP-Sentinel Telegram Report Service
[Timer]
OnCalendar=*-*-* 08:00:00
# [绝对 UTC 锚点] 全球统一:每天 UTC 16:00 准时向司令部发送战报
OnCalendar=*-*-* 16:00:00 UTC
Unit=ip-sentinel-report.service
[Install]
WantedBy=timers.target
@@ -753,28 +796,131 @@ WantedBy=multi-user.target
EOF
# [修复竞态]: 提前写入公网 IP 缓存,阻断重复推送
echo "$SAFE_PUBLIC_IP" > "${INSTALL_DIR}/core/.last_ip"
# 强制使用无参数 curl 裸奔探测,对齐 agent_daemon 的认知,防止双栈机型 IPv4/v6 认知错乱导致重启误报
DAEMON_IP=$( (curl -s -m 5 api.ip.sb/ip || curl -s -m 5 ifconfig.me) 2>/dev/null | tr -d '[:space:]' )
[ -n "$DAEMON_IP" ] && echo "$DAEMON_IP" > "${INSTALL_DIR}/core/.last_ip" || echo "$(echo "$SAFE_PUBLIC_IP" | tr -d '[]')" > "${INSTALL_DIR}/core/.last_ip"
systemctl daemon-reload
systemctl enable --now ip-sentinel-report.timer
systemctl enable --now ip-sentinel-agent-daemon.service
fi
else
echo "💡 未检测到 Systemd (可能是 Alpine Linux),回退到 Cron 调度模式..."
crontab -l 2>/dev/null | grep -v "ip_sentinel" > /tmp/cron_backup || true
echo "*/30 * * * * ${INSTALL_DIR}/core/runner.sh >/dev/null 2>&1" >> /tmp/cron_backup
echo "0 3 * * * ${INSTALL_DIR}/core/updater.sh >/dev/null 2>&1" >> /tmp/cron_backup
if [[ -n "$TG_TOKEN" ]] && [[ -n "$CHAT_ID" ]]; then
echo "0 8 * * * ${INSTALL_DIR}/core/tg_report.sh >/dev/null 2>&1" >> /tmp/cron_backup
echo "$SAFE_PUBLIC_IP" > "${INSTALL_DIR}/core/.last_ip"
echo "@reboot nohup bash ${INSTALL_DIR}/core/agent_daemon.sh >/dev/null 2>&1 &" >> /tmp/cron_backup
echo "* * * * * nohup bash ${INSTALL_DIR}/core/agent_daemon.sh >/dev/null 2>&1 &" >> /tmp/cron_backup
nohup bash "${INSTALL_DIR}/core/agent_daemon.sh" >/dev/null 2>&1 &
else
echo "💡 未检测到 Systemd,正在配置备用调度器 (兼容 Alpine/OpenRC)..."
# ==========================================
# 🛑 智能环境嗅探: 判定是否为受限的 Alpine 容器环境
# ==========================================
IS_RESTRICTED_ALPINE="false"
if [ -f /etc/alpine-release ]; then
# 探测虚拟化类型:/proc/vz(OpenVZ), environ包含lxc(LXC), /.dockerenv(Docker)
if [ -d /proc/vz ] || grep -qa container=lxc /proc/1/environ 2>/dev/null || [ -f /.dockerenv ]; then
IS_RESTRICTED_ALPINE="true"
fi
fi
if [ "$IS_RESTRICTED_ALPINE" == "true" ]; then
echo -e "⚠️ 探测到受限的 LXC/OpenVZ Alpine 环境,系统自带 Cron 极易假死。"
echo -e "🔧 自动降维打击:启用 [自定义高可用死循环调度器] 接管全局任务..."
# 1. 禁用原有的 Cron 大管家 (防止冲突)
rc-update del crond default >/dev/null 2>&1 || true
rc-service crond stop >/dev/null 2>&1 || true
pkill -9 crond >/dev/null 2>&1 || true
crontab -l 2>/dev/null | grep -v "ip_sentinel" > "${SECURE_TMP}/cron_clean" || true
[ -f "${SECURE_TMP}/cron_clean" ] && crontab "${SECURE_TMP}/cron_clean" >/dev/null 2>&1
rm -f "${SECURE_TMP}/cron_clean"
# 2. 写入我们的死循环守护进程
# [极客修复] 将 << 'EOF' 变为 << EOF以允许在安装时将部署时刻的 DEPLOY_UTC 变量作为硬编码注入脚本中
cat > ${INSTALL_DIR}/core/sentinel_scheduler.sh << EOF
#!/bin/bash
while true; do
# 强制获取绝对 UTC 时分,免疫系统错误时区
MIN=\$(date -u +%M)
HOUR=\$(date -u +%H)
# [频率优化] 匹配 20 分钟步进 (00, 20, 40)
if [ "\$MIN" == "00" ] || [ "\$MIN" == "20" ] || [ "\$MIN" == "40" ]; then
/bin/bash /opt/ip_sentinel/core/runner.sh >/dev/null 2>&1
fi
# [绝对 UTC 锚点] 基于部署时刻的锚点触发热数据更新,天然并发削峰
if [ "\$HOUR" == "${DEPLOY_UTC_HOUR}" ] && [ "\$MIN" == "${DEPLOY_UTC_MIN}" ]; then
/bin/bash /opt/ip_sentinel/core/updater.sh >/dev/null 2>&1
fi
# [绝对 UTC 锚点] 统一 UTC 16:00 发送战报
if [ "\$HOUR" == "16" ] && [ "\$MIN" == "00" ]; then
/bin/bash /opt/ip_sentinel/core/tg_report.sh >/dev/null 2>&1
fi
if ! pgrep -f 'webhook.py' >/dev/null; then
/bin/bash /opt/ip_sentinel/core/agent_daemon.sh >/dev/null 2>&1 &
fi
sleep 60
done
EOF
chmod +x ${INSTALL_DIR}/core/sentinel_scheduler.sh
# 3. 写入 OpenRC 开机自启
if command -v rc-update >/dev/null 2>&1 && [ -d "/etc/local.d" ]; then
echo "nohup bash ${INSTALL_DIR}/core/sentinel_scheduler.sh >/dev/null 2>&1 &" > /etc/local.d/ip_sentinel_scheduler.start
chmod +x /etc/local.d/ip_sentinel_scheduler.start
rc-update add local default >/dev/null 2>&1
else
# 连 OpenRC 都没有的极端环境,写入 profile 兜底
grep -q "sentinel_scheduler" /etc/profile || echo "nohup bash ${INSTALL_DIR}/core/sentinel_scheduler.sh >/dev/null 2>&1 &" >> /etc/profile
fi
# 4. 立即后台启动
[ -n "$PUBLIC_IP" ] && echo "$PUBLIC_IP" > "${INSTALL_DIR}/core/.last_ip"
nohup bash ${INSTALL_DIR}/core/sentinel_scheduler.sh >/dev/null 2>&1 &
else
# ==========================================
# 🟢 走常规调度路线 (正常的 Linux 或 KVM 型 Alpine)
# ==========================================
crontab -l 2>/dev/null | grep -v "ip_sentinel" > "${SECURE_TMP}/cron_backup" || true
# [频率优化] 调整为 */20
echo "*/20 * * * * ${INSTALL_DIR}/core/runner.sh >/dev/null 2>&1" >> "${SECURE_TMP}/cron_backup"
# [绝对 UTC 锚点] 每天精确在部署的 UTC 时刻触发
echo "${DEPLOY_UTC_MIN} ${DEPLOY_UTC_HOUR} * * * ${INSTALL_DIR}/core/updater.sh >/dev/null 2>&1" >> "${SECURE_TMP}/cron_backup"
if [[ -n "$TG_TOKEN" ]] && [[ -n "$CHAT_ID" ]]; then
# [绝对 UTC 锚点] 统一 UTC 16:00
echo "0 16 * * * ${INSTALL_DIR}/core/tg_report.sh >/dev/null 2>&1" >> "${SECURE_TMP}/cron_backup"
echo "$SAFE_PUBLIC_IP" > "${INSTALL_DIR}/core/.last_ip"
# [修复竞态]: 提前写入公网 IP 缓存,阻断重复推送
# 强制使用无参数 curl 裸奔探测,对齐 agent_daemon 的认知,防止双栈机型 IPv4/v6 认知错乱导致重启误报
DAEMON_IP=$( (curl -s -m 5 api.ip.sb/ip || curl -s -m 5 ifconfig.me) 2>/dev/null | tr -d '[:space:]' )
[ -n "$DAEMON_IP" ] && echo "$DAEMON_IP" > "${INSTALL_DIR}/core/.last_ip" || echo "$(echo "$SAFE_PUBLIC_IP" | tr -d '[]')" > "${INSTALL_DIR}/core/.last_ip"
if command -v rc-update >/dev/null 2>&1 && [ -d "/etc/local.d" ]; then
echo "nohup bash ${INSTALL_DIR}/core/agent_daemon.sh >/dev/null 2>&1 &" > /etc/local.d/ip_sentinel.start
chmod +x /etc/local.d/ip_sentinel.start
rc-update add local default >/dev/null 2>&1
else
echo "@reboot nohup bash ${INSTALL_DIR}/core/agent_daemon.sh >/dev/null 2>&1 &" >> "${SECURE_TMP}/cron_backup"
fi
echo "* * * * * pgrep -f 'webhook.py' >/dev/null || nohup bash ${INSTALL_DIR}/core/agent_daemon.sh >/dev/null 2>&1 &" >> "${SECURE_TMP}/cron_backup"
nohup bash "${INSTALL_DIR}/core/agent_daemon.sh" >/dev/null 2>&1 &
fi
[ -f "${SECURE_TMP}/cron_backup" ] && crontab "${SECURE_TMP}/cron_backup" >/dev/null 2>&1
if [ -d "/etc/crontabs" ] && [ -f "/var/spool/cron/crontabs/root" ]; then
cp -f /var/spool/cron/crontabs/root /etc/crontabs/root 2>/dev/null || true
chmod 600 /etc/crontabs/root 2>/dev/null || true
fi
if command -v rc-service >/dev/null 2>&1; then
rc-service crond restart >/dev/null 2>&1 || crond -b >/dev/null 2>&1
else
pkill -9 crond 2>/dev/null || true
crond -b >/dev/null 2>&1 || true
fi
rm -f "${SECURE_TMP}/cron_backup"
fi
fi
[ -f /tmp/cron_backup ] && crontab /tmp/cron_backup 2>/dev/null
rm -f /tmp/cron_backup
fi
# ================== [v3.4.0 核心: 状态机驱动的热更新路由] ==================
if [[ -n "$TG_TOKEN" ]] && [[ -n "$CHAT_ID" ]]; then
@@ -788,31 +934,34 @@ if [[ -n "$TG_TOKEN" ]] && [[ -n "$CHAT_ID" ]]; then
[ -z "$OLD_VERSION" ] && OLD_VERSION="3.3.1"
# [路由表 1]: 跨代兼容 (老版本 < v3.3.2)
# 必须强制下发带有 #REGISTER# 的警告,引导长官重新同步哈希身份
if version_lt "$OLD_VERSION" "3.3.2"; then
echo -e "\n📡 [路由枢纽] 正在执行跨代架构重组 (v${OLD_VERSION} -> v${TARGET_VERSION})..."
curl -s -X POST "${TG_API_URL}" \
-d "chat_id=${CHAT_ID}" \
-d "parse_mode=Markdown" \
-d "text=✨ *IP-Sentinel 引擎热更新完成!*
TEXT_MSG="✨ *IP-Sentinel 引擎热更新完成!*
📍 节点:\`${NODE_ALIAS}\`
🌐 IP\`${SAFE_PUBLIC_IP}\`
🚀 状态v${TARGET_VERSION} OTA 动态活体引擎已部署
⚠️ *战区架构已重组,请务必点击下方指令并发送,以同步新的防撞档案:*
\`${REG_MSG}\`" >/dev/null 2>&1
\`${REG_MSG}\`"
# [v4.0.3 体验升级] 注入交互式控制台按钮
JSON_PAYLOAD=$(jq -n --arg cid "$CHAT_ID" --arg txt "$TEXT_MSG" --arg cb "manage:${NODE_NAME}" '{chat_id: $cid, text: $txt, parse_mode: "Markdown", reply_markup: {inline_keyboard: [[{text: "⚙️ 调出该节点控制台", callback_data: $cb}]]}}')
curl -s -X POST "${TG_API_URL}" -H "Content-Type: application/json" -d "$JSON_PAYLOAD" >/dev/null 2>&1
echo -e "\033[32m✅ 升级通知已推送!请前往 TG 点击注册指令完成身份同步!\033[0m"
# [路由表 2]: 现代静默升级 (老版本 >= v3.3.2)
else
echo -e "\n📡 [路由枢纽] 正在执行静默平滑升级 (v${OLD_VERSION} -> v${TARGET_VERSION})..."
curl -s -X POST "${TG_API_URL}" \
-d "chat_id=${CHAT_ID}" \
-d "parse_mode=Markdown" \
-d "text=✨ *IP-Sentinel 引擎热更新完成!*
TEXT_MSG="✨ *IP-Sentinel 引擎热更新完成!*
📍 节点:\`${NODE_ALIAS}\`
🌐 IP\`${SAFE_PUBLIC_IP}\`
🚀 状态v${TARGET_VERSION} OTA 动态活体引擎已部署" >/dev/null 2>&1
🚀 状态v${TARGET_VERSION} OTA 动态活体引擎已部署"
# [v4.0.3 体验升级] 注入交互式控制台按钮
JSON_PAYLOAD=$(jq -n --arg cid "$CHAT_ID" --arg txt "$TEXT_MSG" --arg cb "manage:${NODE_NAME}" '{chat_id: $cid, text: $txt, parse_mode: "Markdown", reply_markup: {inline_keyboard: [[{text: "⚙️ 调出该节点控制台", callback_data: $cb}]]}}')
curl -s -X POST "${TG_API_URL}" -H "Content-Type: application/json" -d "$JSON_PAYLOAD" >/dev/null 2>&1
echo -e "\033[32m✅ 升级成功通知已推送到您的 Telegram\033[0m"
fi
@@ -827,16 +976,17 @@ if [[ -n "$TG_TOKEN" ]] && [[ -n "$CHAT_ID" ]]; then
else
# [全新安装路由]
echo -e "\n📡 正在向指挥部发送注册暗号..."
PUSH_RESULT=$(curl -s -X POST "${TG_API_URL}" \
-d "chat_id=${CHAT_ID}" \
-d "parse_mode=Markdown" \
-d "text=✨ *IP-Sentinel 部署成功!*
TEXT_MSG="✨ *IP-Sentinel 部署成功!*
📍 区域:${REGION_NAME}
🌐 IP${SAFE_PUBLIC_IP}
🔌 端口:${AGENT_PORT}
🔑 *请点击下方指令复制并回复给机器人:*
\`${REG_MSG}\`")
\`${REG_MSG}\`"
# [v4.0.3 体验升级] 注入交互式控制台按钮
JSON_PAYLOAD=$(jq -n --arg cid "$CHAT_ID" --arg txt "$TEXT_MSG" --arg cb "manage:${NODE_NAME}" '{chat_id: $cid, text: $txt, parse_mode: "Markdown", reply_markup: {inline_keyboard: [[{text: "⚙️ 调出该节点控制台", callback_data: $cb}]]}}')
PUSH_RESULT=$(curl -s -X POST "${TG_API_URL}" -H "Content-Type: application/json" -d "$JSON_PAYLOAD")
if echo "$PUSH_RESULT" | grep -q '"ok":true'; then
echo -e "\033[32m✅ 注册信息已推送到您的 Telegram请按指令完成最终激活\033[0m"
@@ -854,7 +1004,7 @@ else
echo "🎉 边缘节点 (Agent) 部署流程彻底完成!"
fi
echo "📍 你的本地守护区域已锁定为: $REGION_NAME"
echo "⚙️ 哨兵现已开启 [每30分钟] 的高频高拟真养护循环。"
echo "⚙️ 哨兵现已开启 [每20分钟] 的高频高拟真养护循环。"
if [[ -n "$TG_TOKEN" ]]; then
echo "📡 Webhook 监听已启动 (端口: $AGENT_PORT) 并向中枢发送了注册请求。"
@@ -884,12 +1034,21 @@ echo "🗑️ 若未来需卸载,可重新运行本脚本选择[2]或执行: b
echo "========================================================"
# ================== [v3.1.2 新增: 玻璃房透明装机统计] ==================
echo -e "\n📡 正在向开源社区汇报装机量 (完全匿名不收集IP)..."
AGENT_COUNT=$(curl -s -m 3 "https://ip-sentinel-count.samanthaestime296.workers.dev/ping/agent" || echo "")
# [修复] 仅在全新部署时触发统计,平滑升级/OTA 时绝对不触发,防止配额耗尽与数据注水
if [ "$UPGRADE_MODE" == "false" ]; then
echo -e "\n📡 正在向开源社区汇报装机量 (完全匿名不收集IP)..."
AGENT_COUNT=$(curl -s -m 3 "https://ip-sentinel-count.samanthaestime296.workers.dev/ping/agent" || echo "")
if [ -n "$AGENT_COUNT" ] && [[ "$AGENT_COUNT" =~ ^[0-9]+$ ]]; then
echo -e "\033[32m✅ 感谢您成为全球第 ${AGENT_COUNT} 名 IP-Sentinel 哨兵\033[0m"
else
echo -e "\033[32m✅ 感谢您加入 IP-Sentinel 哨兵阵列\033[0m"
if [ -n "$AGENT_COUNT" ] && [[ "$AGENT_COUNT" =~ ^[0-9]+$ ]]; then
echo -e "\033[32m✅ 感谢您成为全球第 ${AGENT_COUNT} 名 IP-Sentinel 节点维护者\033[0m"
else
echo -e "\033[32m✅ 感谢您部署 IP-Sentinel\033[0m"
fi
echo -e "\n"
fi
# ================== [新增: 安装成功高光时刻 Star 引导] ==================
echo -e "\n========================================================"
echo -e "⭐ \033[33m开源不易如果 IP-Sentinel 提升了您的节点稳定性,请赐予我们一枚星标!\033[0m"
echo -e "💡 \033[32m您的每一颗 Star 都是我们持续对抗风控、维护更新指纹库的核心动力。\033[0m"
echo -e "👉 \033[36m\033[4m\033]8;;https://github.com/hotyue/IP-Sentinel\033\\[点击此处直达 GitHub 仓库点亮 Star 🌟]\033]8;;\033\\\033[0m"
echo -e "========================================================\n"

View File

@@ -22,9 +22,21 @@ if ! type log >/dev/null 2>&1; then
# [v3.4.0 核心] 提取当前配置中的版本锚点
local local_ver="${AGENT_VERSION:-未知}"
# 保证日志目录存在
mkdir -p "${INSTALL_DIR}/logs"
# 统一日志格式,注入 [版本号] 追踪标识
printf "[$(date '+%Y-%m-%d %H:%M:%S')] [v%-5s] [%-5s] [%-7s] [%s] %s\n" "$local_ver" "$2" "$1" "$REGION_CODE" "$3" >> "${INSTALL_DIR}/logs/sentinel.log"
# 日志格式注入 [版本号] 追踪标识
local core_msg=$(printf "[v%-5s] [%-5s] [%-7s] [%s] %s" "$local_ver" "$2" "$1" "$REGION_CODE" "$3")
# [时区对齐] 强制无视本地时区,以绝对 UTC 时间写入日志
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] $core_msg" >> "${INSTALL_DIR}/logs/sentinel.log"
# 强制推送到 Systemd Journal (如果系统支持)
if command -v logger >/dev/null 2>&1; then
logger -t ip-sentinel "$core_msg"
else
# 降级输出到 stdout让 Systemd 捕获
echo "$core_msg"
fi
}
fi
@@ -150,53 +162,133 @@ for ((i=1; i<=TOTAL_ACTIONS; i++)); do
log "$MODULE_NAME" "EXEC " "动作[$i/$TOTAL_ACTIONS]完成 | HTTP状态: $CODE | 抖动坐标: $ACTION_LAT, $ACTION_LON"
# 【核心升级】行为拉伸:每次动作后强制休眠 90 - 150 秒
# 结合动作总数,总耗时将稳定在 10 分钟 到 25 分钟之间
# 【核心升级】行为拉伸:每次动作后强制休眠 90 - 120 秒
# 结合动作总数,总耗时将稳定在 10 分钟 到 20 分钟之间
if [ $i -lt $TOTAL_ACTIONS ]; then
SLEEP_TIME=$((90 + RANDOM % 61))
SLEEP_TIME=$((90 + RANDOM % 31))
log "$MODULE_NAME" "WAIT " "阅读当前页面内容,模拟停留 $SLEEP_TIME 秒..."
sleep $SLEEP_TIME
fi
done
# --- [结果纠偏自检 (V3.2.1 高精度容错版)] ---
# [V3.2.1 热修复] 探针同样应用 $DYNAMIC_IP_PREF 协议自适应
PROBE_RESULT=$(curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -m 15 -s -L -o /dev/null -w "%{http_code}|%{url_effective}" https://www.google.com)
# --- [结果纠偏自检 (V4.0.9 终极三核雷达: URL跳转 + Premium + Music)] ---
# 战术揭秘:汲取开源社区顶级探针的精髓!
# 1. 传统 URL 跳转探测:捕捉 www.google.com 底层 302 重定向域名的真实归属。
# 2. YT Premium 深度探测:提取核心 contentRegion 变量,并强匹配 www.google.cn 送中特征。
# 3. 严格一致性校验:任何一端出现非预期偏移,立即判定为漂移,彻底消除虚假“成功”。
# 分离状态码与 URL
PROBE_CODE=$(echo "$PROBE_RESULT" | cut -d'|' -f1)
FINAL_URL=$(echo "$PROBE_RESULT" | cut -d'|' -f2)
log "$MODULE_NAME" "INFO " "启动三核交叉验证 (URL跳转 + YT Premium + YT Music) 穿透获取 GeoIP..."
# 0. 致命拦截网络断开、DNS 解析失败或严重超时
if [ "$PROBE_CODE" == "000" ] || [ -z "$FINAL_URL" ]; then
STATUS="🚨 探针失效 (网络阻断或底层路由异常)"
# 核心 1: 传统 URL 跳转探测 (请求 www 才能触发准确跳转)
JUMP_HDR=$(curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -m 10 -sI "http://www.google.com/")
JUMP_LOC=$(echo "$JUMP_HDR" | grep -i "^location:" | tr -d '\r\n')
JUMP_GL=""
if [ -z "$JUMP_LOC" ]; then
# 无跳转 (HTTP 200) 通常意味着原生被定位于 US
JUMP_GL="US"
elif [[ "$JUMP_LOC" == *".google.cn"* ]] || [[ "$JUMP_LOC" == *"gl=CN"* ]]; then
JUMP_GL="CN"
elif [[ "$JUMP_LOC" == *"gl="* ]]; then
JUMP_GL=$(echo "$JUMP_LOC" | grep -o 'gl=[A-Za-z]\{2\}' | head -n 1 | cut -d'=' -f2 | tr 'a-z' 'A-Z')
else
# 核心战术:精准提取最终 URL 的域名部分
ACTUAL_DOMAIN=$(echo "$FINAL_URL" | awk -F/ '{print $3}')
# [V3.2.1 优化] 使用通配符 * 剔除任意前缀 (无论是 www.google. 还是 ipv4.google.)
ACTUAL_SUFFIX=${ACTUAL_DOMAIN#*google.}
# 从域名中提取区域后缀 (如 .co.jp -> JP, .com.hk -> HK, .de -> DE)
JUMP_DOMAIN=$(echo "$JUMP_LOC" | grep -o 'google\.[a-z\.]*' | head -n 1 | sed 's/google\.//')
case "$JUMP_DOMAIN" in
"com") JUMP_GL="US" ;;
"com.hk") JUMP_GL="HK" ;;
"com.tw") JUMP_GL="TW" ;;
"co.jp") JUMP_GL="JP" ;;
"co.uk") JUMP_GL="GB" ;;
"co.kr") JUMP_GL="KR" ;;
"co.in") JUMP_GL="IN" ;;
"co.id") JUMP_GL="ID" ;;
"co.th") JUMP_GL="TH" ;;
"com.sg") JUMP_GL="SG" ;;
"com.my") JUMP_GL="MY" ;;
"com.au") JUMP_GL="AU" ;;
"com.br") JUMP_GL="BR" ;;
"com.mx") JUMP_GL="MX" ;;
"com.ar") JUMP_GL="AR" ;;
"co.za") JUMP_GL="ZA" ;;
"cn") JUMP_GL="CN" ;;
"") JUMP_GL="" ;;
*)
# 提取标准两字母后缀 (.de, .fr, .nl)
LAST_EXT=$(echo "$JUMP_DOMAIN" | awk -F'.' '{print $NF}' | tr 'a-z' 'A-Z')
if [ ${#LAST_EXT} -eq 2 ]; then
JUMP_GL="$LAST_EXT"
else
JUMP_GL="US"
fi
;;
esac
fi
# 1. 优先验证:绝对匹配目标后缀 (彻底杜绝 com 包含于 com.hk 的陷阱)
if [ "$ACTUAL_SUFFIX" == "$VALID_URL_SUFFIX" ]; then
STATUS="✅ 目标区域达成 ($ACTUAL_SUFFIX)"
# 核心 2: YouTube Premium 探测
YT_PR_GL=""
# [修复] 必须带上本轮循环的专属 UA (-A "$SESSION_UA"),防止被 Google CDN 丢进无状态爬虫兜底页
YT_PR_HTML=$(curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -m 10 -s -L -A "$SESSION_UA" "https://www.youtube.com/premium")
if echo "$YT_PR_HTML" | grep -q 'www.google.cn'; then
YT_PR_GL="CN"
else
# 穷举风控变量提取
YT_PR_GL=$(echo "$YT_PR_HTML" | grep -o '"contentRegion":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z')
[ -z "$YT_PR_GL" ] && YT_PR_GL=$(echo "$YT_PR_HTML" | grep -o '"countryCode":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z')
[ -z "$YT_PR_GL" ] && YT_PR_GL=$(echo "$YT_PR_HTML" | grep -o '"INNERTUBE_CONTEXT_GL":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z')
fi
# 2. 核心拦截:精准捕捉送中特征 (com.hk)
elif [ "$ACTUAL_SUFFIX" == "com.hk" ]; then
if [ "$REGION_CODE" == "HK" ]; then
STATUS="✅ 目标区域达成 (HK 专属 com.hk)"
# 核心 3: YouTube Music 探测
YT_MU_GL=""
# [修复] 同样加持 UA 装甲,强行唤出完整版前端框架
YT_MU_HTML=$(curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -m 10 -s -L -A "$SESSION_UA" "https://music.youtube.com/")
if echo "$YT_MU_HTML" | grep -q 'www.google.cn'; then
YT_MU_GL="CN"
else
# [修复] Music 的核心配置变量是 INNERTUBE_CONTEXT_GL
YT_MU_GL=$(echo "$YT_MU_HTML" | grep -o '"INNERTUBE_CONTEXT_GL":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z')
[ -z "$YT_MU_GL" ] && YT_MU_GL=$(echo "$YT_MU_HTML" | grep -o '"countryCode":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z')
[ -z "$YT_MU_GL" ] && YT_MU_GL=$(echo "$YT_MU_HTML" | grep -o '"GL":"[A-Za-z]\{2\}"' | head -n 1 | cut -d'"' -f4 | tr 'a-z' 'A-Z')
fi
# [基准对齐] 提取配置大区 (兼容州级穿透),并修正英国的 ISO 代码
TARGET_CC="${REGION_CODE%%-*}"
[ "$TARGET_CC" == "UK" ] && TARGET_CC="GB"
# --- 终极审判逻辑 (以 YouTube 核心业务为主导,兼顾底层雷达权重) ---
IS_CN=0
VALID_PROBES=0
# 1. 扫描所有探针,统计有效性并执行“送中”一票否决
for val in "$JUMP_GL" "$YT_PR_GL" "$YT_MU_GL"; do
if [ -n "$val" ]; then
((VALID_PROBES++))
[ "$val" == "CN" ] && IS_CN=1
fi
done
if [ $VALID_PROBES -eq 0 ]; then
STATUS="🚨 探针失效 (三核全部熔断,可能遭严重风控拦截)"
elif [ $IS_CN -eq 1 ]; then
STATUS="❌ 严重高危!三核雷达判定 IP 已被中国大陆锁定 (送中)"
else
# 2. 评估核心流媒体业务是否达标 (只要 YT_PR 或 YT_MU 其一达标,即视为成功)
YT_MATCH=0
[ "$YT_PR_GL" == "$TARGET_CC" ] && YT_MATCH=1
[ "$YT_MU_GL" == "$TARGET_CC" ] && YT_MATCH=1
if [ $YT_MATCH -eq 1 ]; then
# 3. 核心业务达标,进一步评估底层路由权重
if [ -n "$JUMP_GL" ] && [ "$JUMP_GL" != "$TARGET_CC" ]; then
# YT 解锁了,但基础跳转 IP 库漂移了 (降级为 ✅,但备注底层漂移)
STATUS="✅ 目标区域达成 (YT主导成功, Jump副雷达漂移至 ${JUMP_GL}) | Prem: ${YT_PR_GL:-} | Music: ${YT_MU_GL:-}"
else
STATUS="❌ 严重漂移!判定为送中区 (实际跳往 $ACTUAL_SUFFIX)"
# 完美达成
STATUS="✅ 目标区域达成 (Jump: ${JUMP_GL:-} | Prem: ${YT_PR_GL:-} | Music: ${YT_MU_GL:-})"
fi
# 3. 宽容处理:遵守 Google 无跳转新规 (严格限定必须是纯粹的 com)
# [视觉优化] 留在 .com 代表 IP 极度纯净未被区域沙盒锁定,计入成功战绩!
elif [ "$ACTUAL_SUFFIX" == "com" ]; then
STATUS="✅ 目标区域达成 (免签停留 .com 通用主站)"
# 4. 跨区漂移:所有预判之外的后缀,全部视为异常
else
STATUS="⚠️ 跨区跳板漂移 (当前实际归属: $ACTUAL_SUFFIX)"
# YouTube 流媒体核心未能解锁目标区域,宣判漂移
STATUS="⚠️ 区域发生漂移!目标 $TARGET_CC,实际 (Jump: ${JUMP_GL:-} | Prem: ${YT_PR_GL:-} | Music: ${YT_MU_GL:-})"
fi
fi

266
core/mod_quality.sh Executable file
View File

@@ -0,0 +1,266 @@
#!/bin/bash
# ==========================================================
# IP-Sentinel: 深海声呐 (IP 质量全维异步检测模块 v4.0.0)
# ==========================================================
source /opt/ip_sentinel/config.conf
# ==========================================
# 1. 动态网络锚定与协议自适应 (专为多 IP / NAT 架构打造)
# ==========================================
DYNAMIC_IP_PREF="${IP_PREF:-4}"
PROBE_ARGS=("-y" "-j" "-f") # 默认注入: 自动确认、JSON格式、明文无掩码IP
# 强壮正则:支持 V4, V6 以及带有 [] 护甲的 V6 (兼容多 IP 站群机)
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\[\]\.]+$ ]]; then
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
# 严格探测物理网卡/虚拟 IP 存活状态,防止 IP 漂移导致探针彻底报错
if ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
# 恢复使用官方原生参数 -i不再进行徒劳的底层劫持
PROBE_ARGS+=("-i" "$RAW_BIND_IP")
# 智能识别 V4 / V6强制覆盖系统默认的 IP_PREF
if [[ "$RAW_BIND_IP" == *":"* ]]; then
DYNAMIC_IP_PREF="6"
elif [[ "$RAW_BIND_IP" == *"."* ]]; then
DYNAMIC_IP_PREF="4"
fi
fi
fi
# 补齐协议版本参数 (-4 或 -6)
PROBE_ARGS+=("-${DYNAMIC_IP_PREF}")
# 2. 智能拉取引擎 (官方主干优先防 RCE双栈 CDN 保底,外加文件防伪强校验)
PROBE_SCRIPT="/opt/ip_sentinel/core/ip_probe.sh"
# [校验 1] 验证本地残留脚本是否损坏 (防止之前被墙或拦截返回了 HTML 报错页)
if [ -f "$PROBE_SCRIPT" ] && ! grep -q "xykt" "$PROBE_SCRIPT" 2>/dev/null; then
rm -f "$PROBE_SCRIPT"
fi
if [ ! -s "$PROBE_SCRIPT" ]; then
# 🛡️ 首选防线: 严格遵守从 GitHub 官方主干拉取,捍卫纯净底线
curl -sL -m 10 "https://raw.githubusercontent.com/xykt/IPQuality/main/ip.sh" -o "$PROBE_SCRIPT" 2>/dev/null
# 🚑 文件防伪校验: 如果纯 V6 无法解析 GitHub 返回了 HTML 报错页,剔除它!
if ! grep -q "xykt" "$PROBE_SCRIPT" 2>/dev/null; then
rm -f "$PROBE_SCRIPT" 2>/dev/null
# 降级到双栈 CDN 节点兜底 (仅在 GitHub 彻底失效时启用)
curl -sL -m 15 "https://IP.Check.Place" -o "$PROBE_SCRIPT" 2>/dev/null
fi
chmod +x "$PROBE_SCRIPT" 2>/dev/null
fi
# ==========================================
# 3. 极速预检与容灾打靶系统
# ==========================================
# 封装链路预检函数 (4秒极速探路拒绝死等)
preflight_check() {
local curl_args=("-s" "-m" "4")
# 提取网卡和协议约束
for ((i=1; i<=$#; i++)); do
if [[ "${!i}" == "-i" ]]; then
local next=$((i+1))
curl_args+=("--interface" "${!next}")
elif [[ "${!i}" == "-4" ]]; then
curl_args+=("-4")
elif [[ "${!i}" == "-6" ]]; then
curl_args+=("-6")
fi
done
# 验证该路由设置是否能成功连通外部网络
curl "${curl_args[@]}" "https://www.cloudflare.com/cdn-cgi/trace" >/dev/null 2>&1
return $?
}
# 📡 寻路雷达:测定哪一组参数可以走通
FINAL_ARGS=()
if preflight_check "${PROBE_ARGS[@]}"; then
# 阶梯 0: 原定参数 (带 BIND_IP 和协议) 通畅
FINAL_ARGS=("${PROBE_ARGS[@]}")
else
# 阶梯 1: 剥离物理网卡限制,只保留协议限制
FALLBACK_ARGS=("-y" "-j" "-${DYNAMIC_IP_PREF}")
if preflight_check "${FALLBACK_ARGS[@]}"; then
FINAL_ARGS=("${FALLBACK_ARGS[@]}")
else
# 阶梯 2: 终极裸跑 (不限网卡,不限协议)
FINAL_ARGS=("-y" "-j")
fi
fi
# ==========================================
# 4. 终极实弹打靶
# ==========================================
# 此时 FINAL_ARGS 已经被证实是连通的,我们只执行 1 次 ip.sh
# 将超时放宽至 300 秒,给第三方 API (如 ipregistry) 充足的响应时间
RAW_OUTPUT=$(timeout 300 bash "$PROBE_SCRIPT" "${FINAL_ARGS[@]}" 2>/dev/null)
JSON_DATA="{${RAW_OUTPUT#*\{}"
ESC=$(printf '\033')
JSON_DATA=$(printf "%s" "$JSON_DATA" | sed -e "s/${ESC}\[[0-9;]*[a-zA-Z]//g" -e "s/${ESC}[0-9;]*[a-zA-Z]//g" -e "s/x1b\\[[0-9;]*[a-zA-Z]//g" -e "s/x1b[0-9;]*[a-zA-Z]//g")
IP_ADDR=$(echo "$JSON_DATA" | jq -r '.Head.IP // empty' 2>/dev/null)
if [ -z "$IP_ADDR" ]; then
curl -s -X POST "${TG_API_URL}" \
-d "chat_id=${CHAT_ID}" \
-d "parse_mode=Markdown" \
-d "text=❌ *深海声呐探测失败*
📍 节点:\`${NODE_ALIAS}\`
🌐 锁定IP\`${PUBLIC_IP}\`
⚠️ *未收到有效回波。检测源超时或数据解析受阻。*" >/dev/null
exit 1
fi
ASN=$(echo "$JSON_DATA" | jq -r '.Info.ASN // "Unknown"' 2>/dev/null)
ORG=$(echo "$JSON_DATA" | jq -r '.Info.Organization // "Unknown"' 2>/dev/null)
CITY=$(echo "$JSON_DATA" | jq -r '.Info.City.Name // "Unknown"' 2>/dev/null)
COUNTRY=$(echo "$JSON_DATA" | jq -r '.Info.Region.Name // "Unknown"' 2>/dev/null)
IP_TYPE=$(echo "$JSON_DATA" | jq -r '.Info.Type // "未知属性"' 2>/dev/null)
USAGE_TYPE=$(echo "$JSON_DATA" | jq -r '.Type.Usage.IPinfo // "未知场景"' 2>/dev/null)
# 3. 深度欺诈与信用评估 (各大权威库联查)
SCAM_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.SCAMALYTICS // "0"' 2>/dev/null)
ABUSE_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.AbuseIPDB // "0"' 2>/dev/null)
IPQS_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.IPQS // "0"' 2>/dev/null)
IP2L_SCORE=$(echo "$JSON_DATA" | jq -r '.Score.IP2LOCATION // "0"' 2>/dev/null)
FRAUD_RISK=$(echo "$JSON_DATA" | jq -r '.Score.ipapi // "0%"' 2>/dev/null)
# [修复] 清洗 API 阻断返回的 null 值,保障面板整洁
[ "$SCAM_SCORE" == "null" ] || [ -z "$SCAM_SCORE" ] && SCAM_SCORE="N/A"
[ "$ABUSE_SCORE" == "null" ] || [ -z "$ABUSE_SCORE" ] && ABUSE_SCORE="N/A"
[ "$IPQS_SCORE" == "null" ] || [ -z "$IPQS_SCORE" ] && IPQS_SCORE="N/A"
[ "$IP2L_SCORE" == "null" ] || [ -z "$IP2L_SCORE" ] && IP2L_SCORE="N/A"
[ "$FRAUD_RISK" == "null" ] || [ -z "$FRAUD_RISK" ] && FRAUD_RISK="N/A"
# 代理/VPN 特征探针 (只要有一家认为是代理,就亮黄灯)
IS_PROXY="🟢 干净"
if echo "$JSON_DATA" | jq -e '.Factor.Proxy | to_entries | any(.value == true)' >/dev/null 2>&1 || \
echo "$JSON_DATA" | jq -e '.Factor.VPN | to_entries | any(.value == true)' >/dev/null 2>&1; then
IS_PROXY="🟡 疑似代理/VPN"
fi
# 4. 提取流媒体与 AI 解锁指标 (带解锁类型)
parse_media() {
local status=$(echo "$JSON_DATA" | jq -r ".Media.$1.Status // \"未知\"" 2>/dev/null)
local reg=$(echo "$JSON_DATA" | jq -r ".Media.$1.Region // \"\"" 2>/dev/null)
local type=$(echo "$JSON_DATA" | jq -r ".Media.$1.Type // \"\"" 2>/dev/null)
if [[ "$status" == *"解锁"* ]]; then
echo "🟢 ${reg} (${type})"
elif [[ "$status" == *"仅"* ]] || [[ "$status" == *"机房"* ]] || [[ "$status" == *"待支持"* ]]; then
# 捕捉 Netflix "仅自制"、ChatGPT "仅网页"、TikTok "机房" 等半残状态
echo "🟡 ${status} ${reg}"
elif [[ "$status" == *"屏蔽"* ]] || [[ "$status" == *"失败"* ]] || [[ "$status" == *"中国"* ]] || [[ "$status" == *"禁"* ]]; then
# 捕捉 "屏蔽"、"失败"、"禁会员"、"中国"(送中)
echo "🔴 ${status}"
else
echo "${status}"
fi
}
NF_STAT=$(parse_media "Netflix")
YT_STAT=$(parse_media "Youtube")
DP_STAT=$(parse_media "DisneyPlus")
TK_STAT=$(parse_media "TikTok")
GPT_STAT=$(parse_media "ChatGPT")
APV_STAT=$(parse_media "AmazonPrimeVideo")
# 提取原生 JSON 里的原始状态用于底层隐写回传
RAW_NF_STAT=$(echo "$JSON_DATA" | jq -r '.Media.Netflix.Status // "Unknown"' 2>/dev/null)
RAW_YT_REG=$(echo "$JSON_DATA" | jq -r '.Media.Youtube.Region // ""' 2>/dev/null)
RAW_YT_STAT=$(echo "$JSON_DATA" | jq -r '.Media.Youtube.Status // "Unknown"' 2>/dev/null)
# 5. 邮局连通性与黑名单
PORT25=$(echo "$JSON_DATA" | jq -r '.Mail.Port25 // "false"' 2>/dev/null)
[ "$PORT25" == "true" ] && P25_TEXT="✅ 畅通" || P25_TEXT="❌ 封堵"
DNS_BLACK=$(echo "$JSON_DATA" | jq -r '.Mail.DNSBlacklist.Blacklisted // "0"' 2>/dev/null)
DNS_MARK=$(echo "$JSON_DATA" | jq -r '.Mail.DNSBlacklist.Marked // "0"' 2>/dev/null)
# 6. “送中” 逻辑判定
WARNING_MSG=""
# [修复] 官方 JSON 已经去除了方括号,直接匹配 CN 或者状态包含中国
if [[ "$RAW_YT_REG" == "CN" ]] || [[ "$RAW_YT_STAT" == *"中国"* ]]; then
# [修复] 采用 Bash 扩展转义 ($'...'),彻底解决直接打印 \n 字符的问题
WARNING_MSG=$'\n🚨 **[高危] 该节点已被 Google 判定为中国大陆 (送中)**\n'
fi
# 7. 组装情报级 Markdown 战报
# 提取本地运行态版本与生成时间戳
LOCAL_VER="${AGENT_VERSION:-未知}"
# [时区对齐] 深海声呐战报落款强制采用绝对 UTC 时间
CURRENT_TIME=$(date -u "+%Y-%m-%d %H:%M:%S UTC")
# [体验修复] 探针返回的 IP 带有星号掩码,强制使用中枢下发的真实 IP 拼接,以防直达链接失效!
LINK_IP=$(echo "$PUBLIC_IP" | tr -d '[]')
REPORT="🎯 *IP-Sentinel 深海声呐报告*
📍 节点:\`${NODE_ALIAS}\`
🌐 地址:\`${IP_ADDR}\`${WARNING_MSG}
*🏢 物理身份与网络属性*
\`AS${ASN}\` | \`${ORG}\`
**定位:** \`${COUNTRY} - ${CITY}\`
**属性:** \`${IP_TYPE}\` | \`${USAGE_TYPE}\`
**探针:** ${IS_PROXY}
*🛡️ 欺诈雷达 (0为最优)*
• **Scamalytics:** \`${SCAM_SCORE}/100\`
• **AbuseIPDB:** \`${ABUSE_SCORE}/100\`
• **IPQS:** \`${IPQS_SCORE}/100\`
• **IP2Location:** \`${IP2L_SCORE}/100\`
• **IPAPI 风险率:** \`${FRAUD_RISK}\`
*🎬 核心业务解锁*
• **YouTube:** ${YT_STAT}
• **Netflix:** ${NF_STAT}
• **Disney+:** ${DP_STAT}
• **PrimeVideo:** ${APV_STAT}
• **TikTok:** ${TK_STAT}
• **ChatGPT:** ${GPT_STAT}
*✉️ 邮局与污染度*
• **25 端口出站:** ${P25_TEXT}
• **DNS 污染库:** 严重 \`${DNS_BLACK}\` | 轻微 \`${DNS_MARK}\`
_👉 [🔍 详细信用图谱直达 (Scamalytics)](https://scamalytics.com/ip/${LINK_IP})_
⏱️ \`${CURRENT_TIME}\` | ⚙️ \`v${LOCAL_VER}\`"
# [修复] 剥离显示层的 N/A确保传给 Master 趋势数据库的是纯数字 (无效则记为0)
SAFE_SCAM_SCORE=$(echo "$SCAM_SCORE" | tr -cd '0-9')
[ -z "$SAFE_SCAM_SCORE" ] && SAFE_SCAM_SCORE="0"
# [v4.0.2 扩容] 提取 Google(基于YouTube) 和 ChatGPT 的原生状态
RAW_GOOG_STAT="${RAW_YT_REG:-$RAW_YT_STAT}"
[ -z "$RAW_GOOG_STAT" ] && RAW_GOOG_STAT="未知"
RAW_GPT_STAT=$(echo "$JSON_DATA" | jq -r '.Media.ChatGPT.Status // "未知"' 2>/dev/null)
# [修复] 废除会导致中文 UTF-8 字节被劈裂(产生乱码 )的 awk 暴力截断。
# 原始状态文本极短(如"解锁"、"屏蔽"、"US"),只需洗掉隐形换行符即可安全传输。
S_GOOG=$(echo "$RAW_GOOG_STAT" | tr -d '\n\r ')
S_NF=$(echo "$RAW_NF_STAT" | tr -d '\n\r ')
S_GPT=$(echo "$RAW_GPT_STAT" | tr -d '\n\r ')
CB_DATA="svq|${NODE_NAME}|${SAFE_SCAM_SCORE}|${S_GOOG}|${S_NF}|${S_GPT}"
# 8. 挂载内联键盘并直送指挥部
JSON_PAYLOAD=$(jq -n \
--arg cid "$CHAT_ID" \
--arg txt "$REPORT" \
--arg cb "$CB_DATA" \
--arg cb_manage "manage:${NODE_NAME}" \
'{
chat_id: $cid,
text: $txt,
parse_mode: "Markdown",
disable_web_page_preview: true,
reply_markup: {
inline_keyboard: [
[{text: "📥 将本次体检录入趋势库", callback_data: $cb}],
[{text: "⚙️ 调出该节点控制台", callback_data: $cb_manage}]
]
}
}')
curl -s -X POST "${TG_API_URL}" -H "Content-Type: application/json" -d "$JSON_PAYLOAD" >/dev/null

View File

@@ -45,7 +45,8 @@ fi
log_msg() {
local TYPE=$1
local MSG=$2
local TIME=$(date "+%Y-%m-%d %H:%M:%S")
# [时区对齐] 强制无视本地时区,以绝对 UTC 时间生成日志时间戳
local TIME=$(date -u "+%Y-%m-%d %H:%M:%S UTC")
# [v3.4.0 核心] 提取当前配置中的版本锚点
local local_ver="${AGENT_VERSION:-未知}"

View File

@@ -33,14 +33,24 @@ log() {
# 保证日志目录存在
mkdir -p "${INSTALL_DIR}/logs"
# 日志格式注入 [版本号] 追踪标识
printf "[$(date '+%Y-%m-%d %H:%M:%S')] [v%-5s] [%-5s] [%-7s] [%s] %s\n" "$local_ver" "$level" "$module" "$REGION_CODE" "$msg" >> "$LOG_FILE"
local core_msg=$(printf "[v%-5s] [%-5s] [%-7s] [%s] %s" "$local_ver" "$level" "$module" "$REGION_CODE" "$msg")
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] $core_msg" >> "$LOG_FILE"
# 强制推送到 Systemd Journal (如果系统支持)
if command -v logger >/dev/null 2>&1; then
logger -t ip-sentinel "$core_msg"
else
# 降级输出到 stdout让 Systemd 捕获
echo "$core_msg"
fi
}
export -f log
export CONFIG_FILE INSTALL_DIR
# 3. 防僵尸网络特征 (Cron Jitter) - 核心隐蔽逻辑
# 配合每 30 分钟的调度周期,将随机休眠控制在 0 到 180 秒内,彻底打散全球并发请求
# 配合每 20 分钟的调度周期,将随机休眠控制在 0 到 180 秒内,彻底打散全球并发请求
if [ -t 1 ]; then
log "SYSTEM" "INFO " "💻 检测到人工终端干预,跳过静默休眠,立即执行任务!"
else
@@ -81,7 +91,8 @@ fi
if [ -n "$TARGET_MOD" ] && [ -x "${INSTALL_DIR}/core/${TARGET_MOD}" ]; then
log "SYSTEM" "INFO" "命中触发条件,加载并执行子模块: ${MOD_NAME}"
# 核心降耗逻辑:使用 nice -n 19 赋予进程最低 CPU 优先级,绝不抢占 VPS 正常业务的资源
nice -n 19 bash "${INSTALL_DIR}/core/${TARGET_MOD}"
# [安全修复] 注入 200>&-,强行关闭子进程对排他锁的继承权!防止子进程假死导致全局死锁
nice -n 19 bash "${INSTALL_DIR}/core/${TARGET_MOD}" 200>&-
else
log "SYSTEM" "ERROR" "配置了模块 ${MOD_NAME},但未找到对应的可执行脚本: ${TARGET_MOD}"
fi

View File

@@ -1,78 +0,0 @@
#!/bin/bash
# ==========================================================
# 脚本名称: tg_daemon.sh (Telegram 互动监听守护进程 - 动态锚点版)
# 核心功能: 极低功耗长轮询监听、节点溯源、版本继承
# ==========================================================
INSTALL_DIR="/opt/ip_sentinel"
CONFIG_FILE="${INSTALL_DIR}/config.conf"
OFFSET_FILE="/tmp/ip_sentinel_tg_offset.txt"
# 1. 环境自检
[ ! -f "$CONFIG_FILE" ] && exit 1
source "$CONFIG_FILE"
# 如果没有配置 TG 机器人,则安静退出守护进程
[ -z "$TG_TOKEN" ] || [ -z "$CHAT_ID" ] && exit 0
# [核心: 动态版本锚点与防撞甲身份载入]
LOCAL_VER="${AGENT_VERSION:-未知}"
IP_HASH=$(echo "${PUBLIC_IP:-127.0.0.1}" | md5sum | cut -c 1-4 | tr 'a-z' 'A-Z')
NODE_NAME="$(hostname | cut -c 1-10)-${IP_HASH}"
# 2. 初始化消息偏移量 (Offset) 记录文件,防止重启后重复处理老消息
OFFSET=0
[ -f "$OFFSET_FILE" ] && OFFSET=$(cat "$OFFSET_FILE")
# 发送消息的快捷工具函数
send_msg() {
curl -s -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
-d "chat_id=$CHAT_ID" -d "text=$1" -d "parse_mode=Markdown" > /dev/null
}
# 3. 核心守护循环 (无限长轮询监听)
# timeout=30 表示如果没有新消息,连接会挂起 30 秒才断开重连,极大地降低了系统资源消耗
while true; do
UPDATES=$(curl -s "https://api.telegram.org/bot${TG_TOKEN}/getUpdates?offset=${OFFSET}&timeout=30")
# 使用 jq 检查是否有新消息返回
COUNT=$(echo "$UPDATES" | jq -r '.result | length' 2>/dev/null)
if [[ "$COUNT" =~ ^[0-9]+$ ]] && [ "$COUNT" -gt 0 ]; then
for (( i=0; i<$COUNT; i++ )); do
UPDATE_ID=$(echo "$UPDATES" | jq -r ".result[$i].update_id")
MSG_CHAT_ID=$(echo "$UPDATES" | jq -r ".result[$i].message.chat.id")
MSG_TEXT=$(echo "$UPDATES" | jq -r ".result[$i].message.text")
# 【安全防御】严格权限验证:只响应你部署时填入的 Chat ID无视陌生人消息
if [ "$MSG_CHAT_ID" == "$CHAT_ID" ]; then
case "$MSG_TEXT" in
"/run")
send_msg "🚀 **[${NODE_NAME}]** 正在后台触发 IP 养护任务 (v${LOCAL_VER})..."
# 使用 nohup 另起后台独立进程运行,防止阻塞当前监听器的循环
nohup bash "${INSTALL_DIR}/core/mod_google.sh" >/dev/null 2>&1 &
;;
"/log")
LOG_DATA=$(tail -n 15 "${INSTALL_DIR}/logs/sentinel.log")
send_msg "📄 **[${NODE_NAME}] 实时日志 (v${LOCAL_VER}):**%0A\`\`\`log%0A${LOG_DATA}%0A\`\`\`"
;;
"/report")
# 触发生成一次战报
bash "${INSTALL_DIR}/core/tg_report.sh"
;;
"/help"|"/start")
HELP_MSG="🛡️ **IP-Sentinel 边缘控制台**%0A📍 节点: \`${NODE_NAME}\`%0A🔖 版本: \`v${LOCAL_VER}\`%0A%0A/run - 立刻执行一次养护%0A/log - 抓取最新运行日志%0A/report - 手动生成统计简报"
send_msg "$HELP_MSG"
;;
esac
fi
# 记录处理完毕的 message ID下次请求从新的 ID 开始获取
OFFSET=$((UPDATE_ID + 1))
echo "$OFFSET" > "$OFFSET_FILE"
done
fi
# 基础安全延时,防止极端网络情况下的死循环吃光 CPU
sleep 2
done

View File

@@ -18,6 +18,22 @@ if [ -z "$TG_TOKEN" ] || [ -z "$CHAT_ID" ]; then
exit 0
fi
# ================== [v4.0.8 核心: 防并发风暴与 60 秒冷却机制] ==================
LOCK_FILE="${INSTALL_DIR}/core/.report_lock"
if [ -f "$LOCK_FILE" ]; then
LAST_RUN=$(cat "$LOCK_FILE" 2>/dev/null)
NOW=$(date +%s)
# 校验 LAST_RUN 是否为有效数字,并比对 60 秒冷却期
if [[ "$LAST_RUN" =~ ^[0-9]+$ ]]; then
if [ $((NOW - LAST_RUN)) -lt 60 ]; then
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] [v${AGENT_VERSION:-未知}] [WARN ] [Report ] [SYSTEM] ⚠️ 战报请求过于频繁,触发 60 秒防并发风暴拦截。" >> "${INSTALL_DIR}/logs/sentinel.log"
exit 0
fi
fi
fi
echo $(date +%s) > "$LOCK_FILE"
# ==============================================================================
# 2. 节点元数据抓取 (v3.2.2 协议自适应与多级容灾版)
# [v3.5.2 核心: 引入双轨身份架构]
if [ -z "$NODE_NAME" ]; then
@@ -96,7 +112,7 @@ case "$REGION_CODE" in
*) FLAG="🌐" ;;
esac
# 3. 截取过去 24 小时的日志 (每天48次轮询,保留最新 1000 行足以覆盖单日战报)
# 3. 截取过去 24 小时的日志 (每天72次轮询,保留最新 1000 行足以覆盖单日战报)
LOG_CONTENT=$(tail -n 1000 "$LOG_FILE" 2>/dev/null)
if [ -z "$LOG_CONTENT" ]; then
@@ -164,7 +180,7 @@ else
MSG="$MSG
🕒 **最近执行快照 [${LAST_MOD:-"System"}]:**
时间: ${LAST_TIME:-"暂无数据"}
时间: ${LAST_TIME:-"暂无数据"} (节点本地)
结论: ${LAST_SCORE:-"暂无数据"}"
fi
@@ -174,6 +190,8 @@ fi
# ==========================================
# 从配置文件提取当前本地版本,若无则默认为未知
LOCAL_VER="${AGENT_VERSION:-未知}"
# [时区对齐] 强制获取当前绝对 UTC 时间,作为全局统一的战报落款
REPORT_UTC_TIME=$(date -u "+%Y-%m-%d %H:%M:%S UTC")
# 极轻量级探针: 抓取 GitHub 云端的 version.txt (超时 3 秒KV解析法)
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
@@ -183,28 +201,46 @@ REMOTE_VER=$(curl -s -m 3 "${REPO_RAW_URL}/version.txt" | grep "^AGENT_VERSION="
MSG="$MSG
----------------------------
🛡️ **系统引擎状态**
⏱️ 战报生成: \`${REPORT_UTC_TIME}\`
当前运行版本: \`v${LOCAL_VER}\`"
# 比对逻辑:如果成功抓到了远端版本,且和本地不一样
if [ -n "$REMOTE_VER" ] && [ "$REMOTE_VER" != "$LOCAL_VER" ]; then
MSG="$MSG
最新官方版本: \`v${REMOTE_VER}\` (✨有新版)
💡 *司令部提示:检测到新版装甲,请长官登录节点执行平滑热更新!*"
💡 *系统提示:检测到新版引擎,建议通过控制台执行 OTA 热更新!*"
elif [ -n "$REMOTE_VER" ] && [ "$REMOTE_VER" == "$LOCAL_VER" ]; then
MSG="$MSG
最新官方版本: \`v${REMOTE_VER}\` (✅已是最新)
💡 *哨兵正在后台默默守护您的资产。*"
💡 *IP-Sentinel 持续为您守护节点。若本项目对您有帮助,欢迎前往 GitHub 赐予 🌟*"
else
# 抓取失败兜底
MSG="$MSG
💡 *哨兵正在后台默默守护您的资产。*"
💡 *IP-Sentinel 持续为您守护节点。若本项目对您有帮助,欢迎前往 GitHub 赐予 🌟*"
fi
# 5. 调用 API 推送 (接入安全网关)
# 5. 调用 API 推送 (接入安全网关,挂载控制台按钮与 GitHub 引流)
JSON_PAYLOAD=$(jq -n \
--arg cid "$CHAT_ID" \
--arg txt "$MSG" \
--arg cb "manage:${NODE_NAME}" \
--arg repo_url "https://github.com/hotyue/IP-Sentinel" \
'{
chat_id: $cid,
text: $txt,
parse_mode: "Markdown",
disable_web_page_preview: true,
reply_markup: {
inline_keyboard: [
[{"text": "⚙️ 调出该节点控制台", "callback_data": $cb}],
[{"text": "🌟 前往 GitHub 仓库点亮星标", "url": $repo_url}]
]
}
}')
RESPONSE=$(curl -s -m 10 -X POST "${TG_API_URL}" \
-d "chat_id=${CHAT_ID}" \
-d "text=${MSG}" \
-d "parse_mode=Markdown")
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD")
if [[ "$RESPONSE" != *"\"ok\":true"* ]]; then
echo "❌ 战报发送失败API 响应: $RESPONSE" >> "${INSTALL_DIR}/logs/error.log"

View File

@@ -30,6 +30,8 @@ echo "========================================================"
echo "[1/4] 正在停止并删除 Systemd 服务..."
if command -v systemctl >/dev/null 2>&1; then
echo "💡 检测到 Systemd 环境,正在抹除 Systemd 服务单元..."
# [防死锁与走火修复] 先发送 SIGKILL 瞬间抹杀常驻守护进程,防止卡死或触发遗言
systemctl kill --signal=SIGKILL ip-sentinel-agent-daemon.service >/dev/null 2>&1 || true
systemctl disable --now ip-sentinel-runner.service ip-sentinel-runner.timer \
ip-sentinel-updater.service ip-sentinel-updater.timer \
ip-sentinel-report.service ip-sentinel-report.timer \
@@ -58,13 +60,30 @@ pkill -9 -f "updater.sh" >/dev/null 2>&1
pkill -9 -f "tg_report.sh" >/dev/null 2>&1
pkill -9 -f "mod_google.sh" >/dev/null 2>&1
pkill -9 -f "mod_trust.sh" >/dev/null 2>&1
pkill -9 -f "sentinel_scheduler.sh" >/dev/null 2>&1
# 3. 清除系统定时任务 (Cron)
echo "[3/4] 正在清理系统定时任务 (Cron)..."
if crontab -l >/dev/null 2>&1; then
crontab -l | grep -v "ip_sentinel" > /tmp/cron_backup
crontab /tmp/cron_backup
rm -f /tmp/cron_backup
# [终极安全防御] 直接使用管道流过滤并覆盖,不产生任何 /tmp 落地文件,杜绝劫持提权
crontab -l 2>/dev/null | grep -v "ip_sentinel" | crontab - >/dev/null 2>&1 || true
# ==========================================
# 🛑 [物理抹除] 彻底扫除 Alpine 系统的底层残留与双路径文件
# ==========================================
for CRON_FILE in "/var/spool/cron/crontabs/root" "/etc/crontabs/root"; do
if [ -f "$CRON_FILE" ]; then
grep -v "ip_sentinel" "$CRON_FILE" > "${CRON_FILE}.tmp" 2>/dev/null || true
cat "${CRON_FILE}.tmp" > "$CRON_FILE" 2>/dev/null || true
rm -f "${CRON_FILE}.tmp" 2>/dev/null
fi
done
# 清理 OpenRC 开机启动项
rm -f /etc/local.d/ip_sentinel.start 2>/dev/null
rm -f /etc/local.d/ip_sentinel_scheduler.start 2>/dev/null
# 清理极端环境写在 /etc/profile 里的兜底启动项
if grep -q "sentinel_scheduler.sh" /etc/profile 2>/dev/null; then
sed -i '/sentinel_scheduler\.sh/d' /etc/profile 2>/dev/null || true
fi
# 4. 删除所有文件、日志与临时缓存
@@ -73,10 +92,6 @@ if [ -d "$INSTALL_DIR" ]; then
rm -rf "$INSTALL_DIR"
fi
# 拔除 /tmp 目录下的所有更新下载临时文件和 V1/V2 遗留的偏移量记录
rm -f /tmp/ip_sentinel_*.txt
rm -f /tmp/ip_sentinel_*.json
echo "========================================================"
echo "✅ 卸载彻底完成IP-Sentinel 已从您的系统中无痕移除。"
echo "💡 提示:如果安装时在防火墙放行了 Webhook 随机端口,请您按需手动关闭。"

View File

@@ -25,9 +25,21 @@ log() {
# [v3.4.0 核心] 提取当前配置中的版本锚点
local local_ver="${AGENT_VERSION:-未知}"
# 保证日志目录存在
mkdir -p "${INSTALL_DIR}/logs"
# 日志格式注入 [版本号] 追踪标识
printf "[$(date '+%Y-%m-%d %H:%M:%S')] [v%-5s] [%-5s] [%-7s] [%s] %s\n" "$local_ver" "$2" "$1" "$REGION_CODE" "$3" >> "$LOG_FILE"
local core_msg=$(printf "[v%-5s] [%-5s] [%-7s] [%s] %s" "$local_ver" "$2" "$1" "$REGION_CODE" "$3")
# [时区对齐] 强制无视本地时区,以绝对 UTC 时间写入日志
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] $core_msg" >> "$LOG_FILE"
# 强制推送到 Systemd Journal (如果系统支持)
if command -v logger >/dev/null 2>&1; then
logger -t ip-sentinel "$core_msg"
else
# 降级输出到 stdout让 Systemd 捕获
echo "$core_msg"
fi
}
log "Updater" "INFO " "========== 触发后台静默 OTA 热数据更新 =========="
@@ -122,6 +134,22 @@ if [ -n "$REGION_JSON_FILE" ] && [ -f "$REGION_JSON_FILE" ]; then
fi
fi
# ==========================================================
# 5.5. 容灾更新深海声呐底层探针 (彻底消除第三方 RCE 依赖)
# ==========================================================
TMP_PROBE="/tmp/ip_sentinel_probe.sh"
$CURL_CMD "https://raw.githubusercontent.com/xykt/IPQuality/main/ip.sh" -o "$TMP_PROBE"
# 🛡️ 供应链防毒:验证脚本内是否包含原作者特有签名,防止被墙重定向为 HTML
if [ -s "$TMP_PROBE" ] && grep -q "xykt" "$TMP_PROBE" 2>/dev/null; then
mv "$TMP_PROBE" "${INSTALL_DIR}/core/ip_probe.sh"
chmod +x "${INSTALL_DIR}/core/ip_probe.sh"
log "Updater" "INFO " "✅ 深海声呐底层探针 (ip_probe.sh) 源文件安全对齐"
else
log "Updater" "WARN " "❌ 探针源文件拉取受损或遭投毒劫持,已触发防砖机制,保留本地旧版本"
rm -f "$TMP_PROBE" 2>/dev/null
fi
# ==========================================================
# 6. 日志防满瘦身机制 (保留最近 2000 行)
# ==========================================================

View File

@@ -1,6 +1,187 @@
vera wang 2026 met gala
power outage
milton fire
gws name change
mike wells
eta aquarids meteor shower
f1 news
sony playstation lawsuit
teams
jarred vanderbilt
kane cornes
peter daicos
chris phelan
diana, princess of wales
wesfarmers
anz class action lawsuit outcome
negative gearing
christian horner
craig silvey
nepal vs oman
shane flanagan
james hopes
budget
teacher
nick foot
the rookie the bandit
deine mariner
nate caddy
cairns post
rba
nyt strands hints
product recall
sharks vs tigers
siosifa talakai
sydney vs melbourne
brodie grundy
nba jayson tatum
australia world athletics relays record
kimi antonelli miami penalty
mitchell freeway crash
roosters vs broncos
bondi beach
tai tuivasa
ufc
auckland fc vs melbourne city fc
quillan salkilld
austin reaves
carlton vs st kilda
fijian drua vs highlanders
tasmania may temperature records
colorectal cancer
bulldogs vs cowboys
the sheep detectives
dolphins vs storm
airline
gta6
mike conley
home battery rebate
nba playoff bracket
rudy gobert
sam burgess
archibald prize 2026 finalists
kyle sandilands broadcasting return
dp world tour
alperen şengün
paramedic stabbed
marwan rahiki
weather perth
david allan coe
la lakers
jarome luai png chiefs
gauche
keith urban daughter instagram unfollow
sarah ferguson
one championship
parafield airport
ai bubble
tony burke
professor richard scolyer
san antonio spurs vs portland trail blazers match player stats
prince harry working royal
retirement
rebate
denver nuggets
driver's license
nuggets
jessica biel justin timberlake ultimatum
qatar
thales
destroyer
nrl news latrell mitchell
heavy snow warning
the rookie dead ringer
ducks vs oilers
ivan soldo
uae vs oman
cheryl hines
deandre ayton
real estate market
weather brisbane
raptors vs cavaliers
galatasaray
multan sultans vs islamabad united
galatasaray vs fenerbahçe
torino vs inter
hearts fc
scottish premier league
mohsin khan
angkrish raghuvanshi
psl
magic vs pistons
celtic fc
peshawar zalmi vs lahore qalandars
angers vs psg
la liga
prem
premier league table
epl fixtures
premier league games
alex de minaur
sunderland vs nottm forest
real betis vs real madrid
sai sudharsan
jannik sinner
gt vs rcb
amd stock
carey mulligan
jermaine jackson
hulk hogan
coles
elon musk
ben roberts-smith
ig
danish malewar
assassin's creed black flag resynced
sarfaraz khan
kartik sharma
instagram stories not working
meningococcal b
sundaresh menon
thunder vs suns
cade cunningham
real salt lake vs inter miami
pope francis
camera
anzac
kids news
bonds
hung cao
classroom
michael jackson biopic movie
india women vs south africa women
nato
bayern munich
barcelona vs celta vigo
bournemouth vs leeds
leverkusen vs bayern
burnley vs man city
elche vs atlético madrid
lsg vs rr
pakistan super league
kyle sandilands alleged rant jackie o
carrie bickmore
adam levine
alexandra eala
tubi
charles melton
nuclear weapon
janet jackson
justin bieber australia tour
fleche wallonne 2026
ange postecoglou
john hattie
airbus a380
real madrid vs alavés
brighton vs chelsea
woolworth
nitish rana
lyrid meteor shower
世界地球日
youth gang
earth day
crystal palace vs west ham
d4vd
danish malewar
mi vs gt
perth weather
elijah hollands carlton football club
@@ -11,159 +192,9 @@ cailee spaeny
psg vs lyon
sporting vs benfica
celtics vs 76ers
psl
bundesliga
pl
afc cup
mars rover
celtic fc
bayern vs vfb stuttgart
bom radar
sydney weather
melbourne weather
brisbane weather
adelaide weather
myGov login
news.com.au
abc news
nrl ladder
afl scores
afl fixture
matildas
sam kerr
bunnings opening hours
coles catalogue
woolies specials
qantas
virgin australia
jetstar flights
commbank
asx 200
sydney morning herald
the age
ticketek
ticketmaster
opal card top up
myki top up
translink timetable
transperth journey planner
adelaide metro
adelaide 500
adelaide crows
port adelaide
penrith panthers
brisbane broncos
collingwood fc
sydney swans
west coast eagles
fremantle dockers
canberra raiders
mcg events
optus stadium
the gabba
state of origin
australian open
melbourne cup
masterchef australia
mafs australia
petrol prices near me
australia post tracking
service nsw login
vicroads
queensland health
medicare
ato
jb hi-fi
kmart
amazon.com.au
vivid sydney
mona hobart
dark mofo
floriade canberra
rottnest island ferry
sydney airport arrivals
rba interest rate
nsw school holidays
qld school holidays
wa school holidays
m4 traffic updates
west gate tunnel updates
bruce highway traffic
taylor swift
netflix
gemini
chatgpt
margot robbie
ange postecoglou
oscar piastri
formula 1
supercars championship
ufc
optus sport
telstra outage
kayo sports
domain real estate
realestate.com.au
seek jobs
gumtree
westpac login
anz internet banking
nab login
aldi catalogue
big w
target australia
the good guys
officeworks
dan murphys
bws
chemist warehouse
priceline
uber eats
menulog
dominos
centrelink login
medicare online
passport renewal
aec enrolment
agl energy
origin energy
stan
binge
9now
7plus
abc iview
hoyts cinemas
event cinemas
big bash league
the ashes
socceroos
bathurst 1000
booking.com
airbnb
webjet
bali weather
smartraveller
lotto results
powerball results
oz lotto
public holidays 2026
mothers day 2026
carsales
redbook
nrma
racv
racq
petrol spy
optus login
vodafone
kogan
catch.com.au
mecca
sydney fish market
queen victoria market
taronga zoo
dreamworld
movie world
wotif
anytime fitness
time in london

View File

@@ -1,8 +1,188 @@
vancouver news
bc hydro
paul mccartney
salman khan
dario amodei
randy jackson health
cape breton hiker search
angelina jolie
meteor shower 2026
national emergency alert system test
mitch marner
daisy edgar jones
jackson lacombe
nepal vs oman
naz reid
christopher nolan
jelly roll
明天的天氣
lakers vs okc
julius randle
mamata banerjee
aaj tak
star wars
oil
내일 날씨
johnston canyon
aaj tak live
mats zuccarello
paris jackson
atlas - cruz azul
cruz azul
jake paul
lafc vs san diego fc
micheal jackson
aziz ansari
downtown toronto power outage today
matt damon
seattle mariners
fraud
margot robbie
steve erceg
hacks
jabari smith jr.
ringo starr
patton oswalt
pavel talankin oscar
bmo marathon
jack della maddalena
b
adam scott
canada immigration news
bruce cassidy
nugent hopkins
nhl playoff bracket
nepal vs uae
dostal
vasily podkolzin
nh
lebron james
carter hart
rachel kerr missing
lena dunham
utah
kailer yamamoto
deandre ayton
clayton keller
jack white
keanu reeves
danielle smith
workday
jermaine jackson
prada
next oilers game
anaheim ducks coach
dhurandhar 2
bchl
from tv series
whl
shea theodore
nikola jokić
mark stone
cameron johnson
dea
dylan guenther
jamal murray
euphoria cast
mlb bo bichette
edmonton news
radko gudas
jeffrey viel
boat
joel quenneville
evan bouchard
jada wallace
oilers
boston bruins
patrick corbin
avs vs sporting
peyton krebs
elena rybakina
shane doan
ja'kobe walter
radio-canada
golf
hurricanes vs senators
al ahli
the white house
turkish airlines
fa cup games
atlético madrid vs athletic club
tyree wilson
monic néron
nvidia
aryna sabalenka
lpga leaderboard
randy travis
execution by firing squad
nelly korda
leicester city vs millwall
asteroid
sunderland vs nottm forest
real betis vs real madrid
betis real madrid
napoli vs cremonese
gta 6
japon
padres vs rockies
guide de la révolution de l'iran
casa pia vs braga
denaturalization
ocean
alberta referendum
vfb stuttgart vs sc freiburg
gpt 5.5
noah cates
pwhl scores
hank idsinga
karoline leavitt
ottawa charge
million dollar secret
white sox vs diamondbacks
suns vs thunder
stars vs wild
jaafar jackson
airport
grand theft auto vi
pentagone
etats unis
monette farms news
jose soriano
jon cooper
barcelona vs celta vigo
764
david scott
rodrigo duterte
u18 world championship
zara tindall
graham platner
lsg vs rr
nikki glaser
global news edmonton
policier
nuclear weapon
motorcycle
msc francesca
poet stock
fifa tickets
7 jours
alexandra eala
earth
zara larsson
girona vs real betis
kevyn adams
ali khamenei
inter côme
leicester city vs hull
fenerbahçe
françois bonnardel
missile
real madrid vs alavés
vrabel and russini photos
will trent
ibm
lecce vs fiorentina
celeste rivas hernandez
grand theft auto vi
abhishek bachchan
national guard of the united states
triathlon
@@ -18,67 +198,3 @@ toronto gas prices
président
mets vs cubs
matt fitzpatrick
sénateurs hurricanes
senators vs hurricanes
man utd
spurs
evan mobley
chelsea vs man united
atlético madrid vs real sociedad
roma vs atalanta
cf montreal
jakob poeltl
ukraine
contrôle routier québec
bachelorette 2026
lens toulouse
arber xhekaj
leylah fernandez
anthropic
paige wwe
inter cagliari
carrie ann inaba
syria
highway hotline sk
real betis vs braga
vincent bolloré
europa conference league
resident alien
battlefield 6
aston villa vs bologna
nottm forest vs porto
soccer
lamour est dans le pré
luis suárez
listeria
strc
bayern
arda güler
aleksandar pavlović
kooora
yalla kora
ina garten
jordan goodwin
jerami grant
jimmy snuggerud
clav
bts
zach galifianakis
billy crystal
club américa vs nashville
allison williams
CBC News
Canada.ca
Toronto Weather
NHL Scores
Amazon.ca
Air Canada
Service Canada
CRA login
Rogers
Bell Internet
Tim Hortons
Indigo
Canadian Tire
Walmart Canada
Toronto Raptors

View File

@@ -1,3 +1,184 @@
novo nordisk
daimler truck
we
angelina jolie
westfalia rhynern
rosenheim24
oliver zipse
eisheiligen 2026
finanztrends
wetter lübeck
gracie abrams
dolly parton
connor storrie
wetter
wetter bamberg
wetter kassel
venus
newcastle-krankheit
wetter ulm
wetter erlangen
west bengal election 2026
gamestop
american water works company
tesla roadster
bengal election 2026
arnold schwarzenegger
star wars tag
united states army
republikanische partei
omr 2026
rezession
franz wagner
la galaxy whitecaps
kuba
frankreich
wetter mannheim
spacex
hurricanes flyers
audi in der formel 1
hornissen
lindsey vonn
spirit airlines
bruins sabres
mammoth golden knights
chiemgau24
usa donald trump
rentenbescheid24
goodbye deutschland marie heidtke
vinicius junior
gntm wer ist raus heute
atlassian aktie
vietnam
haben bäckereien am 1 mai geöffnet
1 mai veranstaltungen in der nähe
warum ist der 1 mai ein feiertag
brenntag
tagesspiegel
wild stars
maifeiertag
stefan hartung
mckinsey & company
the taste promi wer ist raus
fc bayern münchen champions league
danny ramirez
claudia major
peter wohlleben
heizungsgesetz
jerome powell
joko & klaas gegen prosieben
swr aktuell baden-württemberg
rettungshubschrauber
lebensmittelwarnung.de
julia ruhs
vw id polo
warburg
elon musk
diablo 4 warlock build
wirtschaft
фридрих мерц
zdf-fernsehgarten
halberstadt
cathie wood
fabian güstrow
spencer jones
jean alesi
hilary duff
nhl playoffs
msci
1. mai
ronnie osullivan
loris karius
koningsdag 2026
ryan reynolds
julia stiles
saïd el mala
tag der arbeit
gesundheitspolitik
der bergdoktor
bulgarien
george clooney
jork
star citizen
donau
krassnitzer harald
buxtehude
chernobyl
avs sporting
running point
darmstadt
dahoam is dahoam
أتلتيكو مدريد ضد أتلتيك بيلباو
atlético madryt ath. bilbao
portugal
erling haaland
galatasaray fenerbahce
anna carina woitschack
nord bei nordwest
wil wheaton
christian lindner
kevin costner
samu haber
gillian anderson
peggy jerofke
rafael jódar
ernie dosio
bibi heinicke
denia
der alte blaue stunde
matthias ginter
ralf schmitz
maximilian eggestein
hull city
demirovic
elton john
jeff chabot
lindt schokolade
manzambi
angelo stiller
lamine yamal verletzung
peer steinbrück
h&m
lotto 6aus49
pistons magic
chemnitzer fc erzgebirge aue
asiago
23 nisan
sternschnuppen heute lyriden
aryna sabalenka
michael douglas
herman van veen
georgina fleur
tui
trainer bayern münchen
katie holmes
prinz frederic
bayern vs
flekken
бернли манчестер сити
ard
queen camilla
clankriminalität
politik
gladbach-news
sara gündogan
krankenversicherung
jan-lennard struff
bryan lasme
thailand
robin gosens
maremma
tennis madrid
osterburg
برايتون ضد تشيلسي
sebastian hoeneß
ncis
menowin fröhlich
maren gilzer
cineplex
gina schumacher
alexander räuscher
riza kayaalp
heppenheim
ministerpräsident
robbie williams
@@ -17,93 +198,3 @@ paris-sg lyon
arte live
dominik kohr
dumbledores geheimnisse
kampf der realitystars
kerner
tennessee
billy idol
kfc uerdingen
bastian pastewka
gnabry
lok leipzig heute live ticker
true lies wahre lügen
челси манчестер юнайтед
nurburgring
fortnite server status
süperlig
ronaldinho
esther schweins let's dance
michael jackson film 2026
oliver pocher
die queen film
milano
straße von hormus
motsi mabuse
rayo vallecano
harry meghan
irland
betis sevilla
vermisste person
konferenz league
garda
judith hoersch
jörg pilawa
strasbourg
real madrid vs bayern
kicker
mbappe
flashscore
sport1
vini jr
bet365
kompany
jude bellingham
upamecano
gute zeiten, schlechte zeiten
inflation
fog warning
wetter bochum
wetter aachen
wetter bonn
onet
protest
jamie dornan
heizöl
champions league
uefa champions league
keytruda
péter magyar
psg
hechingen
şampiyonlar ligi
tschernobyl 1986
amazon video
paris saint-germain
dietrich grönemeyer
fränkische schweiz
scarlett johansson
jeff bezos
dan brown
паспорт громадянина україни для виїзду за кордон
serena williams
манчестер юнайтед лидс
catherine deneuve
bobzin
sprit
kev
abschiebung
steuer
masters rory mcilroy
großglockner
news38
jessie cave
michael schulte
wetter frankfurt heute
bundesliga ergebnisse
aktuelle nachrichten deutschland
restaurant in der nähe
deutsche bahn fahrplan
urlaub buchen
rezept für kartoffelsalat
dax aktueller stand
apotheke notdienst frankfurt
günstige flüge

View File

@@ -1,3 +1,165 @@
2026
bad bunny
spurs - timberwolves
anthony edwards
blake lively
heidi klum
santiago segura
knicks - 76ers
robinho
ashley graham
pogacar
wetter
dinero en efectivo
itv
gene hackman
carrera f1 miami
heraldo de aragon
alberto durán cornada
tiempo zaragoza
tiempo valencia
g20
luis zahera
despido laboral
shakira
weather
renfe
alianza lima - cd moquegua
eleccion bellea del foc alicante
nba hoy
meteocat
noticiastrabajo
meme vito quiles begoña gomez
rockets - lakers
sports
sorteo once
juana acosta
raptors - cavaliers
magic - pistons
raul ruiz torero
dia
precio de la luz
fútbol
pension
formula 1
hacienda
precio de la luz hoy
metro madrid
vivienda en españa
tiempo en zaragoza
euribor hoy
austin reaves
estafa
lakers vs rockets
cienciano - atlético mineiro
anthropic
prórroga alquileres congreso
sorteo bonoloto
el tiempo hoy
aemet valencia
aemet
tiempo
huelga gasolineras
el tiempo
nepotismo
instituto cervantes
airbus
tiempo en bilbao
el
el tiempo en granada
spencer jones
encuesta
lili pink
trail blazers - spurs
clasificacion segunda
20minutos
internacional de bogotá - boyacá chicó
el tiempo en valencia
fluminense - chapecoense
heraldo de aragón
víctor muñoz villanueva
de tapas por españa
milan
aitana sánchez gijón
clasificacion liga
palencia
milan vs juventus
marseille nice
cartagena fc
vivienda
hellas verona - lecce
marbella
alfonso vazquez mayoral fuente ymbro
bucaramanga - jaguares
toulouse - mónaco
eldense
nicolai budkov kjær
aryna sabalenka
jaqueline cristian
rafa jodar
samantha vallejo-nágera
ريال بتيس ضد الريال
nvidia
rafael jódar
jodar tenista
sunderland afc - nottingham forest
rb leipzig - fc union berlin
julián alvarez
stade brestois - lens
clasificación de primera división
javier hidalgo
cayetano martínez de irujo
llanes
vfb stuttgart freiburg
roca rey
psv - zwolle
daredevil
a que estas esperando
real oviedo - villarreal
real salt lake - inter miami
pistons - magic
barcelona sc - mushuc runa
kick
raphinha
lluvia estrellas liridas
frenkie de jong
santos - coritiba
del cerro grande
phillip cocu
cospedal
david wilcock
barcelona - celta de vigo
barcelone celta vigo
macarena gómez
luis merlo
bournemouth vs leeds
racing de estrasburgo - niza
burnley vs man city
alaska cantante
raúl gonzález blanco
marta sanchez
roberto bautista
cifras y letras
xbox game pass ultimate
horse powertrain
las hurdes
herbicida cancer colon
lluvia de barro
ripoll
manilva
steve jobs
berrettini
prizmic
laura moure
lens - toulouse
girona vs real betis
yuri berchiche
posiciones de la liga
resultados liga
lfp
umar sadiq
реал мадрид алавес
jan virgili
moreirense - estoril
downton abbey
koldo garcía izaguirre
@@ -6,7 +168,6 @@ mike james
carla leite
eclipse solar del 12 de agosto de 2026
crystal palace - west ham
luis merlo
luz valdenebro
porto - tondela
santos - fluminense
@@ -37,49 +198,3 @@ st. pauli köln
iphone 18
st. pauli - colonia
nico paz
lionel messi
armengol
pau víctor
braga fc
fiorentina vs crystal palace
morante hoy
iago aspas
aston villa
real betis vs braga
ministerio de sanidad
az - shakhtar
arsenal
tiktok
harry kane
sudan
lunin
airef
tiempo de juego
fc bayern
militao
bellingham
supervivientes
jalen green
rockstar games
bam adebayo
china
suns - trail blazers
euromillones
ldu quito - mirassol
davion mitchell
universitario - coquimbo unido
El País
Marca
RTVE Noticias
La Liga
Real Madrid
Barcelona FC
Tiempo Madrid
Renfe
Iberia
Amazon España
El Corte Inglés
Hacienda
Mercadona
YouTube Música
Entradas Cine

View File

@@ -1,3 +1,175 @@
artemis ii
6 mai
gouverneur de la banque de france
saints de glace 2026
meteo le mans
chaine meteo
gap
jaylin williams
meteo toulon
éliminé koh lanta
5 mai
bath rugby
robinho
gladiator 2
patrick antonelli
meteo 15 jours
meteo france
weather
football psg bayern munich
jours fériés mai 2026
rudy giuliani
jour ferie mai
maries au premier regard episode 11
bali
coupe du monde de vtt
meteo calais
météo france
easyjet
centre presse aveyron
vladimir poutine
wetter
marathon biarritz
hassan du maroc
corse matin
invités léa salamé quelle époque
charlene wittstock
lionel messi
association sportive de saint-étienne
stellantis
groupe adp
romain gavras
livret a
pékin express 2026 candidats
autobus
moyen-orient
cyril féraud
bill ackman
teknival
madonna
le pal
brocante 1er mai
la depeche du midi
smic
2026
steven spielberg
maud bregeon
gendarmerie
chelsea football club
annulations vols prix kérosène
lafc deportivo toluca
meteo caen
playoff nba
shannon elizabeth
sandrine rousseau
brent
bernard cazeneuve
vignoble
forest automobile
brown-forman
meteo quimper
meteo brest
charles iii
montceau news
taylor swift
meteo amiens
salle de bal
reine camilla
david hockney
jacques dutronc
franck thilliez
squamish
nasa
nba spurs portland
mourad zeghidi
maries au premier regard episode 10
tchad
meteofrance
meteo grenoble
film
meteo vannes
cnews direct
toulouse clermont
martin short
le diable s'habille en prada 2 sortie
gautier larsonneur
milan vs juventus
stanley tucci
avs sporting
lambert wilson
tochukwu nnadi
greenwood
jaqueline cristian
thomas ramos
om nice
bordeaux-bègles montpellier
drone
rochdale association football club
doctor who
c à vous c à vous
sabalenka
national 2 groupe a
lena situation
rafael jódar
mask singer
alex de minaur
oyonnax agen
lucie castets
napoli - cremonese
ligue1+
agnes lassalle
jean luc reichmann
m6
caitlyn jenner
star academy
bfm marseille provence
hunter schafer
unchosen netflix
john travolta
valence-romans brive
reem kherici
will smith
real salt lake inter miami
neymar
les traîtres
jacob elordi
pistons magic
invincible
santos coritiba
ios 18
la liga
royaume uni interdiction tabac
stephane tapie
tondelier
benjamin duhamel
loto 22 avril 2026
interdiction tabac royaume uni
lol qui rit sort
eva longoria
alain bauer
achraf hakimi
ibrahim mbaye
mma
roberto calvet
budget
coupe du monde de football 2006
plus belle la vie en avance
mateus fernandes
tour des alpes 2026
lorenzo finn
maine-et-loire
mathieu flamini
kamel daoud
vandalisme
sydney sweeney
julien odoul
france2
xavier dupont de ligonnès
elisabeth 2
antibes
girona betis
christine bravo
الريال ضد ألافيس
madonna age
margot haddad
ana riera
@@ -5,7 +177,6 @@ hinaupoko devèze
bruce toussaint
cheque energie
reid wiseman
mma
loto 20 avril 2026
from serie
toulouse
@@ -27,83 +198,3 @@ adil rami
castres toulouse
angel
stéphane bern
anne claire coudray
pmu résultat
laury thilleman et paul mirabel
quinté du jour
euromillions 17 avril 2026
alain bauer
uson
guillaume meurice
pmu
grenoble oyonnax
bagarre
programme télé
tchernobyl
géraldine maillet
biot
racing
liga europa
tv ce soir
programme tv de ce soir
brad pitt
aston villa
michael olise
robert ménard
match ce soir
sporting
ester exposito
bellingham
iptv
militao
jeff goldblum
lunin
kiev
julien royal
viktor orbán
aqababe
nhl
suns trail blazers
bam adebayo
davion mitchell
l
santos recoleta football club
atletico madrid
tf1
uefa champions league
camille cerf
giorgi mamardashvili
streaming football
atlético madryt fc barcelona
miss france
rts
leonardo balerdi
yann barthes
alain delon
loto du 13 avril 2026
juan arbeláez
hbo
katy perry justin trudeau
jacob elordi
tondela gil vicente
le rugbynistère
epstein
kino
horoscope du 13 avril 2026
golf masters augusta 2026
boursorama bourse
cac 40
sept à huit
ligne 12 métro
alice taglioni
pedro sánchez
meteo paris
actualités en direct
résultats ligue 1
pharmacie de garde
horaires sncf
recette crêpes
cac 40 en direct
acheter billet louvre
boulangerie autour de moi
carte vitale ameli

View File

@@ -1,3 +1,176 @@
麥美恩
金建希
航空
袁偉豪
thunder vs lakers
etv
雷霆 對 湖人
活塞 對 騎士
八達通
兵工廠 對 馬德里競技
龍蟠苑
飛驒山
澳元
草 蜢
kktix
spurs vs timberwolves
安東尼·愛德華茲
艾佛頓 對 曼城
何君堯
失業
世界盃2026
周殷廷
鹹田灣
投資
漢坦病毒
急性內耳迷路炎
地獄占星師
灣仔
cavaliers vs raptors
charlie puth
兵工廠 對 富勒姆
趙雅芝
coleman wong
jayson tatum
celtics vs 76ers
osasuna vs barcelona
塞爾提克 對 76人
香港人
伊朗
咖啡
c羅
raptors vs cavaliers
lakers
湖人
nba playoffs
nba live
高淑樺
暴龍 對 騎士
黃澤林
lck
黎智英
草蜢演唱會
timberwolves vs nuggets
走私
76ers vs celtics
周嘉洛
莊子璇
深圳地鐵
奧斯汀·里夫斯
國際珍奶日香港
天仁茗茶
伊朗海軍
居屋
湖人 對 火箭
陳柏宇
lakers vs rockets
異環兌換碼
洪金宝
梁嘉莹
spurs vs trail blazers
羅艷卿
weather forecast
observatory hk
尼克 對 老鷹
sfc
馬刺 對 拓荒者
粉嶺繞道
nuggets vs timberwolves
蔡卓妍
港 漂
suns vs thunder
鍾澍佳
萧正楠
金塊 對 灰狼
魔術 對 活塞
太陽 對 雷霆
港 人 北上
hsbc
何守信
謝賢
房協
rockets vs lakers
火箭 對 湖人
曾志偉
簡淑兒
北海道地震
莫 雷 拉
蔡一傑
車路士
羅志祥
自助餐
馮盈盈
無時空之戀
方力申
可嵐
切爾西 對 里茲聯
谷 婭 溦
曼城
印度
英超
利物浦
pl
arsenal vs newcastle
premier league standings
曼城 對 南安普敦
寒戰
米高積遜
jaafar jackson
nvda
吳業坤
麻疹
林盛斌
cuaca besok
明天的天氣
weather tomorrow
rthk
weather hong kong
天文台
hk observatory
observatory
csk vs mi
長沙灣
魔音女團
球迷世界
天星銀行
game
林嘉華
套餐
賈曉晨
hk weather
綠色債券
barcelona vs celta vigo
weather
7-eleven
天气
班來 對 曼城
埃爾切 對 馬德里競技
rosenior
艾納斯
liam rosenior
巴黎聖日耳曼 對 南特
chatgpt image 2
啟德醫院
李泳漢老婆
破產
繼承人
英皇群星演唱會
布浩榮
新聞
貨幣貶值
居 屋 2025
3988
李泳豪老婆
皇家馬德里 對 艾拉維斯
李泳漢
鄭欣宜
srh vs dc
鍾嘉欣
張柏芝
江美儀
全港戲院日 2026
江旻憓
陶傑
水晶宮 對 西漢姆聯
吉達艾阿里
山口智子
@@ -8,20 +181,16 @@
麥當勞
首岸
中国商飞c919
pl
bundesliga
hailey bieber
德甲
cherki
now
曼城
now tv
al nassr
洪金寶
曼聯
車路士
切爾西 對 曼聯
英超
何沛珈
熱刺
tottenham vs brighton
@@ -29,78 +198,3 @@ tottenham vs brighton
epl
司機
补贴
華富邨
江美儀
零售
藍莓
商湯科技
周國豐
啟點
歐聯
神戶勝利船
潘宏彬
姚正菁
木乃伊
ios 26
李克寧木乃伊
田啟文
曼寧加
arsenal
ucl
歐洲聯賽冠軍盃
arsenal vs sporting
bayern vs real madrid
real madrid
皇馬
拜仁慕尼黑 對 皇家馬德里
claude
補貼
nba 直播
航空公司
向華強
李嘉欣
typhoon
nba
nba線上看
nba直播
全民國家安全教育日
運輸署
liverpool vs psg
利物浦
barcelona
歐冠
馬德里競技 對 巴塞隆納
利物浦 對 巴黎聖日耳曼
hkjc
馬會
航空
2035
man united vs leeds
曼聯 對 里茲聯
prediction market
預測市場
polymarket
巴基斯坦
sndk
楊何蓓茵
樂珈嘉
姜濤
日經平均指數
飲茶
上市公司
daniel caesar
中年好聲音4
香港天文台
煤氣
livenation
政府
香港天文台天氣預報
MTR 港鐵路線圖
OpenRice 附近美食
LIHKG 討論區
恆生指數今日行情
SCMP breaking news
HKEX 港交所股價
國泰航空航班狀態
香港迪士尼樂園門票
百佳超級市場網購

View File

@@ -1,10 +1,191 @@
渋野日向子
コンサドーレ
コンサドーレ札幌
栃木sc
秋山翔吾
大分トリニータ
藤枝myfc
大阪桐蔭高等学校
鹿児島ユナイテッド
j2
変死体
ミニストップ
ゴゴスマ
韓国 ホルムズ 海峡
バンテリンドーム
松本光平
クーリエ・ジャポン
タイアニ ライン デルス
阿智村
オリックス・バファローズ
無印
kpmg
トランテックス
31
jin
スタバ
ゴンチャ
travis japan
ウォニョン
dena 対 広島
菅沼菜々
カターレ富山
北九州 対 大分
山形 対 栃木sc
平良海馬
海上自衛隊
ベナビデス
weリーグ
田中健
ミステリーウェイ
石川遼
西野七瀬
堀田真由
横浜fc 対 相模原
イラストやメーカー
薬局
g大阪 対 神戸
オコエ瑠偉
川崎
湘南 対 栃木c
バルミューダ
hikakin
東京
近畿大学
小樽
田園都市線
常磐線
東京スカイツリー
みずほ銀行 ゴールデンウィーク
力士
秋元杏月
四国電力
佐久間宣行
和田 まあ や
浅田 美代子
バトオペ2
千葉県
慶應義塾大学
パンチ
ぶ いす ぽ 活動 休止
ベガルタ仙台
サンフレッチェ広島
相模原 対 栃木c
ロッチ中岡
奈良 対 高知
福島圭音
神宮球場
オスナ ヤクルト
浦和 対 川崎f
村上宗隆
ゴー イントゥ スカイ
地球温暖化
文部科学省
カベポスター
奈良県
バナナマン日村
山本由伸
警視正
中国電力
jr九州
村田製作所
四谷大塚
外崎 修 汰
備蓄
日産 キックス 新型
ドナルド・トランプ
ニューヨーク
小谷昌太郎 イケパラ
東京エレクトロン
ミラン 対 ユヴェントス
宇連ダム 貯水率
櫻坂46
与沢翼
岩手県 大槌町 山林火災
谷原章介
端午
週間天気予報
トリノ 対 インテル
佐野海舟
アーセナル
高岡蒼佑
マンチェスター・シティfc
ゲンク 対 スタンダール
kick
chat gpt
hulu
nac 対 アヤックス
エプスタイン
arsenal đấu với newcastle
ベティス 対 rマドリード
dior
伊藤美来
フィギュア
玉置浩二
生田絵梨花
日本高野連会長辞任
anaheim
sbiグローバルアセットマネジメント
ストレンジャーシングス
石油
ios 26.4 2
ポケモンカード
シュトゥットガルト 対 フライブルク
ドラクエ スマグロ 攻略
ipl
アコム
鈴木愛理
sox指数
村上世彰
桐山 照史
マラッカ海峡
ソニック
sbi新生銀行 株価
マイクラ
川口 春奈
サンダー 対 サンズ
インフルエンサー
サンケイビル
岡村隆史
上田竜也
メタプラネット
バルセロナ 対 セルタ
三橋くん
エルニーニョ
バーンリー 対 マンc
ボーンマス 対 リーズ u
elche vs atlético madrid
レバークーゼン 対 バイエルン
ソシエダ 対 ヘタフェ
サイメモリ
b リーグ 順位
日ハム
ナダル
失点
岩瀬洋志
ファイターズ 試合
江村美咲
宝島社
井ノ原 快彦
ファイターズ
西郷隆盛
ボーダー
チェルシー
関税
ブライトン
佳子内親王
rマドリード 対 アラベス
鳥貴族
ブライトン 対 チェルシー
アシエンダ乗馬学校
ngày trái đất
加藤小夏
町田ゼルビア
モンスターハンターシリーズ
クリスタル・パレス 対 ウェストハム
吉田正尚
旭琉會
神戸
kick
てんちむ
浜辺美波
デーブ ロバーツ
@@ -14,90 +195,6 @@ kick
ちゃんよた
坂本 花織
松山 千春
dior
リーグアン
伊勢谷友介
bayern vs vfb stuttgart
chelsea vs man united
唐田えりか
102回目のプロポーズ
デゼルビ
アトレティコ 対 ソシエダ
チェルシー 対 マンu
スパーズ
清春
ディエゴ・ゴメス
ps5
ハイウェイ の 堕 天使 興行 収入
カブス 対 メッツ
dazn
サッスオーロ 対 コモ
杉咲花
町田 対 アル・イテハド
家計
週末旅の極意
北斗の拳
qvc
小芝風花
中井亜美
afc u20女子アジアカップ
ネオジオ
uefaヨーロッパリーグ
加藤史帆
志田未来
伊藤英明
島田麻央
al-nassr vs al-ettifaq
arsenal
レアル・マドリード
バイエルン
abema
real madrid
lucknow super giants vs royal challengers bengaluru standings
bayern vs real madrid
給付
wowow
小泉進次郎
政権
ミキティ
ソニック
今日のドジャースの結果
新名神高速道路
わたせせいぞう
ピーチ航空
山本由伸
アレックス・ベシア
リバプール
champions league
エルニーニョ
アトレティコ 対 バルセロナ
オープンワールド
atlético madrid vs barcelona
松田好花
リコール
man united vs leeds
白鵬翔
日本アカデミー賞 最優秀助演男優賞
マンu 対 リーズ u
サンディスク 株価
らじるらじる
マクドナルド
ロシア
広島市
ゲイブル・スティーブソン
日本維新の会
新 日本 繊維
高見沢 俊彦
不登校
後期高齢者医療制度
バーミヤン
宮澤エマ
チケプラ
横綱
宮里美香
東京 天気 明日
新宿 おすすめ 居酒屋
最新のニュース 速報
ゴールド 相場 チャート
近くの静かなカフェ
円安 影響 生活

View File

@@ -1,3 +1,185 @@
박지원
울산항
에이 비엘 바이오
하하
삼성물산
풍력 발전
지수
수익률
라이언 와이스
사우디아라비아
nc 대 ssg
경북대학교
한화 대 kia
롯데 대 kt
키움 대 삼성
두산 대 lg
대학
여객선
고우림
안젤리나 졸리
안성재
토요타 rav4
황희찬
g7
항공 승무원
스트레티지
대한전선
나승엽
인플루언서
이재욱
삼성바이오로직스
스마일게이트
강민호
mls
장도연
이재명 정부
예방 접종
통장
lafc
소송
울산 대 포항
fc 서울 대 김천상무
차명석
붉은사막
소라와 진경
멕시코 축구 국가 대표팀
한화시스템
윤영경
월세
오타니 쇼헤이
이서진
굴리엘모 비카리오
재건축
나솔
재판
라이엇
진소리
아빠하고 나하고
mlb
박진만
중고
롯데 자이언츠
강동원
혁신도시
제로페이
체이스 인피니티
주스 아저씨
권민규
변요한
이유 비
변호사 시험
금보유고
이상화
커피
김효범
김범석
국립중앙도서관
어도어
황재균
주호민
채원빈
분식
위례신도시
박동혁
박용호
한화첨단소재
한상진
차승원
한국경제
효성중공업
최홍라
uae vs oman
부정승차
박하나
일본인
공천
한고은
우체국
sk증권
세리에 a
암호화폐
수지
새마을금고
사주
차두리
평택시 을
야닉 시너
정성호
첼시
psg
리그앙
arsenal đấu với newcastle
맨시티
man city đấu với southampton
아스널
arsenal vs newcastle
아스널 대 뉴캐슬
man city vs southampton
안보현
트와이스
s
엔비디아 주가
이경실
신발
하현상
김수희
gt vs rcb
amd 주가
왕다루
시그널
모하메드 살라
공화당
윤하정
청남대
더보이즈
노민우
서비스나우
김민지
박해미
국가유산청
삼성전자 주가
두산에너빌리티 주가
김성수
한국사
삼성전기 주가
국립중앙박물관
대우건설 주가
지방 선거
서정대학교
캔바
한국항공우주산업
디트로이트 대 올랜도
리그 1
elche vs atlético madrid
알나스르
al-nassr vs al ahli
10
로세니어
psg 대 낭트
테슬라 실적발표
루카스 모우라
9950x3d2
삼천당 제약 간담회
김재윤
k리그1 순위
유영찬
이호연
sxmb
문재인
생산직
강훈식
cnn
리그오브레전드
박환희
박지현
카토
와우넷
지구의 날
컴프야
차지연
크리스털 팰리스 대 웨스트 햄
비상계엄
연기금
@@ -16,32 +198,3 @@ bundesliga
fotmob
윤아
김영인
манчестер сити арсенал
케이뱅크
날씨
환율
삼성전자 주가
손흥민
토트넘 경기 일정
넷플릭스
국민은행
네이버웹툰
로또 당첨번호
쿠팡
KBO 리그
프로야구 순위
아이폰 15
챗gpt
인스타그램
유튜브 밴스드
이강인
김민재
LCK 일정
T1
페이커
무빙
카카오톡 PC버전
당근마켓
배달의민족
올리브영
메이플스토리

161
data/keywords/kw_MY.txt Normal file
View File

@@ -0,0 +1,161 @@
mykad
honda city
sspn
cimb group holdings berhad
谢伊·吉尔杰斯-亚历山大
recoleta fc vs santos fc standings
teams
ucl final 2026
雷霆 - 湖人
final ucl
nubhan
economy
johor darul ta'zim
world championship snooker final
安东尼·爱德华兹
hantavirus infections cruise ship
undang luak sungai ujong
peluru berpandu
nepal vs oman
马刺 - 森林狼
central bank of malaysia
trisha
rudy giuliani
taiping
go live
perkahwinan
malaysia marathon
results.eci.gov.in 2026
dean wade
mom
jeram toi
haji
earthquake
leverkusen vs rb leipzig
凯尔特人 - 76人
tiong king sing
gaji mei 2026
palmeiras vs santos
奥萨苏纳 - 巴塞罗那
inter miami vs orlando city
lebron james
uae opec exit analysis
grab cross border taxi
menteri besar negeri sembilan
malaysia badminton thomas cup
nba live
猛龙 - 骑士
flower moon
ek din movie review
火箭 - 湖人
macbook
china
global sumud flotilla 2.0
nepal vs uae
森林狼 - 掘金
robotaxi
76人 - 凯尔特人
selamat hari buruh 2026
f1 schedule
lakers vs houston rockets
amira othman
lakers vs houston rockets match player stats
federal reserve interest rates
adidas
mohamad hasan
austin reaves
lafc vs toluca
lakers
湖人 - 火箭
marissa dania hakim
oma vs nep
ppv
mothers day
nte redeem code
skyechip
马刺 - 开拓者
one championship live
labour day
indonesia thomas cup
anggota tentera
阿sa
掘金 - 森林狼
one championship
apple iphone foldable
太阳 - 雷霆
p1p plate
nuggets vs timberwolves
electronic invoicing
malaysian meteorological department
datuk seri aminuddin harun
court
bella astillah
today wordle hints
ezi ray 01
uae vs oman
rekod dunia
mayat
milan vs juventus
osasuna vs sevilla
estrela amadora vs porto
lockheed martin
galatasaray vs fenerbahçe
polis
torino vs inter
terengganu fc
angkrish raghuvanshi
dortmund vs sc freiburg
atlético madrid vs athletic club
fa cup games
แมนซิตี พบ เซาแธมป์ตัน
benfica vs moreirense
city
valencia vs girona
man city games
bayern vs barcelona
英超积分榜
angers vs psg
sunderland vs nottm forest
real betis lwn real madrid cf
napoli vs cremonese
real betis vs real madrid
perfect crown ep 5
siti mastura mohamad
jannik sinner
sai sudharsan
yaris cross hybrid
cretaceous kraken
rayo vallecano vs espanyol
dji lito x1
levante vs sevilla
danish malewar
mukesh choudhary
lyrid meteor showers
jamie overton
piala uber
madrid open
dewald brevis
counter strike
pistons vs magic
real salt lake vs inter miami
chart gpt
asiago
liza hanim
good morning
pandikar amin mulia
勒沃库森 - 拜仁
santos vs coritiba
Malaysia
Kuala Lumpur
Bursa Malaysia
Ringgit
Maybank
CIMB
Shopee MY
Lazada Malaysia
KWSP i-Akaun
LHDN MyTax
Anwar Ibrahim
Johor Bahru
Penang
Nasi Lemak

95
data/keywords/kw_NG.txt Normal file
View File

@@ -0,0 +1,95 @@
trending video
recoleta fc vs santos fc standings
ig
2026 uae eid al adha
thunder vs lakers
adams oshiomhole
pistons vs cavaliers
jamb news
2027 social security cola
10th nigeria national assembly
spurs vs timberwolves
moniepoint
knicks vs 76ers
atenas cordoba vs argentino junin
ypiranga fc rs vs ituano fc sp
birthday wishes
apple iphone 18 pro max
hantavirus infections cruise ship
ben ayade
desmond elliot
joint admissions and matriculation board
nrc
raptors vs cavaliers
f
cavaliers vs raptors
hantavirus
ol vs rennes
35th fighter wing
vinícius júnior
espanyol vs real madrid standings
liverpool news
nigeria news
40k armageddon box
palmeiras vs santos
celtics vs 76ers
inter miami vs orlando city
arsenal vs fulham premier league
alabama redistricting
barca news
barcelona news
rockets vs lakers
magic vs pistons
twitch tv
leke abejide
mallorca
living wage
noah okafor
remi tinubu
imperfect women
bbc.hausa
ekiti
china
timberwolves vs nuggets
76ers vs celtics
knicks vs hawks
hawks vs knicks
spotify
labour day
asake new album
lakers
lakers vs rockets
pistons vs magic
orlando city vs new england
ibukun awosika
xiaomi 17t anatel listing
sporting fc
alvarez
asake
arsenal vs psg
william ruto
spurs vs trail blazers
ahsoka tano replacement star wars
san lorenzo vs santos
the devil wears prada 2
king charles
house of the dragon season 3
gta 5
top scorer in champions league
nuggets vs timberwolves
suns vs thunder
bybit
jack grealish
sanwo olu
saheed balogun
man u fc
live score today
tinubu
lagos weather
super eagles
naira exchange rate
davido
wizkid
burna boy
afcon
nollywood

View File

@@ -1,3 +1,178 @@
stagflatie
adyen
weer groningen
weer utrecht
weerbericht
andes virus
stranger things
ziggo
priscilla wildeman
tanner horner
peter bosz
blue ivy
ryan reynolds
accijns
bevrijdingsdag
walvis
iptv
mark carney
prime video
roma - fiorentina
georginio wijnaldum
intercepted
ulster
rudy giuliani
weer rotterdam
weather
benzine en diesel
witsnuitdolfijn
farioli
ongeval
grand prix formule 1 van miami 2026
formule 1
uitslagen eredivisie
ontsnapte zebra
miami f1
shakira
rave
daghoroscoop
weeronline
wetter
isack hadjar
vakantiegeld aow netto
shivon zilis
china
buienradar
politie zandvoort
nl alert
oekraïne
jade kops erehaag
onweer
corinthians - peñarol
john de bever
lance stroll
mafs
nexperia
hypersonische raket
eindhoven
f1 kalender
lakers vs rockets
bultrug timmy
b&b vol liefde
vakantiegeld
martijn van der vorm rotterdam
ismaël baouf
ea sports fc 26
bauke mollema
xrp nieuws
kaaba
mathieu van der poel
een miljard
p2000
james comey
helena bonham carter
george russell
openbaar vervoer
wayne mardle
europese unie
florence pugh
concert golden earring ahoy
de telegraaf
openai
crypto insiders
stefano domenicali
brand emmeloord
loosdrecht
taylor swift
militair
emma heesters
luik-bastenaken-luik
luilakken koningsdag
rusland
car rental
112 leiden
taxi
michael
passengers
finale wie is de mol
bourtange
marseille - nice
unchosen
prinses
sylvester stallone
28 years later
programma koningsdag 2026
milan - juventus
aryna sabalenka
fortuna
curacao
atlético madrid - ath. bilbao
digid solvinity
baywatch
boy kemper
donyell malen
twente - nec
afc champions league
wesley sonck
arnold schwarzenegger
devil wears prada
jagiellonia białystok górnik zabrze
max verstappen redbull
mvv - top oss
energiecontract
real betis - real madrid
fc den bosch
maarten van rossem
jake paul
financiën
zonnepaneel
xrp
cyprus
verdachte
112 eerbeek
golden earring
sergiño dest
david wilcock
asiago
shownieuws
nijmegen
keira knightley
112 meldingen amsterdam
dierenmishandeling
112 amsterdam
freek rikkerink
poetin
atalanta - lazio
mr nobody against putin
club brugge - mechelen
frank hosmar
barcelona - celta
kees flodder
burnley - manchester city
lodewijk asscher
vallende sterren
guus meeuwis
hoofddorp
kaja kallas
politiek
stroomstoring amersfoort
solvinity digid
wout weghorst
jamie kames
bitvavo
box 3
ronde van de alpen
matthias uhl
taken film
robot
girona - real betis
real madryt deportivo alaves
tbilisi
southampton - bristol city
vittoria guazzini
oppo find x9 ultra
real madrid - alavés
الريال ضد ألافيس
lecce - fiorentina
pogoda jutro
vierhouten
@@ -23,63 +198,3 @@ pogoń szczecin lech poznań
stand premier league
bulgarije
chelsea - man utd
atlético madrid - real sociedad
xavi simons
ayase ueda
roma - atalanta
rtv noord
paraguay
sergio herman
fed
keuken kampioen
legia warszawa zagłębie lubin
ripple
voorzitter fed
bahamas
overtreding
almere city
real betis
sean connery
l1 nieuws
ronaldinho
demi de boer
bondgenoten
frank masmeijer
real betis - braga
ethereum
aston villa - bologna
manuel neuer
neuer
olise
mbappe
sporting
live tv
bayern munchen
arda güler
ziggo
arda guler
netflix
frenkie de jong
kanye west
vandaag inside
at5
veroordeling
verenigde staten
alec baldwin
anna paulowna
şampiyonlar ligi
NOS Nieuws
Buienradar
Rijksoverheid
Albert Heijn
Funda
Marktplaats
KLM
Ziggo
ING Bank
Eredivisie
Amsterdam Weer
Bol.com
Treinkaartjes NS
PostNL
Pathé

View File

@@ -1,3 +1,173 @@
housing and development board
dress code
micron technology
thunder vs lakers
pistons vs cavaliers
阿森纳 - 马德里竞技
马来西亚
hydrogen
shell
kartik sharma
dario amodei
keppel infrastructure trust
toto jackpot singapore
anthony edwards
dbs bank
补贴
ticketmaster
spurs vs timberwolves
knicks vs 76ers
新加坡博彩公司
kerala election results
toto
ndtv live
oneindia tamil
us-iran news
results.eci.gov.in 2026
tamilnadu election result date 2026
tamil nadu election results
dinamalar
tamil nadu election results date 2026
san diego fc vs lafc
citigroup
spirit airlines flights
thomson-east coast line
inter miami vs orlando city
mothers day
jet bridge
mls
celtics vs 76ers
james seah
8视界新闻
lebron james
jpmorgan chase
singapore airlines ultra-long routes
drunk driving
kwek leng beng
raptors vs cavaliers
rockets vs lakers
magic vs pistons
warren buffett
lawrence wong may day speech
paynow
cold war 1994
expo event
timberwolves vs nuggets
76ers vs celtics
gardens by the bay
weather forecast
universal studios singapore
nba scores
lorna hajdini
cancer
lakers
dbs earnings
lafc vs toluca
cyclist
lakers vs rockets
jerome powell
white house correspondents' dinner
oman vs nepal
primary 1
mapletree industrial trust
spurs vs trail blazers
knicks vs hawks
snake
marriage
san lorenzo vs santos
bankruptcy
诈骗
us-iran
flight
jeanette aw
jisoo
nuggets vs timberwolves
suns vs thunder
drug
jimmy kimmel
erika kirk
elon musk
hokkaido earthquake today
labour day
angela palmares
chernobyl disaster
tengah garden residences
torino vs inter
dortmund vs sc freiburg
angkrish raghuvanshi
mohsin khan
running man
arsenal vs lyon
genoa vs como
kkr vs lsg
bwf
chelsea vs leeds
bologna vs roma
angers vs psg
giant octopus fossil
premier league standings
apple iphone fold
arsenal vs newcastle
man city vs southampton
bundesliga
israel iran war
freddie woodman
sunderland vs nottm forest
real betis vs real madrid
anne hathaway
michael jackson
sai sudharsan
madrid open
amd
gt vs rcb
ijooz
raghav chadha
darren wang
mukesh choudhary
danish malewar
allah ghazanfar
peregrine falcon
airasia flight
arrest
hao mart singapore
real salt lake vs inter miami
pistons vs magic
krisflyer
michael jackson biopic
新加坡
atalanta vs lazio
伯恩利 - 曼城
porto vs sporting
cdl directors resign millennium copthorne
tsla
leverkusen vs bayern
burnley vs man city
elche vs atlético madrid
psg vs nantes
al-nassr vs al ahli
changi
rr vs lsg
primary school
alexandra eala
tan su shan
sundaresh menon
moulin rouge musical singapore
south korea
step
gamba osaka vs avispa fukuoka
honor 600 pro
china shipyards oil tanker orders
coe
real madrid vs alavés
brighton vs chelsea
nitish rana
earth day
michael movie
kevin warsh
srh vs dc
chinese aircraft carrier liaoning
andie chen
jesseca liu wins best actress
crystal palace vs west ham
grok
gemini
@@ -6,7 +176,6 @@ gpt
ai
is chatgpt down
strait of hormuz news
danish malewar
mi vs gt
psg vs lyon
sporting vs benfica
@@ -29,81 +198,3 @@ tinie tempah
wrexham vs stoke city
sassuolo vs como
the straits times
india women vs south africa women
beef season 2
loyang valley
world cup 2026
afc champions league
hormuz
malacca strait
kkr vs gt
aston villa vs bologna
mumbai indians vs punjab kings standings
al sadd vs vissel kobe
amd share price
opus 4.7
pete hegseth
naman dhir
yen singapore dollar
mayank rawat
dji pocket 4
real madrid
al-nassr vs al-ettifaq
bayern vs real madrid
arsenal vs sporting
lucknow super giants vs royal challengers bengaluru standings
is claude down
claude
allbirds
red sea
rcb vs lsg
retirement
asia flights delays cancellations
suns vs trail blazers
johnny somali
bam adebayo
zhang linghe pursuit of jade
roman gofman
cruz azul vs lafc
ocbc
santos vs recoleta
atlético madrid vs barcelona
ipl schedule
liverpool vs psg
iran blockade strait of hormuz
kartik tyagi
carlos alcaraz
propertylimbrothers
byeon woo-seok
mahathir mohamad
csk vs kkr
man united vs leeds
cbse class 10 result 2026 date
euphoria season 3
srh vs rr
tamil new year 2026
low de wei
pope
flexar
microsoft outlook
new rolex 2026
medical classification
blasphemy law
big bang coachella 2026
小贩
malaysia fuel price crisis
sbti personality test
cancer survivor
tim cook
spurs vs nuggets
asia flights cancelled delayed
singapore weather forecast
mrt map singapore
straitstimes breaking news
cpf board login
hdb bto launch updates
best chicken rice near me
public holidays sg
singpass login portal
changi airport flight status
iras tax filing

View File

@@ -1,3 +1,181 @@
宋成文
teams
軍 公教
廣達
高國豪老婆
周子 瑜
光寶科
asml
新莊淹水
金凱德
台玻
九合一選舉
頎邦
五月天
諾和諾德
星宇航空
瑞軒
0050 成分 股
亞馬遜 公司
行政專機
漢他病毒怎麼傳染
封鎖
博通
2388
陳光復
華倫·巴菲特
許常德
英特爾
00923
friday
中華民國國防部
林維恩
劉宇寧
2 奈 米 製程
淡江大橋何時通車
天母
陳盈潔
林襄
李芸
夾子園火災
黃路梓茵
五十嵐淳子
日春木瓜牛奶
總統
古林睿煬
槍決
dazn
陳芋汐
福特汽車
洋基
黃 國昌
高速鐵路
lck
og anunoby
白沙 屯 媽祖
playstation
星巴克買一送一
psy
70歲換駕照
台灣
email
林逸欣
張宇
任天堂
記憶體
ive
k spark 高雄
斑斑
粿 粿 判決書
蔡沁瑜
十銓科技
邱軍
股東會紀念品
佳必琪
勞動 節
鍾東錦
棒球
spurs vs trail blazers
8028
鄭嘉睿
spencer jones
張凌赫
山本由伸
陳德修
國巨
俠 盜 獵 車手 vi
晶豪科
無限城
謝淑薇
台中停電
公務員
停電
hito 流行音樂獎
國際珍奶日
台積電 內 鬼
日圓
佳能
聯電 股東 會 紀念品
張雪機車
航空
暴龍 對 騎士
王苡丞
遊戲
chelsea đấu với leeds
เชลซี พบ ลีดส์
聯發科技
詹姆士
田麗
token
兵工廠
魔術 對 活塞
arsenal đấu với newcastle
t.o.p.
吸血鬼爬行者
足總盃
arsenal vs newcastle
man city đấu với southampton
消費券
6187
cpo概念股
anaheim
iu
山口智子
蔡依珊
林岱安
michael jackson 電影
行動電源
地震
地震速報
宋祖兒
porter
謝京穎
德州儀器
台新綜合證券
希臘
費城半導體
mrvl
狄鶯
三星罷工
00981a
馬斯克
辛耘
宏碁股價
0056
2330
雷霆 對 太陽
0050股價
006208
景碩
女警陳芊雯
廢死聯盟
西甲
台灣積體電路製造
高頻寬 記憶 體
戴奧辛
3665
宋晟睿
黃 甘霖
劉家翔
王耿豪
王勝偉
009816
thời tiết ngày mai
明天的天氣
總部
美光科技
cpbl
中華職棒
中職
黃甘霖
6147
earth day
陳哲遠
台鐵
斯普拉遁 塗擊隊
麥可傑克森
神將彩券行
米可白
洪敬堯
華邦電子
柔美的細胞小將 3
@@ -9,7 +187,6 @@
rklb
amd stock
宋仲基
兵工廠
德甲
塞爾提克 對 76人
justin bieber 演唱會
@@ -21,42 +198,3 @@ justin bieber 演唱會
tottenham vs brighton
長野縣
交通安全
朋友收集夢想生活
麥克傑克森
王濛
騎士 對 暴龍
熱刺 對 布萊頓
iem rio 2026
garret anderson
墓乃伊
曹格
claude design
柯文哲
金剛
荷 姆 茲 海峽
東北 季風
斯圖加特公開賽
歐聯
菡生婦幼診所
台鐵訂票
飛機
東光路
货币
amd
航空母艦
axti
Yahoo奇摩
天氣
蝦皮購物
PChome
Momo購物網
Mobile01
Dcard
巴哈姆特
中時電子報
聯合新聞網
台灣高鐵
台鐵時刻表
中華電信
統一發票
勞動部

View File

@@ -1,6 +1,177 @@
connections today
henry cavill
scottish sun
the boys season 5 finale
bolton news
recoleta fc vs santos fc standings
latest news
pizza
postcode lottery
daredevil born again
ryan reynolds
bbc radio 4
steam controllers
man utd news
connections nyt
wren kitchens
emmerdale spoilers
time
bb
ukraine russia war
kerala election result
starbucks
star wars day
who won the snooker last night
daily record
sports
eswatini
mcdonald's
election commission of india
funeral director
restaurant
southampton marathon 2026
jet2.com
lewis hamilton ferrari 2026 season
ipswich town football
on
nationwide building society
savings
nursery school
nba scores
katie price
lebron james
anne boleyn
beyond paradise kris marshall
nba schedule
superyacht sinking mike lynch
rockets vs lakers
ricky saints
treasury
inoue vs nakatani
mark allen snooker delay
accuweather
severn trent water
yorkshire water
met office weather
rangers f.c.
anglian water
edinburgh weather
united utilities
council tax
christian horner
lafc vs toluca
lakers vs houston rockets match player stats
snooker scores
snooker
housing market
bankruptcy
gina carano
weather birmingham
bbc nees
ella langley
emma grede
ted lasso season 4 teaser trailer
antidepressants recall
financial crisis
itv news
engagement rings
spurs vs trail blazers
alexey mordashov
good morning
mortgage rates
horoscope
nhl scores
nuggets vs timberwolves
liverpool weather
todays weather
playstation plus
manchester weather
wordle hint
everton f.c.
dvla
snooker results
delivery
ronnie o'sullivan
janet cleverly councillor reprimanded
criminal record
mark selby
avs vs sporting
david attenborough
juventus
elena rybakina
eric bana
roman kemp
house fire wolverhampton
paul merson
is scarlett moffatt pregnant
man city fixtures
scarlets vs bulls
monaco fc
jaqueline cristian
stock market
napoli
alex de minaur
tigers vs hull fc
edinburgh vs sharks
mark williams snooker
alex sinclair israeli police detention
st. johnstone vs raith rovers
mo farah
newcastle vs bristol
tbilisi
connor storrie
georgia
stephen bunting
great british menu 2026
ravi eastenders
salford city fc
national grid
mass effect
salford city vs bromley
real salt lake vs inter miami
provinces of the pantheon
mls
russell brand
john phelan
hung cao
pistons vs magic
jerry bruckheimer
st. george's day
asiago
framework laptop 13 pro
boro
interactive investor
mint
believe me itv
amanda bynes
strasbourg vs nice
chase bank
jak jones
chase
rodri
christopher trybus
lsg vs rr
pension
hebden bridge
sandra bullock practical magic
rolls-royce share price drop
invincible season 5
josé mourinho
chris wakelin
jimmy bullard adam thomas
aer lingus flight cancellations
sam west
oxford united
liam delap
wba
реал мадрид алавес
coppa italia
girona vs real betis
marcus rashford
الريال ضد ألافيس
supreme leader of iran
oscar isaac
xrp ledger
believe me itv
pablo
is tane leaving home and away
julie andrews
@@ -12,7 +183,6 @@ porto vs tondela
santos vs fluminense
martin brundle lost f1 seat
keegan bradley
david attenborough
antoni kowalski
kezia dugdale
car
@@ -28,83 +198,3 @@ pl
frank lampard everton
nottingham forest fixtures
everton manager
dragons vs bulls
suede
lahore
wrestlemania 2026
giants vs rhinos
glenrothan
york knights vs leopards
tim sherwood
redditch
ccfc
europa conference league
bromley fc
paul merton
chris wood
istanbul
turkey
lucy watson
thiago silva
bednarek
jan bednarek
vincent kompany
mbappe
luis suarez sporting
madrid fc
andriy lunin
what did bec say to rachel mafs
yalla kora
geovany quenda
sporting cp
pavlovic
talktalk
arne slot drops mohamed salah
suns vs trail blazers
italian
used cars
mlb
roman
johnny somali
windows update
davion mitchell
hbo max
bolton wanderers
barca vs atletico
kemi badenoch
warren zaïre-emery
barca
samuel west
barcelona fc
lamine yamal
hbomax
noah okafor
casemiro
talksport
lazio
leeds united fixtures
bruno fernandes
afc champions league
meteor
carlos queiroz
travel warning
tori amos
cloud
reading
rolls-royce smr
istanbul airport
a27
bridget phillipson
tottenham standings
may bank holiday 2026
toto wolff
london weather today
bbc news latest
premier league fixtures
tesco near me
tube map london
uk bank holidays
royal family news
how to make english tea
nhs symptom checker
property for sale in london

View File

@@ -1,3 +1,185 @@
caro claire burke
oregon state baseball
iphone 16 pro
yosemite national park
meg stalter
popeyes chicken wraps permanent menu
walt frazier
samsung stock
heather watson
los angeles angels
chris brown
nathan lane
jaafar jackson met gala 2026
rachel zegler
amanda bynes
house of the dragon season 3
sf weather
ariana grande met gala
jackson lacombe
aeromexico
nbc
suvendu adhikari
trisha
seattle weather
putin
melissa joan hart
eenadu
gavin mckenna
mortgage loan rates today
floyd mayweather
wsl
whitecaps - la galaxy
air jordan 11 space jam
julio cesar chavez
budapest
usyk
dmitry bivol
jai opetaia
ebay acquisition
henry winkler
will anderson jr
themba gorimbo
yoel romero
alex hoppe
junior tafa
colby thicknesse
jacob malkoun
nick kurtz
kailer yamamoto
alex jones
cps energy
ssi
e
hail
michael jackson movie biopic
houston weather
katarzyna kawa
usd to yen
michael jackson net worth
utah hockey
mitch marner
hawaii news now
spacex rocket launch
jack eichel
apple iphone 18 pro max
lena dunham
vegas knights
skip bayless
acura
qatar airways
charles barkley
turkish airlines
ayo edebiri
who do the spurs play next
one championship
samsung one ui 8.5 update
fabio jackson
san antonio
shea theodore
dodgers game today
munetaka murakami
dodgers score
joe ingles
owensboro weather
nhl overtime rules
kyle tucker
pete fairbanks
bank
ucla
housing prices
real estate
post malone
ducks game tonight
flor vigna
lebron james
bronny james
austin shooting
arthur rinderknech
avs vs sporting
elena rybakina
chris sale
bruins
sabres game
corinthians vs vasco
christian walker
where to watch new york yankees vs houston astros
gladiator ii
hurricanes vs senators
jalen duren
keegan akin
billy schrauth
caleb durbin
thunder vs suns
max bredeson
wednesday, season 3
demonte capehart
karoline leavitt maternity leave
alex de minaur
rafael jodar
adam levine face
howard frankland bridge
vibrio vulnificus new york waters
stade brestois - lens
moustapha thiam
us asylum seeker border reopening
sunderland vs nottm forest
leicester city vs millwall
brandon marsh
psv vs pec zwolle
daniel merida aguilar
william byron
eve plumb
mall of louisiana
real oviedo vs villarreal
real oviedo - villarreal
call of duty: black ops 7
tarik skubal
cubs game today
mike repole
okc thunder
atlanta braves
mlb scores today
braves standings
kevin mckidd
dan vladar
mls standings
dodgers - giants
jon ossoff
ozzy survivor
braves score
washington nationals
alex bregman
peter lambert
darrell sheets
ludwig kaiser
edina shooting
atalanta - lazio
barcelona vs celta vigo
rivian r2
pick 4
aoc
cleveland browns
nintendo switch gamecube games
lsg vs rr
spirit
atlanta fire
deshaun watson
good morning america
pittsburgh
strands answers
scientist
mark cuban pharmacy
inter milan
lens vs toulouse
david james
andy weir
noah kahan tiny desk concert
jennifer garner 54th birthday photos
troy baker
real madrid - alavés
girona - real betis
girona vs real betis
arc raiders
schd etf dividend yield
deportación
@@ -16,94 +198,3 @@ mets - cubs
alexander manninger
santos vs fluminense
disclosure day
tobias myers
vladimir putin
knicks game
ben rice
prem
timberwolves vs nuggets
cody bellinger
nik khamenia
real sociedad
nurburgring crash
atlético madrid - real sociedad
ruke orhorhoro
radar
the weather channel
kttc
luke gulbranson
kttc weather
comcast data breach settlement
tornado watch
moisés ballesteros
mets game today
giancarlo stanton
real betis
prosecution of daniel duggan
liv morgan
mikey williams
indiana fever sophie cunningham baptism
gregory donnell morgan jr
why are the sirens going off
leylah fernandez
strasbourg vs mainz
michael olise
ريال مدريد
dazn
paramount
univision
jude bellingham
sam antonacci
real madrid
bayern
arda güler
los angeles dodgers
vandenberg launch schedule
ryan dunn
alex vesia
ken jennings
ucla baseball
padres standings
mets vs dodgers match player stats
bo bichette
jorge polanco
psg
barca
vix
fcb
barcelona schedule
tarjeta roja
a knight of the seven kingdoms season 2
charlotte flair
usa network
natalie sago
carlos queiroz
carlos batista
katie boulter
levante - getafe
levante vs getafe
mcilroy green jacket presentation
man united vs leeds
7-eleven closing locations
cloud
sports
sony playstation
alaska airline
toronto
sydney
paris
tokyo
delhi
sykkuno drama
Los Angeles weather today
S&P 500 stock chart
local coffee shops near me
latest tech news
California traffic updates
AI startups in Silicon ValleySan Jose weather this weekend
Silicon Valley tech news
best tacos in San Jose
Apple park visitor center hours
Seattle Weather
Las Vegas strip
Charlotte Hornets

View File

@@ -1,3 +1,184 @@
dông
tập đoàn vingroup
cảnh sát
giải vđqg nhật bản
tuyên án
gyokeres
nguyễn thị kim tiến
học
bảo hiểm xã hội
thi sinh thi tốt nghiệp thpt
ngân hàng
đội tuyển bóng đá u 17 quốc gia yemen
giải bóng đá vô địch thế giới
kylie jenner
thời tiết cực đoan
vietnam airlines
xét tuyển đại học
matheus cunha
heidi klum
khóa sim
huấn luyện viên
chu châu
vụ án tây ninh
xác thực
lê khanh
doanh thu phim trùm sò
máy bay
lũ quét
ngộ độc
nvl
iphone 18 pro max
샌디에이고 fc 대 엘에이 fc
clb san diego đấu với lafc
tổng công ty khoáng sản tkv
xe
hà giang
bia
trọng tài
thu nhập cá nhân
phương oanh
thiếu tướng quân đội nhân dân việt nam
lịch nghỉ 2 9
dân việt
rockets vs lakers
tesla
giá vàng the giới
mỹ iran
ninh dương lan ngọc
thủy tiên
xabi alonso
mason mount
dự án
huỳnh hiểu minh
nhiệt độ tphcm
venezuela
vinhomes
học bổng
giáo sư
denver nuggets
dog
efootball
free fire
quang minh và hồng đào
giá gas
lakers vs rockets
đua xe đạp
đô la mỹ
hoài linh
chess
đường cao tốc
giáp
nguyễn đình bắc
avispa đấu với sanfrecce
thừa kế
hoa hậu việt nam
nguyễn xuân bắc
áp thấp nhiệt đới
tàu
nte code
bảo tín minh châu
cà phê
one ui 8.5
nguyễn huy hoàng
dự án nuôi em
đơn vị sự nghiệp công lập
nợ xấu
bộ trưởng bộ giáo dục và đào tạo việt nam
thành phố trực thuộc trung ương
âm vang tổ quốc
jennie
charlie nguyễn
nanaimoteuthis
cảng
vneid
sri lanka
công nhân
hội đồng giám mục việt nam
an ninh kinh tế
kfc
đội tuyển bóng chuyền nữ quốc gia việt nam
juventus
milan đấu với juventus
villarreal đấu với celta
osasuna vs sevilla
galatasaray
michael jackson
sevilla
polymarket
mật ngữ kỷ
osasuna đấu với sevilla
atlético madrid đấu với ath. bilbao
erling haaland
lịch thi đấu man city
toulouse đấu với monaco
mc vs
đông anh
al ahli
man city
chung cư
napoli
sunderland đấu với nottm forest
betis đấu với real madrid
napoli đấu với cremonese
leipzig đấu với union berlin
sunderland
mẫu iphone 18
oppo find x9 ultra
xem phim
andoni iraola
stuttgart đấu với freiburg
levante sevilla
giao dịch tài chính
rayo đấu với espanyol
levante đấu với sevilla
bong ma hanh phuc
aryna sabalenka
mason nguyễn
marcus rashford
hà nội
salt lake đấu với inter miami
hung cao
neymar
cầu phú mỹ
nhac
wordle
날씨
giá cà phê hôm nay
premier league standings
mls
phạm nhật vượng
cristiano roland
burnley vs man city
bayern munich
atalanta đấu với lazio
barcelona đấu với celta
psg nantes
leverkusen đấu với bayern
elche atlético madrid
bryan mbeumo
al nasr
trực tiếp bóng đá hôm nay
vtv3
vtv3 trực tiếp
tv
vtv
vtv6
360
lê khánh
ô tô
lê phương
trực tiếp bóng đá u17 hôm nay
inter milan
chelsea
girona đấu với betis
real madrid đấu với alavés
brighton vs chelsea
brighton đấu với chelsea
ath. bilbao đấu với osasuna
pep guardiola
zelvia đấu với shabab al-ahli
cầu thủ
lecce vs fiorentina
fiorentina
crystal palace đấu với west ham
@@ -13,73 +194,7 @@ psg vs lyon
ca sĩ
juventus đấu với bologna
gladbach đấu với mainz
bayern munich
twitch
psg đấu với lyon
juventus
ligue 1
trận đấu ngoại hạng anh
chelsea đấu với man utd
atlético madrid đấu với real sociedad
roma đấu với atalanta
epl
iem rio 2026
tot
tập đoàn gelex
napoli
đường ray
inter
inter đấu với cagliari
sassuolo vs como
david alaba
claude design
fenerbahçe đấu với rizespor
como
como vs
thẻ đỏ
al ahli
porto vs
crystal palace
porto
uefa europa conference
betis đấu với braga
real betis vs braga
aston villa đấu với bologna
fiorentina đấu với crystal palace
c2
cup c2
thể thao
arda güler
aleksandar pavlović
ars
90
real
real madrid
xoi
luong sơn
fpt
phan văn giang
nhà ở xã hội
club america
giàu
đỗ mỹ linh
sun group
hưng yên
nvl
américa đấu với nashville
neymar
VnExpress
Zing News
Thời tiết Hà Nội
Giá vàng hôm nay
Shopee VN
Tiki
Vietjet Air
Vietnam Airlines
Bóng đá trực tuyến
Lịch thi đấu Euro
Xổ số miền Bắc
Grab Vietnam
VTV Go
Học tiếng Anh
Du lịch Đà Lạt

View File

@@ -11,7 +11,16 @@
"name": "Japan (日本)",
"keyword_file": "kw_JP.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Tokyo", "name": "Tokyo (东京)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Tokyo",
"name": "Tokyo (东京)"
}
]
}
]
},
{
@@ -19,7 +28,16 @@
"name": "Singapore (新加坡)",
"keyword_file": "kw_SG.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Singapore", "name": "Singapore (新加坡)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Singapore",
"name": "Singapore (新加坡)"
}
]
}
]
},
{
@@ -27,7 +45,16 @@
"name": "South Korea (韩国)",
"keyword_file": "kw_KR.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Seoul", "name": "Seoul (首尔)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Seoul",
"name": "Seoul (首尔)"
}
]
}
]
},
{
@@ -35,7 +62,16 @@
"name": "Hong Kong (香港)",
"keyword_file": "kw_HK.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "HongKong", "name": "Hong Kong (香港)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "HongKong",
"name": "Hong Kong (香港)"
}
]
}
]
},
{
@@ -43,7 +79,16 @@
"name": "Vietnam (越南)",
"keyword_file": "kw_VN.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Hanoi", "name": "Hanoi (河内)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Hanoi",
"name": "Hanoi (河内)"
}
]
}
]
},
{
@@ -51,7 +96,33 @@
"name": "Taiwan (台湾)",
"keyword_file": "kw_TW.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Taipei", "name": "Taipei (台北)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Taipei",
"name": "Taipei (台北)"
}
]
}
]
},
{
"id": "MY",
"name": "Malaysia (马来西亚)",
"keyword_file": "kw_MY.txt",
"states": [
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Kuala_Lumpur",
"name": "Kuala Lumpur (吉隆坡)"
}
]
}
]
}
]
@@ -69,8 +140,14 @@
"id": "Default",
"name": "Default State",
"cities": [
{ "id": "London", "name": "London (伦敦)" },
{ "id": "Coventry", "name": "Coventry (考文垂)" }
{
"id": "London",
"name": "London (伦敦)"
},
{
"id": "Coventry",
"name": "Coventry (考文垂)"
}
]
}
]
@@ -80,7 +157,46 @@
"name": "Germany (德国)",
"keyword_file": "kw_DE.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Frankfurt", "name": "Frankfurt (法兰克福)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Frankfurt",
"name": "Frankfurt (法兰克福)"
}
]
},
{
"id": "SN",
"name": "Saxony (萨克森州)",
"cities": [
{
"id": "Falkenstein",
"name": "Falkenstein (法尔肯施泰因)"
}
]
},
{
"id": "BY",
"name": "Bavaria (巴伐利亚州)",
"cities": [
{
"id": "Nuremberg",
"name": "Nuremberg (纽伦堡)"
}
]
},
{
"id": "BE",
"name": "Berlin (柏林州)",
"cities": [
{
"id": "Berlin",
"name": "Berlin (柏林)"
}
]
}
]
},
{
@@ -88,7 +204,16 @@
"name": "France (法国)",
"keyword_file": "kw_FR.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Paris", "name": "Paris (巴黎)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Paris",
"name": "Paris (巴黎)"
}
]
}
]
},
{
@@ -96,7 +221,16 @@
"name": "Netherlands (荷兰)",
"keyword_file": "kw_NL.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Amsterdam", "name": "Amsterdam (阿姆斯特丹)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Amsterdam",
"name": "Amsterdam (阿姆斯特丹)"
}
]
}
]
},
{
@@ -104,7 +238,16 @@
"name": "Spain (西班牙)",
"keyword_file": "kw_ES.txt",
"states": [
{ "id": "Default", "name": "Default State", "cities": [ { "id": "Madrid", "name": "Madrid (马德里)" } ] }
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Madrid",
"name": "Madrid (马德里)"
}
]
}
]
}
]
@@ -122,50 +265,158 @@
"id": "CA",
"name": "California (加州)",
"cities": [
{ "id": "Los_Angeles", "name": "Los Angeles (洛杉矶)" },
{ "id": "San_Jose", "name": "San Jose (圣何塞)" }
{
"id": "Los_Angeles",
"name": "Los Angeles (洛杉矶)"
},
{
"id": "San_Jose",
"name": "San Jose (圣何塞)"
}
]
},
{
"id": "IL",
"name": "Illinois (伊利诺伊州)",
"cities": [
{ "id": "Warrenville", "name": "Warrenville (沃伦维尔)" }
{
"id": "Warrenville",
"name": "Warrenville (沃伦维尔)"
}
]
},
{
"id": "NC",
"name": "North Carolina (北卡罗来纳州)",
"cities": [
{ "id": "Charlotte", "name": "Charlotte (夏洛特)" }
{
"id": "Charlotte",
"name": "Charlotte (夏洛特)"
}
]
},
{
"id": "NV",
"name": "Nevada (内华达州)",
"cities": [
{ "id": "Las_Vegas", "name": "Las Vegas (拉斯维加斯)" }
{
"id": "Las_Vegas",
"name": "Las Vegas (拉斯维加斯)"
}
]
},
{
"id": "OR",
"name": "Oregon (俄勒冈州)",
"cities": [
{ "id": "Bend", "name": "Bend (本德)" }
{
"id": "Bend",
"name": "Bend (本德)"
}
]
},
{
"id": "UT",
"name": "Utah (犹他州)",
"cities": [
{ "id": "Salt_Lake_City", "name": "Salt Lake City (盐湖城)" }
{
"id": "Salt_Lake_City",
"name": "Salt Lake City (盐湖城)"
}
]
},
{
"id": "WA",
"name": "Washington (华盛顿州)",
"cities": [
{ "id": "Seattle", "name": "Seattle (西雅图)" }
{
"id": "Seattle",
"name": "Seattle (西雅图)"
}
]
},
{
"id": "TX",
"name": "Texas (得克萨斯州)",
"cities": [
{
"id": "Dallas",
"name": "Dallas (达拉斯)"
},
{
"id": "Houston",
"name": "Houston (休斯顿)"
}
]
},
{
"id": "IA",
"name": "Iowa (爱荷华州)",
"cities": [
{
"id": "Council_Bluffs",
"name": "Council Bluffs (康瑟尔布拉夫斯)"
}
]
},
{
"id": "VA",
"name": "Virginia (弗吉尼亚州)",
"cities": [
{
"id": "Ashburn",
"name": "Ashburn (阿什本)"
}
]
},
{
"id": "OH",
"name": "Ohio (俄亥俄州)",
"cities": [
{
"id": "Columbus",
"name": "Columbus (哥伦布)"
}
]
},
{
"id": "NY",
"name": "New York (纽约州)",
"cities": [
{
"id": "New_York",
"name": "New York (纽约)"
}
]
},
{
"id": "FL",
"name": "Florida (佛罗里达州)",
"cities": [
{
"id": "Miami",
"name": "Miami (迈阿密)"
}
]
},
{
"id": "NJ",
"name": "New Jersey (新泽西州)",
"cities": [
{
"id": "Newark",
"name": "Newark (纽瓦克)"
}
]
},
{
"id": "GA",
"name": "Georgia (佐治亚州)",
"cities": [
{
"id": "Atlanta",
"name": "Atlanta (亚特兰大)"
}
]
}
]
@@ -179,8 +430,14 @@
"id": "Default",
"name": "Default State",
"cities": [
{ "id": "Toronto", "name": "Toronto (多伦多)" },
{ "id": "Montreal", "name": "Montreal (蒙特利尔)" }
{
"id": "Toronto",
"name": "Toronto (多伦多)"
},
{
"id": "Montreal",
"name": "Montreal (蒙特利尔)"
}
]
}
]
@@ -200,35 +457,73 @@
"id": "NSW",
"name": "New South Wales (新南威尔士州)",
"cities": [
{ "id": "Sydney", "name": "Sydney (悉尼)" }
{
"id": "Sydney",
"name": "Sydney (悉尼)"
}
]
},
{
"id": "VIC",
"name": "Victoria (维多利亚州)",
"cities": [
{ "id": "Melbourne", "name": "Melbourne (墨尔本)" }
{
"id": "Melbourne",
"name": "Melbourne (墨尔本)"
}
]
},
{
"id": "QLD",
"name": "Queensland (昆士兰州)",
"cities": [
{ "id": "Brisbane", "name": "Brisbane (布里斯班)" }
{
"id": "Brisbane",
"name": "Brisbane (布里斯班)"
}
]
},
{
"id": "WA",
"name": "Western Australia (西澳大利亚州)",
"cities": [
{ "id": "Perth", "name": "Perth (珀斯)" }
{
"id": "Perth",
"name": "Perth (珀斯)"
}
]
},
{
"id": "SA",
"name": "South Australia (南澳大利亚州)",
"cities": [
{ "id": "Adelaide", "name": "Adelaide (阿德莱德)" }
{
"id": "Adelaide",
"name": "Adelaide (阿德莱德)"
}
]
}
]
}
]
},
{
"id": "AFRICA",
"name": "非洲战区 (Africa)",
"countries": [
{
"id": "NG",
"name": "Nigeria (尼日利亚)",
"keyword_file": "kw_NG.txt",
"states": [
{
"id": "Default",
"name": "Default State",
"cities": [
{
"id": "Lagos",
"name": "Lagos (拉各斯)"
}
]
}
]
@@ -236,4 +531,4 @@
]
}
]
}
}

View File

@@ -8,28 +8,43 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.smh.com.au/",
"https://www.dailytelegraph.com.au/",
"https://www.service.nsw.gov.au/",
"https://transportnsw.info/",
"https://www.abc.net.au/news/2026-05-06/man-fighting-removal-to-nauru-loses-high-court-challenge/106646446",
"https://www.abc.net.au/news/2026-05-06/wagga-river-camp-resident-ask-for-open-mind-after-baby-death/106648194",
"https://www.abc.net.au/news/2026-05-06/tim-pictons-alleged-attacker-avoids-jail-over-separate-charge/106648008",
"https://www.abc.net.au/news/2026-05-06/adelaide-36ers-coach-mike-wells-quits/106648724",
"https://www.abc.net.au/news/2026-05-06/womens-state-of-origin-game-two-team-lists/106648716",
"https://www.abc.net.au/news/2026-05-06/commercial-fishing-ban-in-gulf-st-vincent-extends/106647212",
"https://www.realestate.com.au/",
"https://www.abc.net.au/news/2026-05-06/brisbane-river-zip-line-proposal/106647348",
"https://www.abc.net.au/news/2026-05-06/freshwater-turtles-thriving-near-broken-hill-outback-lake/106584786",
"https://www.seek.com.au/",
"https://www.coles.com.au/",
"https://www.abc.net.au/news/2026-05-06/ses-hq-wyong-central-coast-destroyed-by-fire/106647498",
"https://www.abc.net.au/news/2026-05-06/child-protection-workers-lose-their-jobs-five-year-old-girl-nt/106647714",
"https://www.abc.net.au/news/2026-05-06/jury-retires-greyhound-bruce-highway-bus-crash-trial-townsville/106642338",
"https://www.abc.net.au/news/2026-05-06/inland-rail-cancellation-reactions/106646490",
"https://www.bunnings.com.au/",
"https://www.commbank.com.au/",
"https://www.abc.net.au/news/2026-05-06/keysborough-secondary-college-teacher-principal-stabbing/106648548",
"https://www.amazon.com.au/",
"https://www.abc.net.au/news/2026-05-06/influencers-reveal-what-life-is-like-on-hantavirus-cruise/106646542",
"https://www.ato.gov.au/",
"https://www.abc.net.au/news/2026-05-06/concerns-about-victorian-road-repairs-despite-budget-funding/106445376",
"https://www.bom.gov.au/",
"https://www.woolworths.com.au/",
"https://www.coles.com.au/",
"https://www.bunnings.com.au/",
"https://www.abc.net.au/",
"https://www.news.com.au/",
"https://www.nine.com.au/",
"https://my.gov.au/"
],
"static_urls": [
"https://my.gov.au/",
"https://www.ato.gov.au/",
"https://www.bom.gov.au/",
"https://www.commbank.com.au/",
"https://www.westpac.com.au/",
"https://www.realestate.com.au/",
"https://www.domain.com.au/",
"https://www.seek.com.au/",
"https://www.nrl.com/",
"https://premier.ticketek.com.au/",
"https://www.amazon.com.au/"
"https://www.realestate.com.au/",
"https://www.woolworths.com.au/",
"https://www.coles.com.au/",
"https://www.amazon.com.au/",
"https://www.bunnings.com.au/"
]
}
}
}

View File

@@ -8,29 +8,43 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.couriermail.com.au/",
"https://www.brisbanetimes.com.au/",
"https://www.qld.gov.au/",
"https://translink.com.au/",
"https://www.health.qld.gov.au/",
"https://www.bom.gov.au/",
"https://www.bunnings.com.au/",
"https://www.woolworths.com.au/",
"https://www.abc.net.au/news/2026-05-06/tim-pictons-alleged-attacker-avoids-jail-over-separate-charge/106648008",
"https://www.abc.net.au/news/2026-05-06/commercial-fishing-ban-in-gulf-st-vincent-extends/106647212",
"https://www.amazon.com.au/",
"https://www.abc.net.au/news/2026-05-06/adelaide-36ers-coach-mike-wells-quits/106648724",
"https://www.abc.net.au/news/2026-05-06/keysborough-secondary-college-teacher-principal-stabbing/106648548",
"https://www.seek.com.au/",
"https://www.commbank.com.au/",
"https://www.abc.net.au/news/2026-05-06/womens-state-of-origin-game-two-team-lists/106648716",
"https://www.abc.net.au/news/2026-05-06/jury-retires-greyhound-bruce-highway-bus-crash-trial-townsville/106642338",
"https://www.coles.com.au/",
"https://www.abc.net.au/",
"https://www.news.com.au/",
"https://www.abc.net.au/news/2026-05-06/child-protection-workers-lose-their-jobs-five-year-old-girl-nt/106647714",
"https://www.ato.gov.au/",
"https://www.realestate.com.au/",
"https://www.abc.net.au/news/2026-05-06/inland-rail-cancellation-reactions/106646490",
"https://www.abc.net.au/news/2026-05-06/freshwater-turtles-thriving-near-broken-hill-outback-lake/106584786",
"https://www.abc.net.au/news/2026-05-06/influencers-reveal-what-life-is-like-on-hantavirus-cruise/106646542",
"https://www.abc.net.au/news/2026-05-06/man-fighting-removal-to-nauru-loses-high-court-challenge/106646446",
"https://www.abc.net.au/news/2026-05-06/ses-hq-wyong-central-coast-destroyed-by-fire/106647498",
"https://www.abc.net.au/news/2026-05-06/wagga-river-camp-resident-ask-for-open-mind-after-baby-death/106648194",
"https://www.abc.net.au/news/2026-05-06/brisbane-river-zip-line-proposal/106647348",
"https://my.gov.au/",
"https://www.abc.net.au/news/2026-05-06/concerns-about-victorian-road-repairs-despite-budget-funding/106445376",
"https://www.woolworths.com.au/",
"https://www.bunnings.com.au/"
],
"static_urls": [
"https://my.gov.au/",
"https://www.ato.gov.au/",
"https://www.bom.gov.au/",
"https://www.commbank.com.au/",
"https://www.suncorp.com.au/",
"https://www.boq.com.au/",
"https://www.realestate.com.au/",
"https://www.domain.com.au/",
"https://www.seek.com.au/",
"https://www.nrl.com/",
"https://premier.ticketek.com.au/",
"https://www.amazon.com.au/"
"https://www.realestate.com.au/",
"https://www.woolworths.com.au/",
"https://www.coles.com.au/",
"https://www.amazon.com.au/",
"https://www.bunnings.com.au/"
]
}
}
}

View File

@@ -8,28 +8,43 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.adelaidenow.com.au/",
"https://indaily.com.au/",
"https://www.sa.gov.au/",
"https://www.adelaidemetro.com.au/",
"https://www.sapowernetworks.com.au/",
"https://www.bom.gov.au/",
"https://www.bunnings.com.au/",
"https://www.coles.com.au/",
"https://www.abc.net.au/news/2026-05-06/concerns-about-victorian-road-repairs-despite-budget-funding/106445376",
"https://www.woolworths.com.au/",
"https://www.abc.net.au/",
"https://www.news.com.au/",
"https://www.seek.com.au/",
"https://www.coles.com.au/",
"https://www.abc.net.au/news/2026-05-06/commercial-fishing-ban-in-gulf-st-vincent-extends/106647212",
"https://www.abc.net.au/news/2026-05-06/brisbane-river-zip-line-proposal/106647348",
"https://www.amazon.com.au/",
"https://www.abc.net.au/news/2026-05-06/inland-rail-cancellation-reactions/106646490",
"https://www.abc.net.au/news/2026-05-06/wagga-river-camp-resident-ask-for-open-mind-after-baby-death/106648194",
"https://my.gov.au/",
"https://www.abc.net.au/news/2026-05-06/tim-pictons-alleged-attacker-avoids-jail-over-separate-charge/106648008",
"https://www.abc.net.au/news/2026-05-06/freshwater-turtles-thriving-near-broken-hill-outback-lake/106584786",
"https://www.abc.net.au/news/2026-05-06/adelaide-36ers-coach-mike-wells-quits/106648724",
"https://www.abc.net.au/news/2026-05-06/influencers-reveal-what-life-is-like-on-hantavirus-cruise/106646542",
"https://www.abc.net.au/news/2026-05-06/jury-retires-greyhound-bruce-highway-bus-crash-trial-townsville/106642338",
"https://www.abc.net.au/news/2026-05-06/ses-hq-wyong-central-coast-destroyed-by-fire/106647498",
"https://www.abc.net.au/news/2026-05-06/keysborough-secondary-college-teacher-principal-stabbing/106648548",
"https://www.abc.net.au/news/2026-05-06/womens-state-of-origin-game-two-team-lists/106648716",
"https://www.bunnings.com.au/",
"https://www.bom.gov.au/",
"https://www.realestate.com.au/",
"https://www.commbank.com.au/",
"https://www.abc.net.au/news/2026-05-06/man-fighting-removal-to-nauru-loses-high-court-challenge/106646446",
"https://www.ato.gov.au/",
"https://www.abc.net.au/news/2026-05-06/child-protection-workers-lose-their-jobs-five-year-old-girl-nt/106647714"
],
"static_urls": [
"https://my.gov.au/",
"https://www.ato.gov.au/",
"https://www.bom.gov.au/",
"https://www.commbank.com.au/",
"https://www.bendigobank.com.au/",
"https://www.realestate.com.au/",
"https://www.domain.com.au/",
"https://www.seek.com.au/",
"https://www.afl.com.au/",
"https://premier.ticketek.com.au/",
"https://www.amazon.com.au/"
"https://www.realestate.com.au/",
"https://www.woolworths.com.au/",
"https://www.coles.com.au/",
"https://www.amazon.com.au/",
"https://www.bunnings.com.au/"
]
}
}
}

View File

@@ -8,28 +8,43 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.theage.com.au/",
"https://www.heraldsun.com.au/",
"https://www.vic.gov.au/",
"https://www.ptv.vic.gov.au/",
"https://www.vicroads.vic.gov.au/",
"https://www.abc.net.au/news/2026-05-06/freshwater-turtles-thriving-near-broken-hill-outback-lake/106584786",
"https://my.gov.au/",
"https://www.abc.net.au/news/2026-05-06/tim-pictons-alleged-attacker-avoids-jail-over-separate-charge/106648008",
"https://www.bom.gov.au/",
"https://www.abc.net.au/news/2026-05-06/adelaide-36ers-coach-mike-wells-quits/106648724",
"https://www.abc.net.au/news/2026-05-06/womens-state-of-origin-game-two-team-lists/106648716",
"https://www.abc.net.au/news/2026-05-06/jury-retires-greyhound-bruce-highway-bus-crash-trial-townsville/106642338",
"https://www.commbank.com.au/",
"https://www.bunnings.com.au/",
"https://www.kmart.com.au/",
"https://www.abc.net.au/",
"https://www.news.com.au/",
"https://www.abc.net.au/news/2026-05-06/inland-rail-cancellation-reactions/106646490",
"https://www.amazon.com.au/",
"https://www.woolworths.com.au/",
"https://www.abc.net.au/news/2026-05-06/child-protection-workers-lose-their-jobs-five-year-old-girl-nt/106647714",
"https://www.abc.net.au/news/2026-05-06/ses-hq-wyong-central-coast-destroyed-by-fire/106647498",
"https://www.coles.com.au/",
"https://www.abc.net.au/news/2026-05-06/concerns-about-victorian-road-repairs-despite-budget-funding/106445376",
"https://www.abc.net.au/news/2026-05-06/brisbane-river-zip-line-proposal/106647348",
"https://www.abc.net.au/news/2026-05-06/influencers-reveal-what-life-is-like-on-hantavirus-cruise/106646542",
"https://www.realestate.com.au/",
"https://www.abc.net.au/news/2026-05-06/man-fighting-removal-to-nauru-loses-high-court-challenge/106646446",
"https://www.abc.net.au/news/2026-05-06/keysborough-secondary-college-teacher-principal-stabbing/106648548",
"https://www.abc.net.au/news/2026-05-06/wagga-river-camp-resident-ask-for-open-mind-after-baby-death/106648194",
"https://www.abc.net.au/news/2026-05-06/commercial-fishing-ban-in-gulf-st-vincent-extends/106647212",
"https://www.seek.com.au/",
"https://www.ato.gov.au/"
],
"static_urls": [
"https://my.gov.au/",
"https://www.ato.gov.au/",
"https://www.nab.com.au/",
"https://www.anz.com.au/",
"https://www.bom.gov.au/",
"https://www.commbank.com.au/",
"https://www.seek.com.au/",
"https://www.realestate.com.au/",
"https://www.woolworths.com.au/",
"https://www.coles.com.au/",
"https://www.realestate.com.au/",
"https://www.seek.com.au/",
"https://www.afl.com.au/",
"https://www.ticketmaster.com.au/",
"https://www.amazon.com.au/"
"https://www.amazon.com.au/",
"https://www.bunnings.com.au/"
]
}
}
}

View File

@@ -8,28 +8,43 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://thewest.com.au/",
"https://www.perthnow.com.au/",
"https://www.wa.gov.au/",
"https://www.transperth.wa.gov.au/",
"https://www.abc.net.au/news/2026-05-06/jury-retires-greyhound-bruce-highway-bus-crash-trial-townsville/106642338",
"https://www.abc.net.au/news/2026-05-06/concerns-about-victorian-road-repairs-despite-budget-funding/106445376",
"https://www.abc.net.au/news/2026-05-06/influencers-reveal-what-life-is-like-on-hantavirus-cruise/106646542",
"https://www.ato.gov.au/",
"https://www.amazon.com.au/",
"https://www.bom.gov.au/",
"https://www.abc.net.au/news/2026-05-06/adelaide-36ers-coach-mike-wells-quits/106648724",
"https://www.abc.net.au/news/2026-05-06/ses-hq-wyong-central-coast-destroyed-by-fire/106647498",
"https://www.abc.net.au/news/2026-05-06/womens-state-of-origin-game-two-team-lists/106648716",
"https://www.bunnings.com.au/",
"https://www.abc.net.au/news/2026-05-06/wagga-river-camp-resident-ask-for-open-mind-after-baby-death/106648194",
"https://www.seek.com.au/",
"https://www.commbank.com.au/",
"https://www.abc.net.au/news/2026-05-06/freshwater-turtles-thriving-near-broken-hill-outback-lake/106584786",
"https://www.abc.net.au/news/2026-05-06/keysborough-secondary-college-teacher-principal-stabbing/106648548",
"https://www.abc.net.au/news/2026-05-06/child-protection-workers-lose-their-jobs-five-year-old-girl-nt/106647714",
"https://www.coles.com.au/",
"https://www.abc.net.au/news/2026-05-06/inland-rail-cancellation-reactions/106646490",
"https://www.realestate.com.au/",
"https://www.abc.net.au/news/2026-05-06/man-fighting-removal-to-nauru-loses-high-court-challenge/106646446",
"https://www.abc.net.au/news/2026-05-06/tim-pictons-alleged-attacker-avoids-jail-over-separate-charge/106648008",
"https://www.woolworths.com.au/",
"https://www.kmart.com.au/",
"https://www.abc.net.au/",
"https://www.news.com.au/",
"https://my.gov.au/",
"https://www.abc.net.au/news/2026-05-06/commercial-fishing-ban-in-gulf-st-vincent-extends/106647212",
"https://www.abc.net.au/news/2026-05-06/brisbane-river-zip-line-proposal/106647348"
],
"static_urls": [
"https://my.gov.au/",
"https://www.ato.gov.au/",
"https://www.bom.gov.au/",
"https://www.commbank.com.au/",
"https://www.bankwest.com.au/",
"https://reiwa.com.au/",
"https://www.realestate.com.au/",
"https://www.seek.com.au/",
"https://www.afl.com.au/",
"https://premier.ticketek.com.au/",
"https://www.amazon.com.au/"
"https://www.realestate.com.au/",
"https://www.woolworths.com.au/",
"https://www.coles.com.au/",
"https://www.amazon.com.au/",
"https://www.bunnings.com.au/"
]
}
}
}

View File

@@ -8,10 +8,39 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.cbc.ca/",
"https://www.cbc.ca/news/world/russia-internet-vpn-9.7188353?cmp=rss",
"https://www.cbc.ca/news/politics/former-governors-general-expense-account-9.7188412?cmp=rss",
"https://www.cbc.ca/news/canada/ottawa/alto-rail-ottawa-montreal-route-property-map-9.7188144?cmp=rss",
"https://www.canada.ca/en.html",
"https://www.cbc.ca/news/entertainment/tracker-leaving-vancouver-california-tax-credit-9.7188156?cmp=rss",
"https://www.cbc.ca/radio/asithappens/wisconsin-emt-heart-attack-9.7188630?cmp=rss",
"https://www.cbc.ca/news/world/rubio-hegseth-iran-strait-hormuz-blockade-9.7188754?cmp=rss",
"https://www.cbc.ca/news/politics/louse-arbour-governor-general-carney-analysis-9.7188709?cmp=rss",
"https://www.cbc.ca/news/world/assault-charge-white-house-correspondents-dinner-suspect-9.7188774?cmp=rss",
"https://www.rbcroyalbank.com/",
"https://www.theweathernetwork.com/ca",
"https://www.cbc.ca/news/business/telecommunications-workers-restrictions-artificial-intelligence-9.7189209?cmp=rss",
"https://www.amazon.ca/",
"https://www.cbc.ca/sports/hockey/pwhl/pwhl-playoffs-montreal-victoire-minnesota-frost-may5-9.7188085?cmp=rss",
"https://www.canadapost-postescanada.ca/",
"https://www.cbc.ca/news/indigenous/red-dress-day-vigil-parliament-hill-9.7188743?cmp=rss",
"https://www.cbc.ca/news/canada/canada-c17-fleet-us-sustainment-services-9.7188694?cmp=rss",
"https://www.utoronto.ca/",
"https://www.cra-arc.gc.ca/",
"https://www.cbc.ca/news/canada/british-columbia/vancouver-bc-hot-weather-records-9.7188997?cmp=rss",
"https://www.td.com/",
"https://www.cbc.ca/news/health/hantavirus-human-transmission-9.7188555?cmp=rss",
"https://www.cbc.ca/news/canada/edmonton/elections-alberta-voter-data-centurion-project-ndp-ucp-9.7189167?cmp=rss"
],
"static_urls": [
"https://www.canada.ca/en.html",
"https://www.cra-arc.gc.ca/",
"https://www.canadapost-postescanada.ca/",
"https://www.utoronto.ca/",
"https://www.td.com/",
"https://www.rbcroyalbank.com/",
"https://www.amazon.ca/",
"https://www.theweathernetwork.com/ca"
]
}
}
}

View File

@@ -8,13 +8,39 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.cra-arc.gc.ca/",
"https://www.amazon.ca/",
"https://www.canada.ca/en.html",
"https://www.cbc.ca/",
"https://www.thestar.com/",
"https://www.ctvnews.ca/",
"https://www.cbc.ca/news/indigenous/red-dress-day-vigil-parliament-hill-9.7188743?cmp=rss",
"https://www.cbc.ca/news/politics/former-governors-general-expense-account-9.7188412?cmp=rss",
"https://www.cbc.ca/news/entertainment/tracker-leaving-vancouver-california-tax-credit-9.7188156?cmp=rss",
"https://www.canadapost-postescanada.ca/",
"https://www.td.com/"
"https://www.utoronto.ca/",
"https://www.cbc.ca/news/world/russia-internet-vpn-9.7188353?cmp=rss",
"https://www.cbc.ca/news/politics/louse-arbour-governor-general-carney-analysis-9.7188709?cmp=rss",
"https://www.cbc.ca/news/health/hantavirus-human-transmission-9.7188555?cmp=rss",
"https://www.cbc.ca/radio/asithappens/wisconsin-emt-heart-attack-9.7188630?cmp=rss",
"https://www.rbcroyalbank.com/",
"https://www.theweathernetwork.com/ca",
"https://www.cbc.ca/news/canada/british-columbia/vancouver-bc-hot-weather-records-9.7188997?cmp=rss",
"https://www.cbc.ca/news/business/telecommunications-workers-restrictions-artificial-intelligence-9.7189209?cmp=rss",
"https://www.cbc.ca/news/world/rubio-hegseth-iran-strait-hormuz-blockade-9.7188754?cmp=rss",
"https://www.cbc.ca/news/canada/edmonton/elections-alberta-voter-data-centurion-project-ndp-ucp-9.7189167?cmp=rss",
"https://www.cbc.ca/news/world/assault-charge-white-house-correspondents-dinner-suspect-9.7188774?cmp=rss",
"https://www.cbc.ca/news/canada/ottawa/alto-rail-ottawa-montreal-route-property-map-9.7188144?cmp=rss",
"https://www.td.com/",
"https://www.cbc.ca/sports/hockey/pwhl/pwhl-playoffs-montreal-victoire-minnesota-frost-may5-9.7188085?cmp=rss",
"https://www.cbc.ca/news/canada/canada-c17-fleet-us-sustainment-services-9.7188694?cmp=rss"
],
"static_urls": [
"https://www.canada.ca/en.html",
"https://www.cra-arc.gc.ca/",
"https://www.canadapost-postescanada.ca/",
"https://www.utoronto.ca/",
"https://www.td.com/",
"https://www.rbcroyalbank.com/",
"https://www.amazon.ca/",
"https://www.theweathernetwork.com/ca"
]
}
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "Germany - Berlin",
"google_module": {
"base_lat": 52.52,
"base_lon": 13.405,
"lang_params": "hl=de-DE&gl=DE",
"valid_url_suffix": "de"
},
"trust_module": {
"white_urls": [
"https://www.tagesschau.de/inland/spahn-fraktionschef-union-100.html",
"https://www.tagesschau.de/wirtschaft/unternehmen/unicredit-commerzbank-uebernahme-rekordgewinn-100.html",
"https://www.arbeitsagentur.de/",
"https://www.tagesschau.de/ukraine-kriegsverlauf-gady-100.html",
"https://www.stepstone.de/",
"https://www.tagesschau.de/ausland/europa/meta-alterskontrolle-eu-100.html",
"https://www.tagesschau.de/wirtschaft/unternehmen/deutsche-post-dhl-hauptversammlung-100.html",
"https://www.edeka.de/",
"https://www.tagesschau.de/ausland/europa/rumaenien-misstrauensvotum-parlament-100.html",
"https://www.bundesregierung.de/",
"https://www.tagesschau.de/investigativ/ndr/grauer-star-behandlung-kosten-100.html",
"https://www.tagesschau.de/wirtschaft/verbraucher/mietwucher-berlin-100.html",
"https://www.tagesschau.de/wirtschaft/finanzen/marktberichte/marktbericht-dax-dow-geldanlage-128.html",
"https://www.tagesschau.de/wirtschaft/verbraucher/urlaub-nachzahlungen-kerosinpreise-100.html",
"https://www.tagesschau.de/wirtschaft/konjunktur/wein-krise-deutschland-100.html",
"https://www.tagesschau.de/inland/innenpolitik/ein-jahr-koalition-reaktionen-100.html",
"https://www.tagesschau.de/ausland/amerika/project-freedom-usa-hormus-iran-100.html",
"https://www.tagesschau.de/ausland/amerika/wahlkreise-zuschnitt-usa-100.html",
"https://www.sparkasse.de/",
"https://www.tagesschau.de/ausland/europa/ukraine-russland-waffenruhe-100.html",
"https://www.amazon.de/",
"https://www.rewe.de/",
"https://www.obi.de/",
"https://www.immobilienscout24.de/",
"https://www.dwd.de/"
],
"static_urls": [
"https://www.bundesregierung.de/",
"https://www.arbeitsagentur.de/",
"https://www.dwd.de/",
"https://www.sparkasse.de/",
"https://www.stepstone.de/",
"https://www.immobilienscout24.de/",
"https://www.rewe.de/",
"https://www.edeka.de/",
"https://www.amazon.de/",
"https://www.obi.de/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "Germany - Bavaria (Nuremberg)",
"google_module": {
"base_lat": 49.4521,
"base_lon": 11.0767,
"lang_params": "hl=de-DE&gl=DE",
"valid_url_suffix": "de"
},
"trust_module": {
"white_urls": [
"https://www.edeka.de/",
"https://www.sparkasse.de/",
"https://www.tagesschau.de/ausland/amerika/wahlkreise-zuschnitt-usa-100.html",
"https://www.tagesschau.de/wirtschaft/verbraucher/mietwucher-berlin-100.html",
"https://www.tagesschau.de/ausland/amerika/project-freedom-usa-hormus-iran-100.html",
"https://www.tagesschau.de/inland/spahn-fraktionschef-union-100.html",
"https://www.tagesschau.de/ausland/europa/ukraine-russland-waffenruhe-100.html",
"https://www.amazon.de/",
"https://www.immobilienscout24.de/",
"https://www.tagesschau.de/investigativ/ndr/grauer-star-behandlung-kosten-100.html",
"https://www.tagesschau.de/ukraine-kriegsverlauf-gady-100.html",
"https://www.tagesschau.de/ausland/europa/meta-alterskontrolle-eu-100.html",
"https://www.tagesschau.de/wirtschaft/unternehmen/deutsche-post-dhl-hauptversammlung-100.html",
"https://www.tagesschau.de/wirtschaft/verbraucher/urlaub-nachzahlungen-kerosinpreise-100.html",
"https://www.tagesschau.de/inland/innenpolitik/ein-jahr-koalition-reaktionen-100.html",
"https://www.tagesschau.de/wirtschaft/unternehmen/unicredit-commerzbank-uebernahme-rekordgewinn-100.html",
"https://www.stepstone.de/",
"https://www.dwd.de/",
"https://www.tagesschau.de/wirtschaft/konjunktur/wein-krise-deutschland-100.html",
"https://www.rewe.de/",
"https://www.obi.de/",
"https://www.bundesregierung.de/",
"https://www.tagesschau.de/ausland/europa/rumaenien-misstrauensvotum-parlament-100.html",
"https://www.tagesschau.de/wirtschaft/finanzen/marktberichte/marktbericht-dax-dow-geldanlage-128.html",
"https://www.arbeitsagentur.de/"
],
"static_urls": [
"https://www.bundesregierung.de/",
"https://www.arbeitsagentur.de/",
"https://www.dwd.de/",
"https://www.sparkasse.de/",
"https://www.stepstone.de/",
"https://www.immobilienscout24.de/",
"https://www.rewe.de/",
"https://www.edeka.de/",
"https://www.amazon.de/",
"https://www.obi.de/"
]
}
}

View File

@@ -8,13 +8,39 @@
},
"trust_module": {
"white_urls": [
"https://www.amazon.de/",
"https://www.spiegel.de/",
"https://www.tagesschau.de/",
"https://de.wikipedia.org/wiki/Spezial:Zuf%C3%A4llige_Seite",
"https://www.tagesschau.de/ausland/europa/rumaenien-misstrauensvotum-parlament-100.html",
"https://www.ebay.de/",
"https://www.bild.de/",
"https://www.kicker.de/"
"https://www.tagesschau.de/wirtschaft/finanzen/marktberichte/marktbericht-dax-dow-geldanlage-128.html",
"https://www.tagesschau.de/ausland/europa/meta-alterskontrolle-eu-100.html",
"https://www.tagesschau.de/inland/spahn-fraktionschef-union-100.html",
"https://www.tagesschau.de/ausland/europa/ukraine-russland-waffenruhe-100.html",
"https://www.tagesschau.de/wirtschaft/verbraucher/urlaub-nachzahlungen-kerosinpreise-100.html",
"https://www.tagesschau.de/investigativ/ndr/grauer-star-behandlung-kosten-100.html",
"https://www.tagesschau.de/inland/innenpolitik/ein-jahr-koalition-reaktionen-100.html",
"https://www.bundesregierung.de/",
"https://www.tum.de/",
"https://www.tagesschau.de/ausland/amerika/project-freedom-usa-hormus-iran-100.html",
"https://www.amazon.de/",
"https://www.tagesschau.de/wirtschaft/unternehmen/unicredit-commerzbank-uebernahme-rekordgewinn-100.html",
"https://www.spiegel.de/",
"https://www.tagesschau.de/ausland/amerika/wahlkreise-zuschnitt-usa-100.html",
"https://www.tagesschau.de/wirtschaft/konjunktur/wein-krise-deutschland-100.html",
"https://www.bahn.de/",
"https://www.tagesschau.de/wirtschaft/verbraucher/mietwucher-berlin-100.html",
"https://www.arbeitsagentur.de/",
"https://www.tagesschau.de/ukraine-kriegsverlauf-gady-100.html",
"https://www.sparkasse.de/",
"https://www.tagesschau.de/wirtschaft/unternehmen/deutsche-post-dhl-hauptversammlung-100.html"
],
"static_urls": [
"https://www.bundesregierung.de/",
"https://www.arbeitsagentur.de/",
"https://www.tum.de/",
"https://www.sparkasse.de/",
"https://www.bahn.de/",
"https://www.amazon.de/",
"https://www.ebay.de/",
"https://www.spiegel.de/"
]
}
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "Germany - Saxony (Falkenstein)",
"google_module": {
"base_lat": 50.4779,
"base_lon": 12.3713,
"lang_params": "hl=de-DE&gl=DE",
"valid_url_suffix": "de"
},
"trust_module": {
"white_urls": [
"https://www.dwd.de/",
"https://www.bundesregierung.de/",
"https://www.sparkasse.de/",
"https://www.tagesschau.de/ausland/amerika/project-freedom-usa-hormus-iran-100.html",
"https://www.amazon.de/",
"https://www.tagesschau.de/wirtschaft/unternehmen/deutsche-post-dhl-hauptversammlung-100.html",
"https://www.tagesschau.de/inland/spahn-fraktionschef-union-100.html",
"https://www.tagesschau.de/wirtschaft/finanzen/marktberichte/marktbericht-dax-dow-geldanlage-128.html",
"https://www.tagesschau.de/ausland/europa/rumaenien-misstrauensvotum-parlament-100.html",
"https://www.tagesschau.de/wirtschaft/verbraucher/mietwucher-berlin-100.html",
"https://www.tagesschau.de/ausland/europa/meta-alterskontrolle-eu-100.html",
"https://www.tagesschau.de/wirtschaft/unternehmen/unicredit-commerzbank-uebernahme-rekordgewinn-100.html",
"https://www.tagesschau.de/inland/innenpolitik/ein-jahr-koalition-reaktionen-100.html",
"https://www.rewe.de/",
"https://www.tagesschau.de/ausland/europa/ukraine-russland-waffenruhe-100.html",
"https://www.tagesschau.de/ausland/amerika/wahlkreise-zuschnitt-usa-100.html",
"https://www.obi.de/",
"https://www.arbeitsagentur.de/",
"https://www.edeka.de/",
"https://www.tagesschau.de/wirtschaft/verbraucher/urlaub-nachzahlungen-kerosinpreise-100.html",
"https://www.tagesschau.de/investigativ/ndr/grauer-star-behandlung-kosten-100.html",
"https://www.tagesschau.de/ukraine-kriegsverlauf-gady-100.html",
"https://www.tagesschau.de/wirtschaft/konjunktur/wein-krise-deutschland-100.html",
"https://www.immobilienscout24.de/",
"https://www.stepstone.de/"
],
"static_urls": [
"https://www.bundesregierung.de/",
"https://www.arbeitsagentur.de/",
"https://www.dwd.de/",
"https://www.sparkasse.de/",
"https://www.stepstone.de/",
"https://www.immobilienscout24.de/",
"https://www.rewe.de/",
"https://www.edeka.de/",
"https://www.amazon.de/",
"https://www.obi.de/"
]
}
}

View File

@@ -8,13 +8,37 @@
},
"trust_module": {
"white_urls": [
"https://es.wikipedia.org/wiki/Especial:Aleatoria",
"https://www.elmundo.es/",
"https://www.elpais.com/",
"https://www.marca.com/",
"https://www.rtve.es/",
"https://elpais.com/salud-y-bienestar/2026-05-05/gabriel-rabinovich-bioquimico-mi-sueno-es-no-tener-que-decirle-a-ningun-paciente-que-no-hay-nada-que-hacer.html",
"https://elpais.com/espana/madrid/2026-05-05/una-hora-de-tregua-politica-en-madrid-por-el-aniversario-de-la-muerte-de-tierno-galvan-hagamos-un-ejercicio-de-concordia.html",
"https://elpais.com/icon/2026-05-06/aitor-ruibal-no-compro-lo-de-no-me-mojo-porque-soy-futbolista-no-te-mojas-porque-no-quieres-lios.html",
"https://elpais.com/salud-y-bienestar/2026-05-06/bitacora-del-mv-hondius-de-ushuaia-a-canarias-diario-de-a-bordo-de-un-brote-de-hantavirus.html",
"https://elpais.com/sociedad/2026-05-06/que-esto-no-salga-en-los-periodicos-la-iglesia-pide-perdon-a-la-victima-que-denuncio-al-obispo-de-cadiz-y-le-exige-silencio.html",
"https://www.santander.es/",
"https://www.zara.com/es/",
"https://elpais.com/deportes/2026-05-05/jon-rahm-y-el-circuito-europeo-firman-la-paz.html",
"https://elpais.com/deportes/futbol/2026-05-06/bayern-y-psg-alcanzan-una-cumbre-insolita-en-la-champions.html",
"https://www.elcorteingles.es/",
"https://elpais.com/economia/negocios/2026-05-03/a-la-caza-del-teletrabajador-tramposo-estas-son-las-herramientas-que-usan-las-empresas-para-detectar-a-los-impostores.html",
"https://elpais.com/videos/2026-05-04/videos-de-ajedrez-korchmar-un-desconocido-inmortal-ucranio.html",
"https://elpais.com/tecnologia/2026-05-05/fin-del-misterio-la-caja-sorpresa-escondia-el-coche-de-siempre-y-el-del-futuro.html",
"https://www.agenciatributaria.es/",
"https://www.renfe.com/",
"https://elpais.com/opinion/2026-05-05/hermana-y-maestra.html",
"https://cincodias.elpais.com/companias/2026-05-06/las-electricas-rechazan-los-expedientes-sancionadores-a-las-nucleares-alegando-que-cumplian-las-normas-del-csn.html",
"https://elpais.com/ciencia/2026-05-05/en-memoria-del-tigre-del-genoma-doctor-j-c-venter-1947-2026.html",
"https://www.amazon.es/",
"https://elpais.com/sociedad/2026-05-06/sira-rego-vamos-a-ser-el-primer-pais-del-mundo-que-elimine-por-ley-el-uso-del-falso-sindrome-de-alienacion-parental.html",
"https://elpais.com/gastronomia/el-comidista/2026-05-05/marineras-la-receta-de-la-tapa-mas-redonda-de-espana.html",
"https://administracion.gob.es/"
],
"static_urls": [
"https://administracion.gob.es/",
"https://www.agenciatributaria.es/",
"https://www.santander.es/",
"https://www.renfe.com/",
"https://www.amazon.es/",
"https://www.zara.com/es/",
"https://www.elcorteingles.es/"
]
}
}
}

View File

@@ -8,13 +8,37 @@
},
"trust_module": {
"white_urls": [
"https://www.lemonde.fr/",
"https://www.lefigaro.fr/",
"https://www.amazon.fr/",
"https://www.service-public.fr/",
"https://fr.wikipedia.org/wiki/Sp%C3%A9cial:Page_au_hasard",
"https://www.cdiscount.com/",
"https://www.fnac.com/"
"https://www.sorbonne-universite.fr/",
"https://www.france24.com/fr/%C3%A9missions/sports/20260506-ligue-des-champions-arsenal-finale-premi%C3%A8re-fois-depuis-2006",
"https://www.france24.com/fr/europe/20260505-trump-attaque-nouveau-pape-l%C3%A9on-xiv-qui-lui-r%C3%A9pond-par-message-de-paix",
"https://www.amazon.fr/",
"https://www.impots.gouv.fr/",
"https://www.france24.com/fr/vid%C3%A9o/20260505-br%C3%A9sil-un-petit-avion-s-%C3%A9crase-contre-un-immeuble-faisant-trois-morts",
"https://www.credit-agricole.fr/",
"https://www.service-public.fr/",
"https://www.france24.com/fr/%C3%A9missions/dans-la-presse/20260506-biennale-de-venise-l-obsc%C3%A9nit%C3%A9-de-l-art-apolitique",
"https://www.france24.com/fr/vid%C3%A9o/20260505-alg%C3%A9rie-christophe-gleizes-renonce-%C3%A0-son-pourvoi-en-cassation-pour-une-possible-gr%C3%A2ce",
"https://www.france24.com/fr/%C3%A9missions/info-ou-intox/20260505-iran-emirats-arabes-unis-regain-de-tensions-et-d-intox",
"https://www.france24.com/fr/vid%C3%A9o/20260505-france-des-lyc%C3%A9ens-pr%C3%A9parent-un-bac-option-drones-une-premi%C3%A8re-qui-int%C3%A9resse-l-arm%C3%A9e",
"https://www.sncf.com/",
"https://www.france24.com/fr/%C3%A9missions/le-d%C3%A9bat/20260505-iran-%C3%A9tats-unis-la-tr%C3%AAve-tient-elle",
"https://www.france24.com/fr/france/20260505-rima-hassan-jeanluc-m%C3%A9lenchon-main-dans-la-main-sur-un-yacht",
"https://www.france24.com/fr/sports/20260506-ligue-des-champions-michael-olise-gaucher-providentiel-bayern-munich",
"https://www.france24.com/fr/vid%C3%A9o/20260505-arm%C3%A9nie-emmanuel-macron-interpr%C3%A8te-la-boh%C3%A8me-avec-le-premier-ministre",
"https://www.france24.com/fr/%C3%A9co-tech/20260505-rencontre-paris-ministres-g7-parlent-commerce-droits-douane-etats-unis-union-europeenne-industrie-minerais",
"https://www.france24.com/fr/%C3%A9missions/journal-de-l-afrique/20260505-tchad-l-attaque-d-une-base-militaire-attribu%C3%A9e-au-groupe-djihadiste-boko-haram",
"https://www.france24.com/fr/sports/20260505-prix-marc-vivien-foe-trois-finalistes-2026",
"https://www.france24.com/fr/info-en-continu/20260506-bouteilles-fruits-et-l%C3%A9gumes-emball%C3%A9s-le-plastique-toujours-omnipr%C3%A9sent-en-grandes-surfaces"
],
"static_urls": [
"https://www.service-public.fr/",
"https://www.impots.gouv.fr/",
"https://www.sorbonne-universite.fr/",
"https://www.credit-agricole.fr/",
"https://www.sncf.com/",
"https://www.amazon.fr/",
"https://www.cdiscount.com/"
]
}
}
}

View File

@@ -8,13 +8,37 @@
},
"trust_module": {
"white_urls": [
"https://www.hku.hk/",
"https://www.hsbc.com.hk/",
"https://hk.news.yahoo.com/%E4%B8%AD%E5%9C%8B%E7%85%99%E7%81%AB%E5%B7%A5%E5%BB%A0%E7%88%86%E7%82%B8-%E9%87%8021%E6%AD%BB61%E5%82%B7-030502985.html",
"https://hk.news.yahoo.com/%E5%BB%89%E7%BD%B2%E6%8B%98%E6%89%BF%E8%BE%A6%E5%95%86%E6%9D%B1%E4%B8%BB%E5%8F%8A%E6%B3%95%E5%9C%98%E4%B8%BB%E5%B8%AD%E7%AD%897%E4%BA%BA-%E6%B6%89%E8%B2%AA%E6%B1%A1%E5%9C%96%E5%A5%AA%E5%A4%A7%E7%B6%AD%E4%BF%AE%E5%B7%A5%E7%A8%8B-%E8%98%87%E6%95%AC%E8%8F%AF%E5%A0%B1%E9%81%93-050523997.html",
"https://hk.news.yahoo.com/%E7%89%9B%E6%B1%A0%E7%81%A3%E6%8E%83%E7%AE%A1%E7%AC%8F%E8%AA%98%E8%9A%8A%E5%99%A8%E6%8C%87%E6%95%B8%E9%AB%98%E6%96%BC10-%E9%A3%9F%E7%92%B0%E7%BD%B2-4%E6%9C%88%E5%B9%B3%E5%9D%87%E6%B0%A3%E6%BA%AB%E9%9B%A8%E9%87%8F%E9%AB%98-200000496.html",
"https://hk.news.yahoo.com/%E5%8D%B0%E5%B0%BC%E9%A6%96%E5%AD%A3%E7%B6%93%E6%BF%9F%E5%B9%B4%E5%A2%9E5-6-%E5%84%AA%E6%96%BC%E6%94%BF%E5%BA%9C%E9%A0%90%E6%9C%9F-053502708.html",
"https://yahoo-news.com.hk/BBCChineseNews/41570/?yptr=yahoo",
"https://www.gov.hk/",
"https://hk.news.yahoo.com/%E7%BE%8E%E6%93%8A%E6%B2%89%E4%BC%8A%E6%9C%97%E8%88%B9%E9%9A%BB-%E4%B8%AD%E6%9D%B1%E6%88%B0%E7%88%AD%E6%9C%80%E6%96%B0%E7%99%BC%E5%B1%95-%E6%AC%A1%E7%9C%8B-043503677.html",
"https://hk.news.yahoo.com/%E4%B8%AD%E6%9D%B1%E6%88%B0%E7%88%AD%E5%8D%87%E6%BA%AB-%E6%BE%B3%E6%B4%B2%E8%A8%AD10%E5%84%84%E5%85%AC%E5%8D%87%E7%87%83%E6%96%99%E5%84%B2%E5%82%99%E6%87%89%E5%B0%8D-032002052.html",
"https://hk.news.yahoo.com/%E4%BC%8A%E6%9C%97%E5%90%A6%E8%AA%8D%E5%87%BA%E5%8B%95%E9%A3%9B%E5%BD%88%E5%92%8C%E7%84%A1%E4%BA%BA%E6%A9%9F%E6%94%BB%E6%93%8A%E9%98%BF%E8%81%AF-215001317.html",
"https://www.police.gov.hk/",
"https://hk.news.yahoo.com/%E8%87%AA%E7%94%B1%E8%A8%88%E7%95%AB%E6%89%8D%E5%95%9F%E5%8B%95-%E5%A4%A9-%E5%B7%9D%E6%99%AE%E5%AE%A3%E5%B8%83%E6%9A%AB%E5%81%9C%E8%8D%B7%E8%8E%AB%E8%8C%B2%E6%B5%B7%E5%B3%BD%E8%AD%B7%E8%88%AA%E8%A1%8C%E5%8B%95-002005854.html",
"https://www.hko.gov.hk/",
"https://hk.news.yahoo.com/%E8%90%8A%E6%AF%94%E9%8C%AB%E6%B1%BD%E8%BB%8A%E6%92%9E%E4%BA%BA%E6%A1%882%E6%AD%BB20%E5%A4%9A%E5%82%B7-%E5%BE%B7%E5%9C%8B%E7%95%B6%E5%B1%80%E5%B1%95%E9%96%8B%E8%AA%BF%E6%9F%A5-003501152.html",
"https://www.mtr.com.hk/",
"https://hk.news.yahoo.com/%E6%B3%B0%E5%9C%8B%E6%89%B9%E5%87%86%E8%88%89%E5%82%B5122%E5%84%84%E7%BE%8E%E5%85%83-%E5%9B%A0%E6%87%89%E4%B8%AD%E6%9D%B1%E5%8D%B1%E6%A9%9F%E8%A1%9D%E6%93%8A-080501492.html",
"https://hk.news.yahoo.com/%E9%A6%99%E6%B8%AF%E5%AE%B6%E5%BA%AD%E5%B9%B8%E7%A6%8F%E6%8C%87%E6%95%B86-09%E5%88%86-%E8%BC%83%E5%85%A9%E5%B9%B4%E5%89%8D%E5%9B%9E%E5%8D%87-52%E8%90%AC%E4%BA%BA%E8%99%95-%E5%AE%B6%E5%85%A7%E5%AD%A4%E5%B3%B6-200000517.html",
"https://hk.news.yahoo.com/%E7%BE%85%E9%A6%AC%E5%B0%BC%E4%BA%9E%E8%A6%AA%E6%AD%90%E7%9B%9F%E7%B8%BD%E7%90%86-%E9%81%AD%E4%B8%8D%E4%BF%A1%E4%BB%BB%E6%A1%88%E7%BD%B7%E9%BB%9C-130502524.html",
"https://hk.news.yahoo.com/%E7%B4%85%E7%A3%A14%E8%BB%8A%E4%B8%B2%E7%87%92%E6%B3%A2%E5%8F%8A1%E8%BB%8A-%E5%8D%97%E4%BA%9E%E9%90%B5%E9%A8%8E%E5%A3%AB%E8%AE%8A%E3%80%8C%E4%B8%89%E6%96%87%E6%B2%BB%E3%80%8D-1%E5%8F%B8%E6%A9%9F%E6%B6%89%E9%85%92%E9%A7%95%E8%A2%AB%E6%8D%95-010953947.html",
"https://www.hktvmall.com/",
"https://hk.news.yahoo.com/%E4%BF%84%E7%83%8F%E7%9B%B8%E7%B9%BC%E5%96%AE%E6%96%B9%E9%9D%A2%E5%AE%A3%E5%B8%83%E5%85%A9%E5%A4%A9%E5%81%9C%E7%81%AB-055003888.html"
],
"static_urls": [
"https://www.gov.hk/",
"https://www.hko.gov.hk/",
"https://www.scmp.com/",
"https://www.hk01.com/",
"https://zh.wikipedia.org/wiki/Special:Random",
"https://www.hktvmall.com/",
"https://www.mtr.com.hk/"
"https://www.police.gov.hk/",
"https://www.hku.hk/",
"https://www.hsbc.com.hk/",
"https://www.mtr.com.hk/",
"https://www.hktvmall.com/"
]
}
}
}

View File

@@ -4,17 +4,36 @@
"base_lat": 35.6812,
"base_lon": 139.7671,
"lang_params": "hl=ja&gl=JP",
"valid_url_suffix": "com"
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://ja.wikipedia.org/wiki/Special:Random",
"https://www.yahoo.co.jp/",
"https://www.amazon.co.jp/",
"https://www.u-tokyo.ac.jp/",
"https://news.yahoo.co.jp/pickup/6579009?source=rss",
"https://www.jreast.co.jp/",
"https://news.yahoo.co.jp/pickup/6579008?source=rss",
"https://www.rakuten.co.jp/",
"https://www.nhk.or.jp/",
"kakaku.com/",
"https://www.goo.ne.jp/",
"https://www.amazon.co.jp/"
"https://news.yahoo.co.jp/pickup/6578993?source=rss",
"https://www.mhlw.go.jp/",
"https://news.yahoo.co.jp/pickup/6578991?source=rss",
"https://news.yahoo.co.jp/pickup/6578987?source=rss",
"https://news.yahoo.co.jp/pickup/6578996?source=rss",
"https://news.yahoo.co.jp/pickup/6578997?source=rss",
"https://www.smbc.co.jp/",
"https://news.yahoo.co.jp/pickup/6579007?source=rss",
"https://www.japan.go.jp/"
],
"static_urls": [
"https://www.japan.go.jp/",
"https://www.mhlw.go.jp/",
"https://www.u-tokyo.ac.jp/",
"https://www.smbc.co.jp/",
"https://www.jreast.co.jp/",
"https://www.yahoo.co.jp/",
"https://www.amazon.co.jp/",
"https://www.rakuten.co.jp/"
]
}
}

View File

@@ -2,21 +2,35 @@
"region_name": "South Korea - Seoul",
"google_module": {
"base_lat": 37.5665,
"base_lon": 126.9780,
"base_lon": 126.978,
"lang_params": "hl=ko&gl=KR",
"valid_url_suffix": "co.kr"
},
"trust_module": {
"white_urls": [
"https://ko.wikipedia.org/wiki/특수:임의문서",
"https://www.naver.com/",
"https://www.yonhapnewstv.co.kr/news/AKR202605061413403Cy",
"https://www.snu.ac.kr/",
"https://www.yonhapnewstv.co.kr/news/MYH20260506144518ZSk",
"https://www.kbstar.com/",
"https://www.yonhapnewstv.co.kr/news/AKR20260506120317oou",
"https://www.yonhapnewstv.co.kr/news/MYH20260506114454137",
"https://www.korea.kr/",
"https://www.hometax.go.kr/",
"https://www.daum.net/",
"https://www.coupang.com/",
"https://www.yonhapnewstv.co.kr/news/MYH20260506120430SB5",
"https://www.kakao.com/"
],
"static_urls": [
"https://www.korea.kr/",
"https://www.hometax.go.kr/",
"https://www.snu.ac.kr/",
"https://www.kbstar.com/",
"https://www.naver.com/",
"https://www.daum.net/",
"https://namu.wiki/",
"https://www.tistory.com/",
"https://www.coupang.com/",
"https://www.chosun.com/",
"https://www.yna.co.kr/",
"https://www.kakaocorp.com/"
"https://www.kakao.com/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "Malaysia - Kuala Lumpur",
"google_module": {
"base_lat": 3.139,
"base_lon": 101.6869,
"lang_params": "hl=en-MY&gl=MY",
"valid_url_suffix": "com.my"
},
"trust_module": {
"white_urls": [
"https://www.cimbclicks.com.my/",
"https://shopee.com.my/",
"https://news.google.com/rss/articles/CBMixwFBVV95cUxNMEZHa1pQejFZZkdYMDdHWnUwR1JWX096OEJrSXV0NTNmM3NPRmtOd1dlZ1JnUjhzc2kxLUhRTkwyaGNlczFnYkNMNFpsYzk5dU95bEZxb1B2U2NRdElWMUgxRWM5MmhYQkRCMnZQc2s1aVRsSTZKODkwVkNaSWE5c0NTNjJvRmtpUkZ4Y0NqNVFManBGWVVJQ1BaZnlRQlpWU05PQ21uWWstUFNqazdzakdoem1XYk1FTHZKYVBjekt2NkhFaU93?oc=5",
"https://news.google.com/rss/articles/CBMiwgFBVV95cUxNT19xeGhodmNYNGF0dG4wNS1XYlhOanZRU290WTl0bjY0Z0Q5UmI3ZXlPbE5rc0xuZ0dTVEV4NUd1VVNpb1NNckQ1VVNLU2o1WTRQTGtZZ2IwV25ub2FCeE91TGxzaXlxcjVoeF9yTmR6ZnZvM0RYVk1MdGxHcEZlQzdURHJBMzVDTWVhMWNfU2hqU1RfWUxERjk2dUlUSWl6ekhpSDl1QjFhNEdIYmxweTkxNHVxbHhaRkZ2cUh5N1ZMQQ?oc=5",
"https://www.maybank2u.com.my/",
"https://news.google.com/rss/articles/CBMifEFVX3lxTE84djc0U2xCQnNEX2lkY3JNXzc4VkRTaW1OUGs1S0d1bTQ1U0hXdDlrZHV0ZVNydmVkMTJqWVB2ajl0aTB0N2phWFhOU3I0WERRR0w3MEVwc2VfNzlLRGZkSVNsQjlHMEtFRW51MjVDaVB0eTZNdTJRYkxLNmU?oc=5",
"https://www.lazada.com.my/",
"https://www.malaysia.gov.my/",
"https://news.google.com/rss/articles/CBMi7gFBVV95cUxPbFFXSWdnNW1jTGFGcVhCczFyLUZ6amNjQUFiUy1OdUEzRUgtVTVheEl5a3dlQ1psSTZwbmZGTU1OWnlENVpucDZEbTRhOUhSRVBBb21MZXhYM3Y2V1FEM0tzUUtxQ0ZVM3hxVUpNWEQ4RjE0b1V0dmFlQlYxUHJ4MURWVlF2R1E2VDdUSGNfUE5HSGc2RjVQcmVkdDBhSW9ZR3Q3Wm1vTWs5eTZha2ptdmRlUGF6SFYweFRMMlVZOU9ETV9MNmFaZzZVcDJiZFFrS3dBVXV5b2h5Sm1FdnhFWG12Y1BEbUU2UF9EcjhR0gHzAUFVX3lxTFBfUUpOT1RWQXNBcHJzYXlqMWZqZmFJZkVrZzdmb0t4N3hKUVFfNWstSVI2bVgyYkd6N09LbmpSdS13QWZkTGVENWloUXUzanpkTEtDMlp4ZWFoT2IxZzFwV29BbkpTOFkxcHhYMDJTVTMtX2ZvWEpjQzFuaThuOWVBVkJ5Z05HMFA4WU03UDNLYWtkclRaTGZxMlREdlFxREc5VnFIeEVNZmtMVTk4eFFnUndQTDBWUFIxYjlvMGJWa2NCVm10SjdWTWhBUkdpZVJJeEpRRnNxQ2xLSUxLTGhsQjhZeVRQX2lMSTY1bVY1V3FsOA?oc=5",
"https://news.google.com/rss/articles/CBMitAFBVV95cUxNZ2lhN0hQbElyZFNXXzVkb2FSdU5ad0ZLcDhUazFyNHMycHV6cUVZVjVicThZem9FeVhoMzNTYU93WmlsRDNmWjlrMHRqQVA1cUQ3TVNwTEV6aFlXWGltdjhFNnV3Rk9FV2dJcFl6cTZZMDVhN2xsVUV1YlZ3TlBCMGhPLW4yYzJRdVZwMndoTTVFUDgzRDNlYWd6bVJUUWEtZFVSQzBxdnM5dkJ0QjdIa3VORlQ?oc=5",
"https://news.google.com/rss/articles/CBMixgFBVV95cUxPWUtMUi1kYkRtdnVwdEt0YjFQWWxQTldhVGhGa3N1MVZpSnExVkRuZzllMzdxaHJHWHlqUWtzN2NwUlNLOUZqeVpNMURvaTZvX0tla09qNU5aT1BXekVrdmktUkJMMWJpd2oyQjV2d2pISkdUb21rS3dEaWt4cHIxbHJTbktlTGNhYS1jdUhIdTNFY1U2NjY4aFJQWUlxLXlyaURMdHV6dFJSYndfMm9QaWFGWWRIWlhwaVdRcVV0cmlZc2NYUmc?oc=5",
"https://news.google.com/rss/articles/CBMilAFBVV95cUxPQUdQbDJ3T2o5OW9PTjhDUktLWVV1ZWFiNFpnRUxXdjUxcTdQbkREbmxQLUZjTnVsMDdaRThlRnYxYV9zVGVYRTNWb1dBYlRGVlY0TUs1dDZkSzgwMGhZZHVDM1BKVkN4Vjk1ek1GQ2ZLTEdpNEo0cEc2ZFd2R2drWDNWZnZvQWJLZTY0XzZYM0NleGVJ?oc=5",
"https://news.google.com/rss/articles/CBMi-wFBVV95cUxPalE0dHo4aWNDWi1feklPaDQyVE1EN1Zzd0lVVE1nMUN4Rm5UZlNvX0FBSVZSeVpJRnk4cWltX09ERDhDdUxyX1VVZ0d4QzI2bWRQUndTRTUzRDVudkhRZTl6YjNCSkFnV1IxWHhKMzlJSHNiU1FITGlOVnVPTGtmUXlSS2VxdEY4ZkNUQzhmandIczJnRHc3dWhoc0F3Y0FhamVmMmJqbFlTeUh4R2poMDNoS2JPMnJIaVdBSGFPd294NUtMQnV2MnV2YTlDOXVvcXMzSTkzOEhxdWV0YVgwS1FOM0FwR25iQWM3dTRhR2JqMGJlcGRuSzZUYw?oc=5",
"https://news.google.com/rss/articles/CBMi3AFBVV95cUxOb19TdVhmSFgxcTh2dUFfUGdvYkRseVo2dWowWGlmamlRalFycDNRaVZvMGlVU09DbHBNdENGbmhjVTBEN2E2OE1YSFd0Qnl2Y2lhaHYwQ0JkMER5bHhqWDdWbVpfTlJjVlZZZjhKYm04cWJET0xsUXM0bS05MmdKY00xVzJraGNScERpOTYxZmlJWnlKbUluVmxuYl9wZG1ZcTNwS2NnN1BBdjNsQ252X2V4VzNaUUZMdWFVNzY1Q2RPWXJhRUUtM1lFQnFuY1QzeHBvSzBlNk9mdGNF0gHiAUFVX3lxTE1GVlZ5MHZyaUxMNjhQXzBfZ1NGME5aWlMxWVZuZS0xeUI1aGRtbzZsQ1p2eFlZRHpaRFFPMU1yWV9PUVM3aVdYNnlPdGZJajk4Q1AxRlYzX09FT1BNS2oxYndNWWlLYnpja2dOWWlQTlQ5Tk5oeWxRTm0zbDFXSlFCRF9HV2VvNUJEdERnYWZTRVNZeHBoMHk2UGxTcklQbmVIVTNzTk1HQVVlOVlQbzA4LVIxdHFrM0lkTWI5VEhNcTc3U1RhQlQ0WFJUY2xVWUtsM0ViYTlVbVlzdVlyN0h1UHc?oc=5",
"https://news.google.com/rss/articles/CBMiugFBVV95cUxQTGFveWRZYTg0RWdWYlVQTEMyV0ZsZE1wZEJnTkZaQ2sxN2tJZVdmSjVVSTV3emY0VG54bk8wUTI1c1Q2cE5nRkFSS2ZsU3NRSGxYMTdYNVhMNzN5VUxIWS1JNXc3LXpoWmszOEFsdXVCcjZ6U19YXzlfTUtlUFdGUFJmTUJfUG1TZmVESjRqUV9ZVEZjZGJtZFhMMVlsVkJLTl9jRmQyZ2c0NHFlYWhMU0FQRHUtR0ptbHc?oc=5",
"https://um.edu.my/",
"https://www.pos.com.my/",
"https://news.google.com/rss/articles/CBMirwFBVV95cUxPTUZLV1d4elRUWTgxZHEtY1NyUTBpbFMxNDVmbGFwd3RiS3ZWQnpkb3NMRU1kM0ZXWnVFYml6bG5Nb2RMNm1JUGd5bDFNTXdIMXZiVGktbVZQLTg1anQ2Q0IzazVyZVhSSnF4V2VGZHYzVUl6UjhVT011TTYycUwxSzZQWjVBNVRieGVWeGdFdnlsaDk5aGtyRVd6ZVlnS1lSdUlFdktGVFVxZXR5QnBv0gG0AUFVX3lxTE43RUM3ZG9aaEFLNGRjOEU2VkhmMzhtcUwwUXJiT0F3d2ltV0VzSTZnRVJwaVBrYTkxRHF2aXRWSHlLd3BPVGlEQ205dEdmTjJaQ0NXTTVpODd5SEdOTVhHWm9NRHZBcHNIVlg3dDRldHBUZ0tZLVVta0ZOaVVuaWd3UHFKMTdnQWhnLUtmR2pLMVNFd2JfU0dsVDB0ZE9yUG1FZ09seG5JTGlCWGlSdTdRNktpQQ?oc=5",
"https://news.google.com/rss/articles/CBMi7wFBVV95cUxNT1lSSHUyOEVtWTVGMEVPRWxWc0UwTTdldmtVM1h1Z1RSTFMza2FuOXc3c0NLU3BydlBHV0tnbGNNNUxJdFZYLWlRdDJDMkd4N3FlQWRXdGo3UEN3c1VuWkNTeW95a2hYWlRzNGRvUVdCekRLWDFaR29pakQ5T2xzTlc2aXZwOUxKU0JMMEg4MjAwdW1XTnEzTkFhblkyLVJuYjk2XzBUT3BwZU1rTDdLc1ptRmlBZUFsS05IbzdSWTdnYnh6UEJCdy0zemM5Q0J5NXVud0pCWFRDWWdnWFRqSFd3dGpVZTk3bWFrSk1tQQ?oc=5",
"https://news.google.com/rss/articles/CBMi8wFBVV95cUxOclJVVEJMVGItdzlGdlhXR0hBbjEwb3gyb0ZJVVhoWm5qV3pRRVFmcm1tSjBqcFlCZkNEQktMUFBZbU5sTnV1MnU4bmItSVhJNTdNcFI2c0tPZk40VTk0dVVTVHNyRGtmMlc0cXdCcjdaOFBxWlAzbDB1UWtSMHhoUUZWWVpfYkZQWElTRVZYQ3hFeHd1Z2puT2pDSTVBT1A5M2Y4YVF3UHY2NlJzV21NVHgzQ0JNZk95NGpZRnBOWkNzZ2l1aHJkS2hBTmtsTFBvRnFCSk1ieVVTejRnRERsTy1IbWdEaXJWV01IQzZnUFFjT1k?oc=5",
"https://www.thestar.com.my/",
"https://www.hasil.gov.my/",
"https://www.kwsp.gov.my/",
"https://news.google.com/rss/articles/CBMiYkFVX3lxTE9YcW9JZ1U4UG52RC1XVGQ3eWtVdHA2R1BPNmNRYkVMOExHZndINm5vTWkzNzZwZW9DUVBfZlZJVklESVNMU2tlLVpPZ0p6QVZCQlFjamduQ2toS3NUVFVaaGhR?oc=5",
"https://news.google.com/rss/articles/CBMiigFBVV95cUxNTHNYT1d6SkdVVGI0M1I1REQ2S09WaFNMYlNSQzNxYktVUDVZc3hYWklkakk3RUVlZjlGQVR5M2ppLS1Pd3NrUWRhSXkyNGpXRFZBVjIxTk5rU2ZiaGRTazI3WXEzYlowSGpka0NDS3hYYkV3VU5QTzBfdlUyZEJoMHUzejltYXlyZ0HSAYYBQVVfeXFMUG5lLVJFSHVNdnJqS2x5dTFCYk1yT2hhZDVCSWJJbHpzakxqNTAwTGpsX3lESE1MN1BrMjFoODJnNkNESk9qT1dXWUFpbXQ2OVBSRFVfTU5XOG8tNXNTdVBWMEUwR1dKLWFlSF9xOXhWX0pidGxkMEFZZ1c2QVI0enY2QW03TkE?oc=5"
],
"static_urls": [
"https://www.malaysia.gov.my/",
"https://www.hasil.gov.my/",
"https://www.kwsp.gov.my/",
"https://um.edu.my/",
"https://www.maybank2u.com.my/",
"https://www.cimbclicks.com.my/",
"https://www.thestar.com.my/",
"https://shopee.com.my/",
"https://www.lazada.com.my/",
"https://www.pos.com.my/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "Nigeria - Lagos",
"google_module": {
"base_lat": 6.5244,
"base_lon": 3.3792,
"lang_params": "hl=en-NG&gl=NG",
"valid_url_suffix": "com.ng"
},
"trust_module": {
"white_urls": [
"https://punchng.com/court-frees-ex-hos-oyo-ita-in-n570m-money-laundering-case/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/epl-clubs-battle-for-dele-bashiru/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/portable-challenges-davido-zlatan-after-carter-efe-defeat/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/nigerian-passport-climbs-global-ranking-slips-in-visa-free-access/?utm_source=rss.punchng.com&utm_medium=web",
"https://guardian.ng/",
"https://www.vanguardngr.com/",
"https://www.airtel.com.ng/",
"https://www.mtn.ng/",
"https://punchng.com/edun-charges-nigerian-boxers-ahead-ghana-bout/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/akpom-joins-ipswich-permanently/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/adeshina-bags-texas-tech-student-athlete-award/?utm_source=rss.punchng.com&utm_medium=web",
"https://www.konga.com/",
"https://www.punchng.com/",
"https://punchng.com/fintech-oversubscribes-debut-cp-raises-n6-89bn/?utm_source=rss.punchng.com&utm_medium=web",
"https://www.nairaland.com/",
"https://punchng.com/iran-creates-authority-to-control-strait-of-hormuz/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/11th-nass-senate-blocks-ex-govs-uzodimma-from-principal-offices/?utm_source=rss.punchng.com&utm_medium=web",
"https://www.firstbanknigeria.com/",
"https://punchng.com/unity-cup-chelle-rates-3sc-midfielder-ayobami/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/gunners-end-lookmans-ucl-dream/?utm_source=rss.punchng.com&utm_medium=web",
"https://www.gtbank.com/",
"https://punchng.com/egbunike-backs-ogazi-for-more-records/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/oyebanji-labels-oyebode-football-tourney-talent-pipeline/?utm_source=rss.punchng.com&utm_medium=web",
"https://punchng.com/leverkusen-coach-hails-tellas-quality/?utm_source=rss.punchng.com&utm_medium=web",
"https://www.jumia.com.ng/"
],
"static_urls": [
"https://www.jumia.com.ng/",
"https://www.punchng.com/",
"https://www.gtbank.com/",
"https://guardian.ng/",
"https://www.konga.com/",
"https://www.firstbanknigeria.com/",
"https://www.vanguardngr.com/",
"https://www.nairaland.com/",
"https://www.airtel.com.ng/",
"https://www.mtn.ng/"
]
}
}

View File

@@ -8,13 +8,37 @@
},
"trust_module": {
"white_urls": [
"https://nl.wikipedia.org/wiki/Speciaal:Willekeurig",
"https://www.rijksoverheid.nl/",
"https://www.nos.nl/",
"https://www.belastingdienst.nl/",
"https://nos.nl/l/2613239",
"https://www.ing.nl/",
"https://nos.nl/l/2613252",
"https://nos.nl/l/2613279",
"https://www.bol.com/",
"https://www.nu.nl/",
"https://nos.nl/l/2613278",
"https://nos.nl/l/2613237",
"https://nos.nl/l/2613274",
"https://nos.nl/l/2613263",
"https://nos.nl/l/2613276",
"https://www.rijksoverheid.nl/",
"https://www.marktplaats.nl/",
"https://www.buienradar.nl/",
"https://www.telegraaf.nl/"
"https://nos.nl/l/2613270",
"https://nos.nl/l/2613232",
"https://nos.nl/l/2613261",
"https://nos.nl/l/2613243",
"https://nos.nl/l/2613233",
"https://www.ns.nl/",
"https://nos.nl/l/2613272",
"https://nos.nl/l/2613275"
],
"static_urls": [
"https://www.rijksoverheid.nl/",
"https://www.belastingdienst.nl/",
"https://www.ing.nl/",
"https://www.ns.nl/",
"https://www.bol.com/",
"https://www.marktplaats.nl/",
"https://www.buienradar.nl/"
]
}
}

View File

@@ -8,13 +8,39 @@
},
"trust_module": {
"white_urls": [
"https://www.straitstimes.com/",
"https://www.channelnewsasia.com/",
"https://www.channelnewsasia.com/sport/iranian-fa-chief-says-fifa-guarantees-over-irgc-respect-essential-world-cup-trip-6102951",
"https://www.cpf.gov.sg/",
"https://www.gov.sg/",
"https://shopee.sg/",
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.channelnewsasia.com/sport/crunch-time-capitals-after-latest-loss-dampens-playoffs-hopes-6103226",
"https://www.singpass.gov.sg/",
"https://www.channelnewsasia.com/entertainment/rb-choudary-death-car-crash-6102861",
"https://www.channelnewsasia.com/world/australia-says-13-citizens-linked-alleged-members-returning-syria-6103061",
"https://www.channelnewsasia.com/entertainment/d23-asia-fan-event-singapore-2027-6102856",
"https://www.channelnewsasia.com/asia/aung-san-suu-kyi-asean-access-6103056",
"https://www.channelnewsasia.com/singapore/singapore-airlines-sia-a350-900-airbus-first-business-class-seats-delayed-6102836",
"https://www.channelnewsasia.com/singapore/malaysian-bank-harvesting-handler-4-million-100-bank-accounts-jail-6103041",
"https://www.shopee.sg/",
"https://www.fairprice.com.sg/",
"https://www.dbs.com.sg/"
"https://www.nus.edu.sg/",
"https://www.channelnewsasia.com/sport/australias-smith-confident-liv-will-go-after-saudi-pull-out-6102746",
"https://www.channelnewsasia.com/sport/casemiro-backs-carrick-permanent-man-united-managers-job-6102886",
"https://www.channelnewsasia.com/singapore/ai-in-schools-age-appropriate-focus-learning-not-shortcuts-desmond-lee-6103101",
"https://www.channelnewsasia.com/singapore/maid-jail-married-man-bigamy-batam-6102821",
"https://www.iras.gov.sg/",
"https://www.channelnewsasia.com/asia/cambodia-prime-minister-cousin-hun-owns-huione-scam-6103106",
"https://www.channelnewsasia.com/business/infineon-lifts-2026-outlook-ai-demand-boosts-growth-prospects-6103256",
"https://www.dbs.com.sg/",
"https://www.channelnewsasia.com/entertainment/bts-in-mexico-arirang-2026-6102721"
],
"static_urls": [
"https://www.gov.sg/",
"https://www.cpf.gov.sg/",
"https://www.iras.gov.sg/",
"https://www.singpass.gov.sg/",
"https://www.nus.edu.sg/",
"https://www.dbs.com.sg/",
"https://www.shopee.sg/",
"https://www.fairprice.com.sg/"
]
}
}
}

View File

@@ -1,20 +1,48 @@
{
"region_name": "Taiwan - Taipei",
"google_module": {
"base_lat": 25.0330,
"base_lat": 25.033,
"base_lon": 121.5654,
"lang_params": "hl=zh-TW&gl=TW",
"valid_url_suffix": "com.tw"
},
"trust_module": {
"white_urls": [
"https://zh.wikipedia.org/wiki/Special:Random",
"https://tw.yahoo.com/",
"https://news.google.com/rss/articles/CBMiiANBVV95cUxOOWRvdXRJam5UWE5XODhZeXFsdTFrQk0wRE4zLWYxVXg1VWlXeTZxOXB6aE9BdUExVzJPR3BsZ1IzcFdlYi10WmMteUNUZGJhNkpydVBzQkZ6MFUyaVIzaEhpZzVWWWN1VWpfUnAxbWY4WnRtOVFxcE40Q1BRVFZMYVNaUkR6SnZSa1NfS1JjWlRnbE9XcVN2MzZERWJjaHE0RVFYMDRGNWhqQUJJME5Sc2ZucHRVVng5T21QTnNadlhYb1JuOXFUVDNiYTY1WTZLUWFBeVdEbFZFVnI5UU04ZXpMVnBYN1ZsSTROOFJRektobFJVdVhvTXhjbHVQLXc4aF8wRUw2blFkOWVPZ3BKSlNwcHBOM0VFZlZwZVZVT0tWeUVrRkh4ZTBLQ2V1RVhlandmcXY3SGIxVVBCTjZJUE9tY0toMG1mSXV2QjFCcm53U0NIeUhTUFMtZUloai1VZUZUanBkOWxfb3dfVDdHZW0wb05GTHlUX1JDVm5YalU3b085VklHRw?oc=5",
"https://news.google.com/rss/articles/CBMiXkFVX3lxTE9ENzFFTS1hQjY2Q2N0Y21TLVVQN3pfaWlpU29KOUxOS0hJekR4ZmVNTlBuVWxNWUhGRGs5aW1QcE5ZNGpBNEJVMF9ES3JqRjhkaU1keGpZb1pNeHBZSlHSAWhBVV95cUxOcndtdzNmR2J5RHBmMmVRbDFROU96MHhNeHN2MzdMNEJsSVZNX3Jpa0VkaDIzaG1wWjM4a0JyNlAybXpkUG9FZGp2dGxfdDJrUC1RbFB6NzhXMFc3aDlCczR3Vno3UzFMNA?oc=5",
"https://news.google.com/rss/articles/CBMiU0FVX3lxTE45Y0hITVNnX0laYl9xdmdvcUZWTVNoZXBzVzZYNWtrMmlxaHpHOHlCSEpKY1o2OXFZVE0zWElBVWpnRnVSWnFxeGsybmQ5NmR5NzFz?oc=5",
"https://www.pchome.com.tw/",
"https://news.google.com/rss/articles/CBMiZkFVX3lxTE54UjUydzRTaVVxOUNBSGh6TTA0elc2VmdpU2lWSDdlWDdKRVpkYlFXeXNXR1JKd29fdzdBWEwxRVRGNXJSS0NBSXFZazhqcWVadUJCRXFWZ1VNYkNVOEpucmNCd0NSUdIBa0FVX3lxTFBDaUdKVktqRzdwVk9hbjByejB6WWFYaklfMVhsV1ZhWkpDWVF6LWNlRWt0UGNZY3M2ZzVHQXpGYnNFeVMtT3BsU1ZqeDQ5MTlOdjlLS3J3UXEyN0lKR0Z2aF9FcVp4WF83NE5J?oc=5",
"https://www.cathaybk.com.tw/",
"https://news.google.com/rss/articles/CBMirwJBVV95cUxPcDN5SFo1U240N1h5RFZwMUYtMXNjLUxrRGJpUFdBcU5LeldQaVQ5b3kyamhLY2lXbTdmTl8wdEJEVjctazZtMnhvMFpaQzZMT0Q0cE5wLW1BaUhBTEhnQ19yLXg2NjhBTzY3V3pCT2VsUGlzQjRKMlRuODJYOXdhYlBrN2RTWVhWLVBUVktmaGkxS0NzMUtfdS11cmkyclVfSjFRWGVqMFhXeGZfWjRIZ2lVNXdjcm9hYW1aRDkxblp4aFFIMk9yVU43X05vWlMyTjl6bjNJejNvTHRaTVdmZ1lrUi1wS3VoLTQ1VERCZnhWTFp4d3IwV0gxX050MS1iUFJWZ2d3VlRjcVhsMHIwM1pXTURoQ2dRTlJ1Ry01WlpLOWFqY0lCdFlMNXlkUHM?oc=5",
"https://www.dcard.tw/",
"https://www.post.gov.tw/",
"https://www.momoshop.com.tw/",
"https://www.ruten.com.tw/",
"https://www.mobile01.com/",
"https://www.gov.tw/",
"https://news.google.com/rss/articles/CBMi1gJBVV95cUxONEF4cnpSaUtfLUFzTm13SGZicVVoOHhGUGZ2dnNaVFVWWjMwWFoxelpMclhJa2JCanN6Q0JhVTQyR3JYZzY1WVpTR1B6el9OTzlpNllOYnNSN0RKNFltRjJsTVZvLTdfcDItU3J0ZE01M0w0c2ZZRWNETzdhOTZhcjdid3FLMUk2d0pRN3pXeGtPc2NGTkQwenBlcHpMR2I4cC1jVHhxSnppSTljSkI4Vm1kVEFDZV82eWFyZklCVTJ2TS1kM2VHYlpUMWNmbDNTRTRmZEt3dTFSNmxHU0E5dGtHZS1DYjFPZFZILW9mSXY2d2J1dHJWdEV1R282TWNRNzFsSmdjTk1MY1A5aUtiWi1wTkEzZUNPYlA0RVg0b19NRnc0b1lKUGJuSVFybDRRQlhPTGVYWnlzVmhKV2pXV2RVakVzR0NCdFdFbG1zWFNtY2Y2ZGc?oc=5",
"https://www.thsrc.com.tw/",
"https://news.google.com/rss/articles/CBMiW0FVX3lxTE5XVVpkMnVBOTd2bUEyUDZIOXQ0NXpCT3dTM1h1dVhKY3dvcDFNTjc0TmJxeWhsaTZxMFBhY2pfVVVGeDJvbWFtbTltcm5UYXNyZEI1RXctc3NYdzA?oc=5",
"https://news.google.com/rss/articles/CBMi3gJBVV95cUxNS0dTcWdoVkJUdGQySXZFSzI2OUFBak16ZFFfYXhoQVhvcFZKeTF2c1QxOFdheGZ4eXBGbVpidW5TZXJwcDBjSzVtOVNBMUw3UURMMUppQ00za3JfSGI4U3BoSWYwYlRDNnNtOWJneVo0N2YyS3JDdDZ0c1F4Y1NVMlhaajJfTG12eWtHNVN3WGJnSGRNVDE2WlpzbDRWNTV5bFNjUGpVY0ZqU3oyOFkzYVVUcXRJdDhLTjRPdFhDVkE0aVh3YklEaGlnY240RGRiazVmcG9ET3hRUXplSjY2TFJSMFVOOUNjcEVmdkExUFJpcVhIOHphOWZkanNhZWlOaENWMFJ3OFFqLVJDdzkyNUhYZWZyajIwWUNpcmU0dkQxbk1TcGZCTjY3dGVaVDFXZldZX19VTzJzeVVZT09oRVYtQkhSM1h2Zm9NWFdrRzdjN25OZEJnTmhiLTB2Zw?oc=5",
"https://news.google.com/rss/articles/CBMiUEFVX3lxTE93V1hqX1VvUXp4b2J1TXlFeHFYWXdOd3hpaDI4Rms4Tnp5YkhzZ2pWVXVJN29peGM4dWk4QktKZU41R1Vab1V4RUpIeDFaeUFu0gFWQVVfeXFMUGM5bTFPQ2I5Um4yU3dwV2NnWXBSMWtkRTI1dVNPNno1SWtGOHM1Z3oyaVVaRE9yeHZIQTY2NEZOa2V1emdBcWpHWTZQVEJmU3VQWWNqbWc?oc=5",
"https://news.google.com/rss/articles/CBMi3AJBVV95cUxQU1BIU1RZUWEzcUVZQVJWaEtYSVRZeWdibVlEaUZhY1ZVZGtiMGdFZXIyWTM2cUgxazZ2UWcwQ1Bnd2JVbmVJaEk4cXptb1docVZfTVdOclRrWHNtR1FIZ3NSZ1hSTk1GcFV2bEtMbG1sc3ZqTjV6ZkREamk0UVZBNmFtZ3RURlhoOUFESk9ZMEtNZk9sMjQ0NmY2eTNTUy1hdlBoa3lyNW9IaVBmRGZhMUM3dGZoVjExaUlrUGxiZ3Q1SVM5TnhqdnZBcVFfWGFqNnJhX3hScDRhcFRaQTdDYWZCWjlpWEZCMmtvWmt4a19MaUxaR0kxMllKRERReTMtYzNadXpLZEl4dTdvMmE5bnYwRmZDbF9WUXg5ZVVTSXNtSUpvS1d6VEVjdHBwSFVNSlJrRVp6THlTeW5mX1hNQUpTYnd0ZGYyVm82MzVaUHVXdVEySm02em9ESjE?oc=5",
"https://news.google.com/rss/articles/CBMisgJBVV95cUxPSlRhdXVBOTI2X2YycE9IYUN2eGtmS2RzSkFRU2pZV01SVlg4c25Jejc3YzY1R1h1UnhFenUwTm80NW1MSTVjUGU1ZkFpWTd6aEEweF92bFozeW9kLWFhekFxVTAxamlZenl5anowdHRLTjlHcC1fV0NrUmN3eXRmZ21Zb056SVF6MzlNSEJyQ1JWekNoNVhLaGIwXzZ1V1kyY0NOdEJfWGw4ZEJzSVc2SmU5NDNtSXgxWWExRkJzZXVka0gxT2FadkRCMVpuNWtUQTFHSmNmYWdOSlh5T0N5WEFDR0lTYWtDdzJsd2NxSTR6dmVfNkdRUFFrN0FldXVzeGZtbGdIU3g3YWZCN0JkNzdmRy1LelVvblY1ZC14dWhuYmdoNk9RNndQSlU0UURucFE?oc=5",
"https://news.google.com/rss/articles/CBMiW0FVX3lxTE1SWTVMS2lwUzRBalZQTXQyVkg2dC1mbWZ5NV9GQnJvY0txOWR3cEJCdVZBZGJTeHRQSHZxYVd4bFJaN1JTTzhMTEdqZVpIdGpUYUx6bzBpaF9OQVnSAWBBVV95cUxNR05Md05fdkFTMGpXdDlRZEZWNTJiQ1BlM2FtYm1lQUVCZDdwSW5lN0gyNjA2TzRNOThzMTQ3WUtWZnhvWDhtbFI3MkpYWFJ1Z2dJV3dSbnphUExUWDFsRWo?oc=5",
"https://www.ntu.edu.tw/",
"https://news.google.com/rss/articles/CBMiTkFVX3lxTE5uRTJ0eFQyVXo3b3dVZE9iQjJZazdTV0UwYVktd0xoQkY2MmNEVDE0cWpJcWVMNTlNeEg2dUZFaDFLWUE0OFNGTXBrVk9wZw?oc=5",
"https://tw.yahoo.com/",
"https://news.google.com/rss/articles/CBMiuAFBVV95cUxOY0ZSWHJ6aTBDLXVYYlltSXktdktWaHAxM2hJUW1OSDJtWF9xdDBjVVJaalZ2NS1uWDN1V3RmNjJMay1yNHFmUldrTU9fYlptbVlmbmlaOW5HY09sZHhwOFFrel9lc0l2MFlFeE9aSlVtVnJuaWtrcUhQM25Xdmc0ckJSZVYzQ2ZDdGlkVnNzTnAwZVlqeXEwUjJDT0xWNXUtUXVQZFRKN2FpWjlZeEN4bTNiSk92c3lF?oc=5",
"https://news.google.com/rss/articles/CBMi4AJBVV95cUxNZHlMYzRTRm80UmM4QlJLaGVLRi1IbkRwdkgyX1NVLThfX09GV0xTbEV2QzkySXFPUHF0LXpXU3lWazY1QWtYZ3ZucnctZDdwcUNCQXV3UmFYWHJ3aldGajQ0YUdvaGh3Y1hTdmN3SzAzQTN2NFp4dXlaVmVzc0hzQmhiekxpWHAxb2tBNi02bFRrZDcyQjFGWk9hYVlLaHF3a190QlVIMHc4bWMtcm5NSW5DTDI5RkExVDFiMGl5cTUybWJBN2trREt4Ty1WUFl4T1JuSy1oaDBIU0tjQ3oyZ0pFNWFPckRkdDdOTVAzb0dzbUhhRENnY08tZ2RiWGZoUkhCdElHWDlkaExjVV8xeFJ5SmVpQVBaZFMwZzQzZ1lYWHNveHJmODYtbFczcFh4Z2VONlVDRlcxOHhoc3hGZG8yd2NrdTc5SGRaWWc4X0hGTXNPa2dWT21HUUxHNDEx?oc=5"
],
"static_urls": [
"https://www.gov.tw/",
"https://www.post.gov.tw/",
"https://www.ntu.edu.tw/",
"https://www.cathaybk.com.tw/",
"https://www.thsrc.com.tw/",
"https://tw.yahoo.com/",
"https://www.momoshop.com.tw/",
"https://www.pchome.com.tw/",
"https://www.dcard.tw/"
]
}
}
}

View File

@@ -8,10 +8,39 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.bbc.co.uk/",
"https://www.bbc.com/news/articles/c759z9w7z3yo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/clyp5rr0lm6o?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/cz72eye5zzeo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/c893xj41zwdo?at_medium=RSS&at_campaign=rss",
"https://www.nhs.uk/",
"https://www.bbc.com/news/articles/c202652vvnjo?at_medium=RSS&at_campaign=rss",
"https://www.ebay.co.uk/",
"https://www.postoffice.co.uk/",
"https://www.bbc.com/news/articles/cdjpdzvzy41o?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/ce8pypvjx1ko?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/cy82p2x86qzo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/clype7ededzo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/sport/rugby-union/articles/ckgpn3pdzr7o?at_medium=RSS&at_campaign=rss",
"https://www.ox.ac.uk/",
"https://www.bbc.com/sport/football/articles/cjep34l5qd7o?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/cy82x9wve2xo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.co.uk/sounds/play/p0njf7kr?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/sport/tennis/articles/cx21klez7ppo?at_medium=RSS&at_campaign=rss",
"https://www.gov.uk/",
"https://www.barclays.co.uk/",
"https://www.amazon.co.uk/",
"https://www.theguardian.com/uk"
"https://www.nationalrail.co.uk/",
"https://www.bbc.com/news/articles/c707k90lplno?at_medium=RSS&at_campaign=rss"
],
"static_urls": [
"https://www.gov.uk/",
"https://www.nhs.uk/",
"https://www.ox.ac.uk/",
"https://www.barclays.co.uk/",
"https://www.postoffice.co.uk/",
"https://www.nationalrail.co.uk/",
"https://www.amazon.co.uk/",
"https://www.ebay.co.uk/"
]
}
}
}

View File

@@ -8,13 +8,39 @@
},
"trust_module": {
"white_urls": [
"https://www.bbc.co.uk/",
"https://www.gov.uk/",
"https://www.bbc.com/news/articles/cdjpdzvzy41o?at_medium=RSS&at_campaign=rss",
"https://www.postoffice.co.uk/",
"https://www.bbc.com/news/articles/c759z9w7z3yo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/clype7ededzo?at_medium=RSS&at_campaign=rss",
"https://www.nationalrail.co.uk/",
"https://www.bbc.com/news/articles/clyp5rr0lm6o?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/sport/rugby-union/articles/ckgpn3pdzr7o?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/cy82p2x86qzo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/sport/tennis/articles/cx21klez7ppo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/c893xj41zwdo?at_medium=RSS&at_campaign=rss",
"https://www.ebay.co.uk/",
"https://www.amazon.co.uk/",
"https://www.theguardian.com/uk",
"https://www.barclays.co.uk/",
"https://www.bbc.com/news/articles/c707k90lplno?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/ce8pypvjx1ko?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/sport/football/articles/cjep34l5qd7o?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/cy82x9wve2xo?at_medium=RSS&at_campaign=rss",
"https://www.bbc.com/news/articles/c202652vvnjo?at_medium=RSS&at_campaign=rss",
"https://www.gov.uk/",
"https://www.nhs.uk/",
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.bbc.com/news/articles/cz72eye5zzeo?at_medium=RSS&at_campaign=rss",
"https://www.ox.ac.uk/",
"https://www.bbc.co.uk/sounds/play/p0njf7kr?at_medium=RSS&at_campaign=rss"
],
"static_urls": [
"https://www.gov.uk/",
"https://www.nhs.uk/",
"https://www.ox.ac.uk/",
"https://www.barclays.co.uk/",
"https://www.postoffice.co.uk/",
"https://www.nationalrail.co.uk/",
"https://www.amazon.co.uk/",
"https://www.ebay.co.uk/"
]
}
}
}

View File

@@ -8,13 +8,43 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.yahoo.com/",
"https://www.target.com/",
"https://www.npr.org/",
"https://www.weather.com/",
"https://www.irs.gov/",
"https://www.harvard.edu/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cdc.gov/",
"https://www.amazon.com/",
"https://www.cdc.gov/"
"https://www.chase.com/",
"https://www.usa.gov/",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.bankofamerica.com/",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.target.com/",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.usps.com/",
"https://www.walmart.com/",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cdc.gov/",
"https://www.harvard.edu/",
"https://www.chase.com/",
"https://www.bankofamerica.com/",
"https://www.amazon.com/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.usps.com/"
]
}
}

View File

@@ -8,14 +8,43 @@
},
"trust_module": {
"white_urls": [
"https://en.wikipedia.org/wiki/Special:Random",
"https://www.yahoo.com/",
"https://www.usa.gov/",
"https://www.target.com/",
"https://www.npr.org/",
"https://www.weather.com/",
"https://www.bankofamerica.com/",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.amazon.com/",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cdc.gov/",
"https://www.mercurynews.com/"
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.chase.com/",
"https://www.walmart.com/",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.harvard.edu/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.irs.gov/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.usps.com/"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cdc.gov/",
"https://www.harvard.edu/",
"https://www.chase.com/",
"https://www.bankofamerica.com/",
"https://www.amazon.com/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.usps.com/"
]
}
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "United States - Florida (Miami)",
"google_module": {
"base_lat": 25.7617,
"base_lon": -80.1918,
"lang_params": "hl=en-US&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.amazon.com/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.irs.gov/",
"https://www.zillow.com/",
"https://www.indeed.com/",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.walmart.com/",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.target.com/",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.usa.gov/",
"https://www.homedepot.com/",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.weather.gov/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.chase.com/"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.weather.gov/",
"https://www.chase.com/",
"https://www.indeed.com/",
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.homedepot.com/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "United States - Georgia (Atlanta)",
"google_module": {
"base_lat": 33.749,
"base_lon": -84.388,
"lang_params": "hl=en-US&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.weather.gov/",
"https://www.amazon.com/",
"https://www.homedepot.com/",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.usa.gov/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.zillow.com/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.irs.gov/",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.chase.com/",
"https://www.indeed.com/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.weather.gov/",
"https://www.chase.com/",
"https://www.indeed.com/",
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.homedepot.com/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "United States - Iowa (Council Bluffs)",
"google_module": {
"base_lat": 41.2619,
"base_lon": -95.8608,
"lang_params": "hl=en-US&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.indeed.com/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.usa.gov/",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.weather.gov/",
"https://www.irs.gov/",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.chase.com/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.homedepot.com/",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.weather.gov/",
"https://www.chase.com/",
"https://www.indeed.com/",
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.homedepot.com/"
]
}
}

View File

@@ -1,5 +1,50 @@
{
"region_name": "United States - Warrenville",
"google_module": { "base_lat": 41.8164, "base_lon": -88.1748, "lang_params": "hl=en&gl=US", "valid_url_suffix": "com" },
"trust_module": { "white_urls": [ "https://en.wikipedia.org/wiki/Special:Random", "https://www.yahoo.com/", "https://www.target.com/", "https://www.npr.org/", "https://www.weather.com/", "https://www.amazon.com/", "https://www.cdc.gov/" ] }
}
"google_module": {
"base_lat": 41.8164,
"base_lon": -88.1748,
"lang_params": "hl=en&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.amazon.com/",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.usps.com/",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.harvard.edu/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.usa.gov/",
"https://www.chase.com/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cdc.gov/",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.walmart.com/",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.target.com/",
"https://www.irs.gov/",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.bankofamerica.com/"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cdc.gov/",
"https://www.harvard.edu/",
"https://www.chase.com/",
"https://www.bankofamerica.com/",
"https://www.amazon.com/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.usps.com/"
]
}
}

View File

@@ -1,5 +1,50 @@
{
"region_name": "United States - Charlotte",
"google_module": { "base_lat": 35.2271, "base_lon": -80.8431, "lang_params": "hl=en&gl=US", "valid_url_suffix": "com" },
"trust_module": { "white_urls": [ "https://en.wikipedia.org/wiki/Special:Random", "https://www.yahoo.com/", "https://www.target.com/", "https://www.npr.org/", "https://www.weather.com/", "https://www.amazon.com/", "https://www.cdc.gov/" ] }
}
"google_module": {
"base_lat": 35.2271,
"base_lon": -80.8431,
"lang_params": "hl=en&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.harvard.edu/",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.irs.gov/",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.bankofamerica.com/",
"https://www.usps.com/",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cdc.gov/",
"https://www.walmart.com/",
"https://www.amazon.com/",
"https://www.chase.com/",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.target.com/",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.usa.gov/"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cdc.gov/",
"https://www.harvard.edu/",
"https://www.chase.com/",
"https://www.bankofamerica.com/",
"https://www.amazon.com/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.usps.com/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "United States - New Jersey (Newark)",
"google_module": {
"base_lat": 40.7357,
"base_lon": -74.1724,
"lang_params": "hl=en-US&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.usa.gov/",
"https://www.weather.gov/",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.chase.com/",
"https://www.walmart.com/",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.indeed.com/",
"https://www.irs.gov/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.zillow.com/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.homedepot.com/"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.weather.gov/",
"https://www.chase.com/",
"https://www.indeed.com/",
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.homedepot.com/"
]
}
}

View File

@@ -1,5 +1,50 @@
{
"region_name": "United States - Las Vegas",
"google_module": { "base_lat": 36.1699, "base_lon": -115.1398, "lang_params": "hl=en&gl=US", "valid_url_suffix": "com" },
"trust_module": { "white_urls": [ "https://en.wikipedia.org/wiki/Special:Random", "https://www.yahoo.com/", "https://www.target.com/", "https://www.npr.org/", "https://www.weather.com/", "https://www.amazon.com/", "https://www.cdc.gov/" ] }
}
"google_module": {
"base_lat": 36.1699,
"base_lon": -115.1398,
"lang_params": "hl=en&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.usa.gov/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.walmart.com/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cdc.gov/",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.irs.gov/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.bankofamerica.com/",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.chase.com/",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.harvard.edu/",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.usps.com/",
"https://www.amazon.com/",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.target.com/",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cdc.gov/",
"https://www.harvard.edu/",
"https://www.chase.com/",
"https://www.bankofamerica.com/",
"https://www.amazon.com/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.usps.com/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "United States - New York",
"google_module": {
"base_lat": 40.7128,
"base_lon": -74.006,
"lang_params": "hl=en-US&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.chase.com/",
"https://www.target.com/",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.walmart.com/",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.amazon.com/",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.usa.gov/",
"https://www.weather.gov/",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.indeed.com/",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.zillow.com/",
"https://www.irs.gov/",
"https://www.homedepot.com/"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.weather.gov/",
"https://www.chase.com/",
"https://www.indeed.com/",
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.homedepot.com/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "United States - Ohio (Columbus)",
"google_module": {
"base_lat": 39.9612,
"base_lon": -83.0007,
"lang_params": "hl=en-US&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.walmart.com/",
"https://www.usa.gov/",
"https://www.weather.gov/",
"https://www.chase.com/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.target.com/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.homedepot.com/",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.amazon.com/",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.indeed.com/",
"https://www.irs.gov/",
"https://www.zillow.com/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.weather.gov/",
"https://www.chase.com/",
"https://www.indeed.com/",
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.homedepot.com/"
]
}
}

View File

@@ -1,5 +1,50 @@
{
"region_name": "United States - Bend",
"google_module": { "base_lat": 44.0582, "base_lon": -121.3153, "lang_params": "hl=en&gl=US", "valid_url_suffix": "com" },
"trust_module": { "white_urls": [ "https://en.wikipedia.org/wiki/Special:Random", "https://www.yahoo.com/", "https://www.target.com/", "https://www.npr.org/", "https://www.weather.com/", "https://www.amazon.com/", "https://www.cdc.gov/" ] }
}
"google_module": {
"base_lat": 44.0582,
"base_lon": -121.3153,
"lang_params": "hl=en&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.chase.com/",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.irs.gov/",
"https://www.walmart.com/",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.usa.gov/",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.harvard.edu/",
"https://www.usps.com/",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cdc.gov/",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.bankofamerica.com/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.amazon.com/",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.target.com/",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cdc.gov/",
"https://www.harvard.edu/",
"https://www.chase.com/",
"https://www.bankofamerica.com/",
"https://www.amazon.com/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.usps.com/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "United States - Dallas",
"google_module": {
"base_lat": 32.7767,
"base_lon": -96.797,
"lang_params": "hl=en&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.dallasnews.com/",
"https://www.walmart.com/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.target.com/",
"https://www.foxnews.com/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.texas.gov/",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.chase.com/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.nytimes.com/",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.amazon.com/",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.bankofamerica.com/"
],
"static_urls": [
"https://www.texas.gov/",
"https://www.dallasnews.com/",
"https://www.cnn.com/",
"https://www.foxnews.com/",
"https://www.nytimes.com/",
"https://www.amazon.com/",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.chase.com/",
"https://www.bankofamerica.com/"
]
}
}

View File

@@ -0,0 +1,40 @@
{
"region_name": "USA - Houston",
"google_module": {
"base_lat": 29.7604,
"base_lon": -95.3698,
"lang_params": "hl=en-US&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.houstontx.gov/",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.rice.edu/",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.mdanderson.org/",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.houstonchronicle.com/",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.nasa.gov/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html"
],
"static_urls": [
"https://www.houstontx.gov/",
"https://www.houstonchronicle.com/",
"https://www.rice.edu/",
"https://www.mdanderson.org/",
"https://www.nasa.gov/"
]
}
}

View File

@@ -1,5 +1,50 @@
{
"region_name": "United States - Salt Lake City",
"google_module": { "base_lat": 40.7608, "base_lon": -111.8910, "lang_params": "hl=en&gl=US", "valid_url_suffix": "com" },
"trust_module": { "white_urls": [ "https://en.wikipedia.org/wiki/Special:Random", "https://www.yahoo.com/", "https://www.target.com/", "https://www.npr.org/", "https://www.weather.com/", "https://www.amazon.com/", "https://www.cdc.gov/" ] }
}
"google_module": {
"base_lat": 40.7608,
"base_lon": -111.891,
"lang_params": "hl=en&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.usps.com/",
"https://www.chase.com/",
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.harvard.edu/",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.bankofamerica.com/",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cdc.gov/",
"https://www.amazon.com/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cdc.gov/",
"https://www.harvard.edu/",
"https://www.chase.com/",
"https://www.bankofamerica.com/",
"https://www.amazon.com/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.usps.com/"
]
}
}

View File

@@ -0,0 +1,50 @@
{
"region_name": "United States - Virginia (Ashburn)",
"google_module": {
"base_lat": 39.0438,
"base_lon": -77.4874,
"lang_params": "hl=en-US&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.chase.com/",
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.homedepot.com/",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.irs.gov/",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.indeed.com/",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.weather.gov/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.usa.gov/",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.target.com/",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.amazon.com/"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.weather.gov/",
"https://www.chase.com/",
"https://www.indeed.com/",
"https://www.zillow.com/",
"https://www.walmart.com/",
"https://www.target.com/",
"https://www.amazon.com/",
"https://www.homedepot.com/"
]
}
}

View File

@@ -1,5 +1,50 @@
{
"region_name": "United States - Seattle",
"google_module": { "base_lat": 47.6062, "base_lon": -122.3321, "lang_params": "hl=en&gl=US", "valid_url_suffix": "com" },
"trust_module": { "white_urls": [ "https://en.wikipedia.org/wiki/Special:Random", "https://www.yahoo.com/", "https://www.target.com/", "https://www.npr.org/", "https://www.weather.com/", "https://www.amazon.com/", "https://www.cdc.gov/" ] }
}
"google_module": {
"base_lat": 47.6062,
"base_lon": -122.3321,
"lang_params": "hl=en&gl=US",
"valid_url_suffix": "com"
},
"trust_module": {
"white_urls": [
"https://www.cnn.com/2023/04/17/entertainment/jamie-foxx-remains-hospitalized/index.html",
"https://www.harvard.edu/",
"https://www.cdc.gov/",
"https://www.cnn.com/europe/live-news/russia-ukraine-war-news-04-18-23/index.html",
"https://www.target.com/",
"https://www.cnn.com/cnn-underscored/fashion/mens-spring-fashion-style-guide?iid=CNNUnderscoredHPcontainer",
"https://www.amazon.com/",
"https://www.cnn.com/videos/travel/2023/04/18/century-old-shipwrecks-lake-superior-discovery-contd-orig-zt.cnn",
"https://www.cnn.com/cnn-underscored/travel/amazon-travel-products?iid=CNNUnderscoredHPcontainer",
"https://www.cnn.com/2023/04/18/politics/fulton-county-trump-fake-electors/index.html",
"https://www.cnn.com/2023/04/18/us/kansas-city-ralph-yarl-shooting-tuesday/index.html",
"https://www.cnn.com/audio/podcasts/the-assignment/episodes/42a2f0e2-066a-4675-82ff-afe2016a0bb5",
"https://www.bankofamerica.com/",
"https://www.irs.gov/",
"https://www.cnn.com/2023/04/18/sport/damar-hamlin-cleared-to-train-nfl-spt-intl/index.html",
"https://www.cnn.com/2023/04/18/politics/mccarthy-biden-debt-ceiling/index.html",
"https://www.cnn.com/videos/travel/2023/03/17/pilot-lands-on-dubai-helipad-cprog-orig-aw-ao.cnn",
"https://www.cnn.com/videos/tech/2023/04/18/apple-store-mumbai-india-ceo-tim-cook-vedika-sud-ovn-biz-ldn-vpx.cnn",
"https://www.cnn.com/business/live-news/fox-news-dominion-trial-04-18-23/h_8d51e3ae2714edaa0dace837305d03b8",
"https://www.usa.gov/",
"https://www.usps.com/",
"https://www.chase.com/",
"https://www.walmart.com/",
"https://www.cnn.com/2023/04/17/business/mcdonalds-burgers/index.html",
"https://www.cnn.com/2023/04/18/health/teen-misuse-adhd-meds-wellness/index.html"
],
"static_urls": [
"https://www.usa.gov/",
"https://www.irs.gov/",
"https://www.cdc.gov/",
"https://www.harvard.edu/",
"https://www.chase.com/",
"https://www.bankofamerica.com/",
"https://www.amazon.com/",
"https://www.target.com/",
"https://www.walmart.com/",
"https://www.usps.com/"
]
}
}

View File

@@ -8,13 +8,37 @@
},
"trust_module": {
"white_urls": [
"https://vi.wikipedia.org/wiki/Đặc_biệt:Ngẫu_nhiên",
"https://vnu.edu.vn/",
"https://vnexpress.net/phat-hien-su-that-ve-ba-dua-con-qua-anh-vo-gui-nguoi-la-5070373.html",
"https://chinhphu.vn/",
"https://vnexpress.net/",
"https://tuoitre.vn/",
"https://vtv.vn/",
"https://shopee.vn/",
"https://tiki.vn/"
"https://vnexpress.net/iran-tuyen-bo-du-an-tu-do-cua-my-da-that-bai-5070469.html",
"https://dichvucong.gov.vn/",
"https://vnexpress.net/cuoc-song-binh-yen-cua-nghe-si-duc-khue-5069086.html",
"https://vnexpress.net/sut-lun-tai-thu-do-mexico-nhin-tu-khong-gian-5070546.html",
"https://vnexpress.net/co-hoi-kiem-tien-o-dau-trong-quy-2-5070566.html",
"https://vnexpress.net/sao-dep-nhat-trung-quoc-gay-sot-voi-phim-chu-de-ngoai-tinh-5070451.html",
"https://vnexpress.net/cong-chua-tay-ban-nha-lai-tiem-kich-f-5-5070438.html",
"https://tiki.vn/",
"https://vnexpress.net/khoet-chop-co-tu-cung-ngan-ung-thu-5070403.html",
"https://vnexpress.net/tvs-ronin-moto-an-do-gia-73-trieu-dong-5070422.html",
"https://vnexpress.net/khoanh-khac-may-bay-lao-vao-chung-cu-o-brazil-5070413.html",
"https://vnexpress.net/",
"https://vnexpress.net/hang-loat-video-bao-luc-hoc-duong-gay-rung-dong-nhat-ban-5069717.html",
"https://vnexpress.net/hau-ve-phan-luoi-nha-va-nhan-the-do-khien-thai-lan-thua-o-u17-chau-a-5070517.html",
"https://vnexpress.net/thu-do-dau-tien-tren-the-gioi-cam-quang-cao-thit-de-bao-ve-khi-hau-5070425.html",
"https://vnexpress.net/viet-cho-thieu-nhi-so-nhat-la-sa-da-dao-ly-5070345.html",
"https://vnexpress.net/viet-nam-dua-radar-uav-va-khi-tai-hien-dai-toi-trien-lam-quoc-phong-tho-nhi-ky-5070411.html",
"https://www.vietcombank.com.vn/"
],
"static_urls": [
"https://chinhphu.vn/",
"https://dichvucong.gov.vn/",
"https://vnu.edu.vn/",
"https://www.vietcombank.com.vn/",
"https://shopee.vn/",
"https://tiki.vn/",
"https://vnexpress.net/"
]
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,10 @@ if [ "$EUID" -ne 0 ]; then
exit 1
fi
# 🟢 [防劫持沙盒] 引入司令部专属随机安全工作区
SECURE_TMP=$(mktemp -d /tmp/ips_master_install.XXXXXX)
trap 'rm -rf "$SECURE_TMP"' EXIT HUP INT QUIT TERM
# 你的 GitHub 仓库 Raw 数据直链前缀
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
# 临时改为开发地址用于测试
@@ -21,10 +25,11 @@ REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
# [核心: 动态提取 Master 专属版本锚点 (KV 解析法)]
# 通过 grep 定位 MASTER_VERSION 行,再通过 cut 提取等号右侧的值
TARGET_VERSION=$(curl -s -m 3 "${REPO_RAW_URL}/version.txt" | grep "^MASTER_VERSION=" | cut -d'=' -f2 | tr -d '[:space:]')
# [修复] 增加 -L 与双栈容灾 (-4),解决纯 V6 或 V6 优先机器连接 GitHub Raw 易超时的问题
TARGET_VERSION=$( (curl -sL -m 5 "${REPO_RAW_URL}/version.txt" || curl -4 -sL -m 5 "${REPO_RAW_URL}/version.txt") 2>/dev/null | grep "^MASTER_VERSION=" | cut -d'=' -f2 | tr -d '[:space:]')
# 🛡️ 兜底防线:如果网络波动拉取失败,启用内置的安全兜底版本
TARGET_VERSION=${TARGET_VERSION:-"3.5.0"}
# 🛡️ 兜底防线:如果网络波动拉取失败,启用内置的最新兜底版本
TARGET_VERSION=${TARGET_VERSION:-"4.0.7"}
MASTER_DIR="/opt/ip_sentinel_master"
DB_FILE="${MASTER_DIR}/sentinel.db"
@@ -67,9 +72,9 @@ else
if [ "$ACTION_CHOICE" == "2" ]; then
echo -e "\n⏳ 正在拉取卸载程序..."
curl -sL "${REPO_RAW_URL}/master/uninstall_master.sh" -o "/tmp/uninstall_master.sh"
chmod +x "/tmp/uninstall_master.sh"
bash "/tmp/uninstall_master.sh"
curl -sL "${REPO_RAW_URL}/master/uninstall_master.sh" -o "${SECURE_TMP}/uninstall_master.sh"
chmod +x "${SECURE_TMP}/uninstall_master.sh"
bash "${SECURE_TMP}/uninstall_master.sh"
rm -f "/tmp/uninstall_master.sh"
exit 0
fi
@@ -103,13 +108,8 @@ else
fi
fi
# ================== [v3.2.2 优化: 安装前环境纯净度清理与数据保护] ==================
echo -e "\n⏳ 正在清理旧版 Master 守护进程..."
# [新增] 优雅停止 Systemd 服务,防止代码替换时引发无限复活风暴
if command -v systemctl >/dev/null 2>&1; then
systemctl stop ip-sentinel-master.service >/dev/null 2>&1 || true
fi
pkill -9 -f "tg_master.sh" >/dev/null 2>&1 || true
# ================== [v3.2.2 优化: 数据纯净度清理与保护] ==================
echo -e "\n⏳ 正在验证本地环境与数据..."
if [ "$UPGRADE_MODE" == "true" ]; then
if [ "$KEEP_DB" == "false" ]; then
@@ -118,19 +118,17 @@ if [ "$UPGRADE_MODE" == "true" ]; then
else
echo -e "📦 历史节点数据库 (SQLite) 已绝密保留。"
fi
# 删除旧的核心脚本,准备拉取新的
rm -f "${MASTER_DIR}/tg_master.sh" 2>/dev/null
# [防砖修复] 移除过早的旧进程抹杀与脚本物理删除,防止拉取失败导致司令部变砖失联
else
# 焦土政策:如果不是升级模式,直接扬了整个司令部目录
rm -rf "$MASTER_DIR" 2>/dev/null
fi
echo -e "\033[32m✅ 旧进程已肃清!\033[0m"
# =======================================================================
# 1. 依赖检查与智能安装 (v3.6.0 兼容性与优雅性升级)
echo -e "\n[1/4] 正在探测核心依赖 (curl, jq, sqlite3, crontab, pgrep)..."
echo -e "\n[1/4] 正在探测核心依赖 (curl, jq, sqlite3, crontab, pgrep, openssl)..."
REQUIRED_CMDS=("curl" "jq" "sqlite3" "crontab" "pgrep")
REQUIRED_CMDS=("curl" "jq" "sqlite3" "crontab" "pgrep" "openssl")
MISSING_CMDS=()
# 基础探测:预检查缺失的命令
@@ -147,7 +145,7 @@ if [ ${#MISSING_CMDS[@]} -gt 0 ]; then
if command -v apt-get >/dev/null 2>&1; then
apt-get update -y >/dev/null 2>&1
# [v3.6.3 抽脂级优化] 注入 --no-install-recommends 拒绝捆绑销售
apt-get install -y --no-install-recommends curl jq sqlite3 cron procps >/dev/null 2>&1
apt-get install -y --no-install-recommends curl jq sqlite3 cron procps openssl >/dev/null 2>&1
systemctl enable cron >/dev/null 2>&1 && systemctl start cron >/dev/null 2>&1
elif command -v yum >/dev/null 2>&1 || command -v dnf >/dev/null 2>&1; then
PKG_MGR="yum"
@@ -157,24 +155,26 @@ if [ ${#MISSING_CMDS[@]} -gt 0 ]; then
# [v3.6.3 抽脂级优化] 强行关闭 DNF 的弱依赖拉取
OPT_ARGS="--setopt=install_weak_deps=False"
fi
$PKG_MGR install -y $OPT_ARGS curl jq sqlite cronie procps-ng >/dev/null 2>&1
$PKG_MGR install -y $OPT_ARGS curl jq sqlite cronie procps-ng openssl >/dev/null 2>&1
systemctl enable crond >/dev/null 2>&1 && systemctl start crond >/dev/null 2>&1
elif command -v apk >/dev/null 2>&1; then
echo "Alpine 探测到系统类型为 Alpine Linux正在执行轻量级安装..."
apk add --no-cache curl jq sqlite dcron procps bash >/dev/null 2>&1
# [修复] 优先尝试 cronie若失败则回退至系统内置 cron彻底避免单点依赖拖垮全局
apk add --no-cache curl jq sqlite cronie procps bash openssl || apk add --no-cache curl jq sqlite procps bash openssl
mkdir -p /var/spool/cron/crontabs
rc-update add crond default >/dev/null 2>&1
service crond start >/dev/null 2>&1
elif command -v pacman >/dev/null 2>&1; then
pacman -Sy --noconfirm curl jq sqlite cronie procps-ng >/dev/null 2>&1
pacman -Sy --noconfirm curl jq sqlite cronie procps-ng openssl >/dev/null 2>&1
mkdir -p /root/.cache/crontab 2>/dev/null
systemctl enable cronie >/dev/null 2>&1 && systemctl start cronie >/dev/null 2>&1
else
echo -e "\033[31m❌ 自动安装失败:系统未知的包管理器。\033[0m"
echo -e "\033[33m⚠ 请手动执行以下安装命令后重新运行本脚本:\033[0m"
echo -e " Debian/Ubuntu: \033[36mapt-get update && apt-get install -y --no-install-recommends curl jq sqlite3 cron procps\033[0m"
echo -e " CentOS/RHEL: \033[36myum install -y curl jq sqlite cronie procps-ng\033[0m"
echo -e " Alpine Linux: \033[36mapk add --no-cache curl jq sqlite dcron procps bash\033[0m"
echo -e " Debian/Ubuntu: \033[36mapt-get update && apt-get install -y --no-install-recommends curl jq sqlite3 cron procps openssl\033[0m"
echo -e " CentOS/RHEL: \033[36myum install -y curl jq sqlite cronie procps-ng openssl\033[0m"
echo -e " Alpine Linux: \033[36mapk add --no-cache curl jq sqlite cronie procps bash openssl\033[0m"
echo -e " Arch Linux: \033[36mpacman -Sy curl jq sqlite cronie procps-ng openssl\033[0m"
exit 1
fi
@@ -265,6 +265,17 @@ CREATE TABLE IF NOT EXISTS nodes (
enable_ota TEXT DEFAULT 'false',
PRIMARY KEY(chat_id, node_name)
);
-- [v4.0.0 新增, v4.0.2 扩容] 核心情报表:记录历史 IP 质量数据,用于绘制趋势图
CREATE TABLE IF NOT EXISTS ip_trend_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
node_name TEXT,
check_time DATETIME DEFAULT CURRENT_TIMESTAMP,
scam_score INTEGER,
goog_status TEXT,
nf_status TEXT,
gpt_status TEXT
);
EOF
echo "✅ 数据库创建成功: $DB_FILE"
@@ -273,10 +284,31 @@ chmod 600 "${MASTER_DIR}/master.conf"
chmod 600 "$DB_FILE"
# ====================================================================
# 4. 拉取核心调度代码并运行
echo -e "\n[4/4] 部署 TG 调度守护进程..."
# [修改] 剥离了写死的网址,改用顶部的 ${REPO_RAW_URL} 变量,确保与卸载脚本的数据源同源
curl -sL "${REPO_RAW_URL}/master/tg_master.sh" -o "${MASTER_DIR}/tg_master.sh"
# 4. 拉取核心调度代码并执行原子化交接
echo -e "\n[4/4] 正在拉取新版司令部核心引擎..."
TMP_MASTER="${SECURE_TMP}/tg_master.sh"
curl -sL "${REPO_RAW_URL}/master/tg_master.sh" -o "$TMP_MASTER"
# 🛡️ 防砖终极校验
if [ ! -s "$TMP_MASTER" ]; then
echo -e "\033[31m❌ 致命错误:中枢核心代码拉取失败!网络阻断或 GitHub Raw 异常。\033[0m"
echo "🛡️ 防砖机制触发:已中止覆盖,旧版司令部仍在安全运行中。"
rm -f "$TMP_MASTER"
exit 1
fi
# 🟢 [原子化交接核心]: 校验完美通过,新代码已备妥!
# 以雷霆手段抹杀旧版调度进程,杜绝文件覆写时的并发错乱
echo "⏳ 新引擎校验通过,正在抹杀旧版守护进程..."
if command -v systemctl >/dev/null 2>&1; then
systemctl kill --signal=SIGKILL ip-sentinel-master.service >/dev/null 2>&1 || true
systemctl stop ip-sentinel-master.service >/dev/null 2>&1 || true
fi
pkill -9 -f "tg_master.sh" >/dev/null 2>&1 || true
# 执行物理替换
mv "$TMP_MASTER" "${MASTER_DIR}/tg_master.sh"
chmod +x "${MASTER_DIR}/tg_master.sh"
if command -v systemctl >/dev/null 2>&1; then
@@ -307,16 +339,13 @@ EOF
systemctl enable --now ip-sentinel-master.service
systemctl restart ip-sentinel-master.service
# 清理可能残留的历史 Cron
crontab -l 2>/dev/null | grep -v "tg_master.sh" > /tmp/cron_master || true
[ -f /tmp/cron_master ] && crontab /tmp/cron_master 2>/dev/null
rm -f /tmp/cron_master
# 清理可能残留的历史 Cron (无落地内存流防劫持)
crontab -l 2>/dev/null | grep -v "tg_master.sh" | crontab - >/dev/null 2>&1 || true
else
echo "💡 未检测到 Systemd回退到 Cron 看门狗调度模式..."
crontab -l 2>/dev/null | grep -v "tg_master.sh" > /tmp/cron_master || true
echo "* * * * * pgrep -f tg_master.sh >/dev/null || nohup bash ${MASTER_DIR}/tg_master.sh >/dev/null 2>&1 &" >> /tmp/cron_master
[ -f /tmp/cron_master ] && crontab /tmp/cron_master 2>/dev/null
rm -f /tmp/cron_master
crontab -l 2>/dev/null | grep -v "tg_master.sh" > "${SECURE_TMP}/cron_master" || true
echo "* * * * * pgrep -f tg_master.sh >/dev/null || nohup bash ${MASTER_DIR}/tg_master.sh >/dev/null 2>&1 &" >> "${SECURE_TMP}/cron_master"
[ -f "${SECURE_TMP}/cron_master" ] && crontab "${SECURE_TMP}/cron_master" 2>/dev/null
pgrep -f tg_master.sh >/dev/null || { nohup bash "${MASTER_DIR}/tg_master.sh" >/dev/null 2>&1 & disown 2>/dev/null; }
fi
@@ -345,12 +374,21 @@ echo "========================================================"
# =================================================================
# ================== [v3.1.2 新增: 玻璃房透明装机统计] ==================
echo -e "\n📡 正在向开源社区汇报装机量 (完全匿名不收集IP)..."
MASTER_COUNT=$(curl -s -m 3 "https://ip-sentinel-count.samanthaestime296.workers.dev/ping/master" || echo "")
# [修复] 仅在全新部署时触发统计,司令部热重载时绝对不触发
if [ "$UPGRADE_MODE" == "false" ]; then
echo -e "\n📡 正在向开源社区汇报装机量 (完全匿名不收集IP)..."
MASTER_COUNT=$(curl -s -m 3 "https://ip-sentinel-count.samanthaestime296.workers.dev/ping/master" || echo "")
if [ -n "$MASTER_COUNT" ] && [[ "$MASTER_COUNT" =~ ^[0-9]+$ ]]; then
echo -e "\033[32m✅ 感谢您成为全球第 ${MASTER_COUNT} 名 IP-Sentinel 指挥官\033[0m"
else
echo -e "\033[32m✅ 感谢您建立 IP-Sentinel 司令部\033[0m"
if [ -n "$MASTER_COUNT" ] && [[ "$MASTER_COUNT" =~ ^[0-9]+$ ]]; then
echo -e "\033[32m✅ 感谢您成为全球第 ${MASTER_COUNT} 名 IP-Sentinel 中枢管理者\033[0m"
else
echo -e "\033[32m✅ 感谢您部署 IP-Sentinel 控制中枢\033[0m"
fi
fi
echo -e "\n"
# ================== [新增: 安装成功高光时刻 Star 引导] ==================
echo -e "\n========================================================"
echo -e "⭐ \033[33m开源不易如果 IP-Sentinel 极大简化了您的多节点管理,请赐予我们一枚星标!\033[0m"
echo -e "💡 \033[32m您的每一颗 Star 都是我们持续迭代架构、开发 Web 视窗化控制台的动力源泉。\033[0m"
echo -e "👉 \033[36m\033[4m\033]8;;https://github.com/hotyue/IP-Sentinel\033\\[点击此处直达 GitHub 仓库点亮 Star 🌟]\033]8;;\033\\\033[0m"
echo -e "========================================================\n"

View File

@@ -11,8 +11,7 @@ source "$CONF"
# [核心: 运行态版本继承与云通信地址]
REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
# 临时改为开发地址用于测试
# REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/v3.6.2-rc"
# MASTER_VERSION 已经在上方的 source "$CONF" 中被载入
# 如果本地极度陈旧没有该变量,才给定一个基础兜底值,避免变量为空导致崩溃
MASTER_VERSION=${MASTER_VERSION:-"3.5.0"}
@@ -21,6 +20,26 @@ OFFSET_FILE="${MASTER_DIR}/.tg_offset"
[[ -f $OFFSET_FILE ]] || echo "0" > $OFFSET_FILE
# --- 工具函数 ---
# ================== [v4.0.3 核心: 全球全能旗帜渲染引擎] ==================
get_flag() {
local region=$(echo "$1" | tr 'a-z' 'A-Z')
local base_cc="${region%%-*}" # 提取横杠前的主国家代码 (例如 US-TX 提取为 US)
local flag="🌐"
case "$base_cc" in
US) flag="🇺🇸" ;; JP) flag="🇯🇵" ;; HK) flag="🇭🇰" ;; TW) flag="🇹🇼" ;; SG) flag="🇸🇬" ;;
UK|GB) flag="🇬🇧" ;; DE) flag="🇩🇪" ;; FR) flag="🇫🇷" ;; NL) flag="🇳🇱" ;; CA) flag="🇨🇦" ;;
AU) flag="🇦🇺" ;; KR) flag="🇰🇷" ;; IN) flag="🇮🇳" ;; BR) flag="🇧🇷" ;; RU) flag="🇷🇺" ;;
CH) flag="🇨🇭" ;; SE) flag="🇸🇪" ;; NO) flag="🇳🇴" ;; DK) flag="🇩🇰" ;; FI) flag="🇫🇮" ;;
IT) flag="🇮🇹" ;; ES) flag="🇪🇸" ;; PT) flag="🇵🇹" ;; IE) flag="🇮🇪" ;; PL) flag="🇵🇱" ;;
AT) flag="🇦🇹" ;; BE) flag="🇧🇪" ;; TR) flag="🇹🇷" ;; ZA) flag="🇿🇦" ;; AE) flag="🇦🇪" ;;
MY) flag="🇲🇾" ;; ID) flag="🇮🇩" ;; VN) flag="🇻🇳" ;; TH) flag="🇹🇭" ;; PH) flag="🇵🇭" ;;
NZ) flag="🇳🇿" ;; AR) flag="🇦🇷" ;; CL) flag="🇨🇱" ;; MX) flag="🇲🇽" ;; IL) flag="🇮🇱" ;;
SA) flag="🇸🇦" ;; EG) flag="🇪🇬" ;; NG) flag="🇳🇬" ;; KE) flag="🇰🇪" ;; RO) flag="🇷🇴" ;;
BG) flag="🇧🇬" ;; CZ) flag="🇨🇿" ;; HU) flag="🇭🇺" ;; GR) flag="🇬🇷" ;; UA) flag="🇺🇦" ;;
esac
echo "$flag"
}
send_ui() {
curl -s --connect-timeout 5 -m 10 -X POST "https://api.telegram.org/bot${TG_TOKEN}/sendMessage" \
-H "Content-Type: application/json" \
@@ -83,6 +102,19 @@ db_exec "ALTER TABLE nodes ADD COLUMN enable_trust TEXT DEFAULT 'true';" 2>/dev/
db_exec "ALTER TABLE nodes ADD COLUMN enable_ota TEXT DEFAULT 'false';" 2>/dev/null
# ========================================================================
# ================== [v4.0.0/v4.0.2 核心: 增加 IP 质量趋势追踪表] ==================
db_exec "CREATE TABLE IF NOT EXISTS ip_trend_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
node_name TEXT,
check_time DATETIME DEFAULT CURRENT_TIMESTAMP,
scam_score INTEGER,
nf_status TEXT
);" 2>/dev/null
# [v4.0.2 热更新] 动态扩容 谷歌 与 ChatGPT 状态追踪字段
db_exec "ALTER TABLE ip_trend_log ADD COLUMN goog_status TEXT DEFAULT 'Unknown';" 2>/dev/null
db_exec "ALTER TABLE ip_trend_log ADD COLUMN gpt_status TEXT DEFAULT 'Unknown';" 2>/dev/null
# ========================================================================
# --- 核心轮询循环 ---
while true; do
OFFSET=$(cat $OFFSET_FILE)
@@ -97,6 +129,56 @@ while true; do
CHAT_ID=$(echo "$UPDATE" | jq -r '.message.chat.id // .callback_query.message.chat.id')
TEXT=$(echo "$UPDATE" | jq -r '.message.text // .callback_query.data')
# ================== [基础消息解析提取提前] ==================
# [致命 Bug 修复] 必须在 svq 入库判断前提取这俩变量,否则入库后无法重绘 UI
CB_ID=$(echo "$UPDATE" | jq -r '.callback_query.id // empty')
MSG_ID=$(echo "$UPDATE" | jq -r '.callback_query.message.message_id // empty')
# ================== [v4.0.2 核心: 态势感知按钮一键入库] ==================
if [[ "$TEXT" == "svq|"* ]]; then
# 格式: svq|NODE_NAME|SCORE|GOOG|NF|GPT
IFS='|' read -r MAGIC RAW_NODE_ID RAW_SCORE RAW_GOOG_ST RAW_NF_ST RAW_GPT_ST <<< "$TEXT"
CHAT_ID=$(echo "$CHAT_ID" | tr -cd '0-9-')
# 🛡️ 终极防御:彻底清洗,封死一切 SQL 注入通道
NODE_ID=$(echo "$RAW_NODE_ID" | tr -cd 'a-zA-Z0-9_.-')
SCORE=$(echo "$RAW_SCORE" | tr -cd '0-9')
GOOG_ST=$(echo "$RAW_GOOG_ST" | tr -d '"'\''\`\$\|&;<>\n\r')
NF_ST=$(echo "$RAW_NF_ST" | tr -d '"'\''\`\$\|&;<>\n\r')
GPT_ST=$(echo "$RAW_GPT_ST" | tr -d '"'\''\`\$\|&;<>\n\r')
if [ -n "$NODE_ID" ] && [ -n "$SCORE" ]; then
# 1. 写入 SQLite
db_exec "INSERT INTO ip_trend_log (node_name, scam_score, goog_status, nf_status, gpt_status) VALUES ('$NODE_ID', '$SCORE', '$GOOG_ST', '$NF_ST', '$GPT_ST');"
# [体验优化] 弹出顶部 Toast 气泡,提示入库成功
if [ -n "$CB_ID" ]; then
curl -s --connect-timeout 5 -m 10 -X POST "https://api.telegram.org/bot${TG_TOKEN}/answerCallbackQuery" \
-d "callback_query_id=${CB_ID}" \
-d "text=✅ 报告已成功录入趋势库!" \
-d "show_alert=false" > /dev/null
fi
# 2. 无损修改原消息:移除入库按钮展示绿勾状态,并保留返回控制台按钮 (体验优化)
if [ -n "$MSG_ID" ]; then
curl -s --connect-timeout 5 -m 10 -X POST "https://api.telegram.org/bot${TG_TOKEN}/editMessageReplyMarkup" \
-H "Content-Type: application/json" \
-d "{\"chat_id\":\"${CHAT_ID}\",\"message_id\":\"${MSG_ID}\",\"reply_markup\":{\"inline_keyboard\":[[{\"text\":\"✅ 此报告已存档\",\"callback_data\":\"ignore\"}],[{\"text\":\"⚙️ 调出该节点控制台\",\"callback_data\":\"manage:${NODE_ID}\"}]]}}" > /dev/null
fi
else
# [异常兜底] 弹出红色警告弹窗
if [ -n "$CB_ID" ]; then
curl -s --connect-timeout 5 -m 10 -X POST "https://api.telegram.org/bot${TG_TOKEN}/answerCallbackQuery" \
-d "callback_query_id=${CB_ID}" \
-d "text=❌ 数据解析失败,入库中止。" \
-d "show_alert=true" > /dev/null
fi
fi
continue
fi
# ======================================================================
REPLY_TO_TEXT=$(echo "$UPDATE" | jq -r '.message.reply_to_message.text // empty')
# ================== [v3.5.2 新增: 拦截别名修改的对话回复] ==================
@@ -116,10 +198,7 @@ while true; do
fi
# ================== [v3.0.1 新增: 消除转圈圈与获取消息ID] ==================
CB_ID=$(echo "$UPDATE" | jq -r '.callback_query.id // empty')
MSG_ID=$(echo "$UPDATE" | jq -r '.callback_query.message.message_id // empty')
# 告诉 TG 官方“指令已收到”,立刻消除按钮上的加载圈圈
# 告诉 TG 官方“指令已收到”,立刻消除按钮上的加载圈圈 (对其他常规按钮生效)
if [ -n "$CB_ID" ]; then
curl -s --connect-timeout 5 -m 10 -X POST "https://api.telegram.org/bot${TG_TOKEN}/answerCallbackQuery" -d "callback_query_id=${CB_ID}" > /dev/null
fi
@@ -179,13 +258,7 @@ while true; do
BTNS="["
while IFS='|' read -r REGION_NAME NODE_COUNT; do
[ -z "$REGION_NAME" ] && REGION_NAME="UNKNOWN"
FLAG="🌐"
case "$REGION_NAME" in
"US") FLAG="🇺🇸" ;; "JP") FLAG="🇯🇵" ;; "HK") FLAG="🇭🇰" ;;
"SG") FLAG="🇸🇬" ;; "UK"|"GB") FLAG="🇬🇧" ;; "DE") FLAG="🇩🇪" ;; "FR") FLAG="🇫🇷" ;;
"CA") FLAG="🇨🇦" ;; "AU") FLAG="🇦🇺" ;; "KR") FLAG="🇰🇷" ;; "NL") FLAG="🇳🇱" ;;
"BR") FLAG="🇧🇷" ;; "IN") FLAG="🇮🇳" ;; "TW") FLAG="🇹🇼" ;;
esac
FLAG=$(get_flag "$REGION_NAME")
BTNS="$BTNS[{\"text\":\"$FLAG $REGION_NAME ($NODE_COUNT 台)\",\"callback_data\":\"region:$REGION_NAME\"}],"
done <<< "$REGION_DATA"
BTNS="${BTNS%,}]"
@@ -211,20 +284,20 @@ while true; do
# 仅当非官方网关 且 开启了中枢 OTA 权限时,才渲染升级按钮
if [ "$IS_OFFICIAL_GATEWAY" != "true" ] && [ "${ENABLE_MASTER_OTA:-false}" == "true" ]; then
BTN_MASTER_OTA="[{\"text\":\"🆙 升级司令部至 v${REMOTE_VER}\",\"callback_data\":\"master_ota_confirm\"}],"
BTN_MASTER_OTA="[{\"text\":\"🆙 升级控制中枢至 v${REMOTE_VER}\",\"callback_data\":\"master_ota_confirm\"}],"
fi
fi
NODE_COUNT=$(db_exec "SELECT COUNT(*) FROM nodes WHERE chat_id='$CHAT_ID';")
[ -z "$NODE_COUNT" ] && NODE_COUNT=0
# L0 扁平化重构:将司令部升级按钮动态置于最顶层
# L0 扁平化重构:升级按钮置顶,底部追加带有 url 属性的 GitHub 引流按钮
if [ "$IS_OFFICIAL_GATEWAY" != "true" ]; then
BTNS="[${BTN_MASTER_OTA}[{\"text\":\"🌍 进入全球战区雷达 (管理节点)\",\"callback_data\":\"list_nodes\"}], [{\"text\":\"🚀 全军总攻\",\"callback_data\":\"all_run\"}, {\"text\":\"📊 全军简报\",\"callback_data\":\"all_reports\"}], [{\"text\":\"☢️ 全舰队 OTA 热重载\",\"callback_data\":\"all_ota_confirm\"}]]"
BTNS="[${BTN_MASTER_OTA}[{\"text\":\"🌍 进入全球雷达 (管理节点)\",\"callback_data\":\"list_nodes\"}], [{\"text\":\"🚀 唤醒全局巡逻\",\"callback_data\":\"all_run\"}, {\"text\":\"📊 获取全局简报\",\"callback_data\":\"all_reports\"}], [{\"text\":\"🔄 全网节点 OTA 热重载\",\"callback_data\":\"all_ota_confirm\"}], [{\"text\":\"🌟 前往 GitHub 点亮星标\",\"url\":\"https://github.com/hotyue/IP-Sentinel\"}]]"
else
BTNS="[[{\"text\":\"🌍 进入全球战区雷达 (管理节点)\",\"callback_data\":\"list_nodes\"}], [{\"text\":\"🚀 全军总攻\",\"callback_data\":\"all_run\"}, {\"text\":\"📊 全军简报\",\"callback_data\":\"all_reports\"}]]"
BTNS="[[{\"text\":\"🌍 进入全球雷达 (管理节点)\",\"callback_data\":\"list_nodes\"}], [{\"text\":\"🚀 唤醒全局巡逻\",\"callback_data\":\"all_run\"}, {\"text\":\"📊 获取全局简报\",\"callback_data\":\"all_reports\"}], [{\"text\":\"🌟 前往 GitHub 点亮星标\",\"url\":\"https://github.com/hotyue/IP-Sentinel\"}]]"
fi
TEXT_MSG="🛡️ **IP-Sentinel 司令部**\n${VER_INFO}\n\n📊 舰队状态: 共有 \`${NODE_COUNT}\` 台哨兵在线\n欢迎回来长官。请下达战略指令:"
TEXT_MSG="🛡️ **IP-Sentinel 控制中枢**\n${VER_INFO}\n\n📊 节点状态: 共有 \`${NODE_COUNT}\` 台节点在线\n欢迎回来管理者。请下达系统指令:"
send_ui "$CHAT_ID" "$TEXT_MSG" "$BTNS"
;;
@@ -242,7 +315,7 @@ while true; do
send_msg "$CHAT_ID" "📢 **司令部指令下达:正在唤醒全舰队执行 OTA 升级...**%0A*(节点升级成功后会主动发回新的入库确认,请注意查收)*"
echo "$NODE_DATA" | while IFS='|' read -r NNAME AIP APORT; do
TARGET_URL=$(generate_signed_url "$AIP" "$APORT" "/trigger_ota")
{ curl -k -s -m 5 "$TARGET_URL" || curl -s -m 5 "${TARGET_URL/https:\/\//http:\/\/}"; } > /dev/null &
curl -k -s -m 5 "$TARGET_URL" > /dev/null &
sleep 0.3 # 严格流量削峰
done
fi
@@ -303,7 +376,7 @@ while true; do
send_msg "$CHAT_ID" "📢 **司令部指令下达:正在召唤所有哨兵回传简报...**%0A*(为防止触发 TG 官方限流,简报将排队依次送达,请耐心等待)*"
echo "$NODE_DATA" | while IFS='|' read -r NNAME AIP APORT; do
TARGET_URL=$(generate_signed_url "$AIP" "$APORT" "/trigger_report")
{ curl -k -s -m 5 "$TARGET_URL" || curl -s -m 5 "${TARGET_URL/https:\/\//http:\/\/}"; } > /dev/null &
curl -k -s -m 5 "$TARGET_URL" > /dev/null &
# [致命修复] 强行休眠 2 秒!错开 TG 官方 1条/秒 的发信红线
sleep 2
done
@@ -326,6 +399,88 @@ while true; do
;;
# ====================================================================
# ------------------- 🚨 请将下面这段代码插入在这里 -------------------
# ================== [v4.0.0 新增: 文本指令直接控制通道] ==================
"/quality"|"/quality@"*)
TARGET_NODE=$(echo "$TEXT" | awk '{print $2}')
if [ -z "$TARGET_NODE" ]; then
send_msg "$CHAT_ID" "⚠️ 请指定目标节点。例如: \`/quality HK-1\`%0A或通过雷达面板进行选择操作。"
else
TARGET_NODE=$(echo "$TARGET_NODE" | tr -cd 'a-zA-Z0-9_.-')
CHAT_ID=$(echo "$CHAT_ID" | tr -cd '0-9-')
# [加密通讯逻辑]
AGENT_INFO=$(db_exec "SELECT agent_ip, agent_port FROM nodes WHERE chat_id='$CHAT_ID' AND node_name='$TARGET_NODE' LIMIT 1;")
AGENT_IP=$(echo "$AGENT_INFO" | cut -d'|' -f1)
AGENT_PORT=$(echo "$AGENT_INFO" | cut -d'|' -f2)
if [ -n "$AGENT_IP" ] && [ -n "$AGENT_PORT" ]; then
send_msg "$CHAT_ID" "⏳ 正在向 \`$TARGET_NODE\` ($AGENT_IP) 下发 [quality] 指令,请稍候..."
# 动态 HMAC 签名防篡改
TARGET_URL=$(generate_signed_url "$AGENT_IP" "$AGENT_PORT" "/trigger_quality")
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
# 结果判定
if [ "$RESPONSE" == "FAILED" ]; then
send_msg "$CHAT_ID" "❌ 指令下发超时或失败!请检查节点公网 IP 或防火墙端口 ($AGENT_PORT) 是否放行。"
elif [[ "$RESPONSE" == *"403"* ]]; then
send_msg "$CHAT_ID" "⚠️ **拒绝执行**:该节点未在本地开启此模块,请检查安装时的配置!"
else
send_msg "$CHAT_ID" "✅ 节点 \`$TARGET_NODE\` 回应: 🔍 深海声呐已投放!请等待异步战报回传。"
fi
else
send_msg "$CHAT_ID" "❌ 数据库中未找到该节点的通讯地址。"
fi
fi
;;
"/trend"|"/trend@"*)
TARGET_NODE=$(echo "$TEXT" | awk '{print $2}')
if [ -z "$TARGET_NODE" ]; then
send_msg "$CHAT_ID" "⚠️ 请指定目标节点。例如: \`/trend HK-1\`%0A或通过雷达面板进行选择操作。"
else
TARGET_NODE=$(echo "$TARGET_NODE" | tr -cd 'a-zA-Z0-9_.-')
CHAT_ID=$(echo "$CHAT_ID" | tr -cd '0-9-')
TREND_DATA=$(db_exec "SELECT datetime(check_time, 'localtime'), scam_score, goog_status, nf_status, gpt_status FROM ip_trend_log WHERE node_name='$TARGET_NODE' ORDER BY check_time DESC LIMIT 15;")
if [ -z "$TREND_DATA" ]; then
send_msg "$CHAT_ID" "⚠️ 节点 \`$TARGET_NODE\` 暂无历史体检档案。请先执行 /quality 投放声呐进行探测。"
else
TARGET_ALIAS=$(db_exec "SELECT IFNULL(node_alias, node_name) FROM nodes WHERE chat_id='$CHAT_ID' AND node_name='$TARGET_NODE' LIMIT 1;")
[ -z "$TARGET_ALIAS" ] && TARGET_ALIAS="$TARGET_NODE"
TEXT_RES="📈 *[${TARGET_ALIAS}] 历史态势感知 (近15次)*\n\n"
TEXT_RES+="时间(本地) | 风险 | 谷歌 | NF | GPT\n"
TEXT_RES+="-----------------------------------------\n"
while IFS='|' read -r c_time score goog nf gpt; do
[ -z "$score" ] && score="0"
[ -z "$goog" ] && goog="未知"
[ -z "$nf" ] && nf="未知"
[ -z "$gpt" ] && gpt="未知"
short_time=$(echo "$c_time" | cut -c 6-16)
if [ "$score" -le 20 ]; then SCORE_EMJ="🟢"
elif [ "$score" -le 60 ]; then SCORE_EMJ="🟡"
else SCORE_EMJ="🔴"
fi
TEXT_RES+="\`${short_time}\` | ${SCORE_EMJ}\`${score}\` | \`${goog}\` | \`${nf}\` | \`${gpt}\`\n"
done <<< "$TREND_DATA"
TEXT_RES+="\n_💡 提示:🔴风险分 >60 极易触发网页验证码拦截;谷歌显示 CN 即为高危送中。_"
# [v4.0.3 体验升级] 注入交互式控制台按钮
BTNS="[[{\"text\":\"⚙️ 调出该节点控制台\",\"callback_data\":\"manage:$TARGET_NODE\"}]]"
send_ui "$CHAT_ID" "$TEXT_RES" "$BTNS"
fi
fi
;;
# ------------------- 🚨 插入代码到此结束 -------------------
"list_nodes")
# 【V3.1.3】一级菜单:大区聚合并列出数量
REGION_DATA=$(db_exec "SELECT region, COUNT(*) FROM nodes WHERE chat_id='$CHAT_ID' GROUP BY region;")
@@ -335,14 +490,8 @@ while true; do
BTNS="["
while IFS='|' read -r REGION_NAME NODE_COUNT; do
[ -z "$REGION_NAME" ] && REGION_NAME="UNKNOWN"
FLAG="🌐"
case "$REGION_NAME" in
"US") FLAG="🇺🇸" ;; "JP") FLAG="🇯🇵" ;; "HK") FLAG="🇭🇰" ;;
"SG") FLAG="🇸🇬" ;; "UK"|"GB") FLAG="🇬🇧" ;; "DE") FLAG="🇩🇪" ;; "FR") FLAG="🇫🇷" ;;
"CA") FLAG="🇨🇦" ;; "AU") FLAG="🇦🇺" ;; "KR") FLAG="🇰🇷" ;; "NL") FLAG="🇳🇱" ;;
"BR") FLAG="🇧🇷" ;; "IN") FLAG="🇮🇳" ;; "TW") FLAG="🇹🇼" ;;
esac
BTNS="$BTNS[{\"text\":\"$FLAG $REGION_NAME ($NODE_COUNT 台)\",\"callback_data\":\"region:$REGION_NAME\"}],"
FLAG=$(get_flag "$REGION_NAME")
BTNS="$BTNS[{\"text\":\"$FLAG $REGION_NAME ($NODE_COUNT 台)\",\"callback_data\":\"region:$REGION_NAME\"}],"
done <<< "$REGION_DATA"
# L1 追加返回中枢逃生舱
BTNS="$BTNS[{\"text\":\"🏠 回到司令部\",\"callback_data\":\"/start\"}]]"
@@ -402,8 +551,8 @@ while true; do
[ "$ST_GOOGLE" == "true" ] && BTN_G="🟢 Google巡逻: 已开" && ACT_G="false" || { BTN_G="🔴 Google巡逻: 已停"; ACT_G="true"; }
[ "$ST_TRUST" == "true" ] && BTN_T="🟢 信用净化: 已开" && ACT_T="false" || { BTN_T="🔴 信用净化: 已停"; ACT_T="true"; }
# 模块一:即时战术动作
BTN_ACTION="[{\"text\":\"📍 触发 Google 纠偏\",\"callback_data\":\"google:$TARGET_NODE\"}, {\"text\":\"🛡️ 触发信用净化\",\"callback_data\":\"trust:$TARGET_NODE\"}], [{\"text\":\"📜 提取终端实时日志\",\"callback_data\":\"log:$TARGET_NODE\"}, {\"text\":\"📊 生成单机战报\",\"callback_data\":\"report:$TARGET_NODE\"}]"
# 模块一:即时战术动作 (V4.0.0 引入深海声呐与趋势面板)
BTN_ACTION="[{\"text\":\"📍 触发 Google 纠偏\",\"callback_data\":\"google:$TARGET_NODE\"}, {\"text\":\"🛡️ 触发信用净化\",\"callback_data\":\"trust:$TARGET_NODE\"}], [{\"text\":\"🔍 投放深海声呐 (查IP质量)\",\"callback_data\":\"quality:$TARGET_NODE\"}, {\"text\":\"📈 查看 IP 污染趋势图\",\"callback_data\":\"trend:$TARGET_NODE\"}], [{\"text\":\"📜 提取终端实时日志\",\"callback_data\":\"log:$TARGET_NODE\"}, {\"text\":\"📊 生成单机战报\",\"callback_data\":\"report:$TARGET_NODE\"}]"
# 模块二:养护状态启停
BTN_TOGGLE="[{\"text\":\"$BTN_G\",\"callback_data\":\"toggle:google:$TARGET_NODE:$ACT_G\"}, {\"text\":\"$BTN_T\",\"callback_data\":\"toggle:trust:$TARGET_NODE:$ACT_T\"}]"
@@ -444,11 +593,6 @@ while true; do
TARGET_URL="${TARGET_URL}&mod=${MOD_NAME}&state=${TARGET_STATE}"
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
# [向下兼容补丁] 若 HTTPS 拒绝或超时,回退 HTTP 试探老节点
if [ "$RESPONSE" == "FAILED" ] || [ -z "$RESPONSE" ]; then
TARGET_URL_HTTP="${TARGET_URL/https:\/\//http:\/\/}"
RESPONSE=$(curl -s -m 5 "$TARGET_URL_HTTP" || echo "FAILED")
fi
if [[ "$RESPONSE" == *"Action Accepted"* ]]; then
# 下发成功,更新 DB原位重绘
@@ -471,7 +615,8 @@ while true; do
[ "$ST_GOOGLE" == "true" ] && BTN_G="🟢 Google巡逻: 已开" && ACT_G="false" || { BTN_G="🔴 Google巡逻: 已停"; ACT_G="true"; }
[ "$ST_TRUST" == "true" ] && BTN_T="🟢 信用净化: 已开" && ACT_T="false" || { BTN_T="🔴 信用净化: 已停"; ACT_T="true"; }
BTN_ACTION="[{\"text\":\"📍 触发 Google 纠偏\",\"callback_data\":\"google:$TARGET_NODE\"}, {\"text\":\"🛡️ 触发信用净化\",\"callback_data\":\"trust:$TARGET_NODE\"}], [{\"text\":\"📜 提取终端实时日志\",\"callback_data\":\"log:$TARGET_NODE\"}, {\"text\":\"📊 生成单机战报\",\"callback_data\":\"report:$TARGET_NODE\"}]"
# 模块一:即时战术动作 (V4.0.0 引入深海声呐与趋势面板)
BTN_ACTION="[{\"text\":\"📍 触发 Google 纠偏\",\"callback_data\":\"google:$TARGET_NODE\"}, {\"text\":\"🛡️ 触发信用净化\",\"callback_data\":\"trust:$TARGET_NODE\"}], [{\"text\":\"🔍 投放深海声呐 (查IP质量)\",\"callback_data\":\"quality:$TARGET_NODE\"}, {\"text\":\"📈 查看 IP 污染趋势图\",\"callback_data\":\"trend:$TARGET_NODE\"}], [{\"text\":\"📜 提取终端实时日志\",\"callback_data\":\"log:$TARGET_NODE\"}, {\"text\":\"📊 生成单机战报\",\"callback_data\":\"report:$TARGET_NODE\"}]"
BTN_TOGGLE="[{\"text\":\"$BTN_G\",\"callback_data\":\"toggle:google:$TARGET_NODE:$ACT_G\"}, {\"text\":\"$BTN_T\",\"callback_data\":\"toggle:trust:$TARGET_NODE:$ACT_T\"}]"
if [ "$IS_OFFICIAL_GATEWAY" != "true" ] && [ "$ST_OTA" == "true" ]; then
@@ -487,7 +632,7 @@ while true; do
TEXT_MSG="⚙️ **目标锁定**: \`$TARGET_ALIAS\`\n(底层标识: \`$TARGET_NODE\`)\n🌐 IP 坐标: \`$A_IP\`\n🕒 最后通讯: \`$LAST_SEEN\`\n\n✅ **执行成功**: 模块 [$MOD_NAME] 状态已切换为 $TARGET_STATE"
edit_ui "$CHAT_ID" "$MSG_ID" "$TEXT_MSG" "$BTNS"
else
send_msg "$CHAT_ID" "❌ 指令下发失败,节点可能离线或未更新至 v3.5.3。"
send_msg "$CHAT_ID" "❌ 指令下发失败,安全策略禁止降级重试。"
fi
fi
;;
@@ -497,8 +642,19 @@ while true; do
TARGET_NODE=$(echo "${TEXT#*:}" | tr -cd 'a-zA-Z0-9_.-')
CHAT_ID=$(echo "$CHAT_ID" | tr -cd '0-9-')
db_exec "DELETE FROM nodes WHERE chat_id='$CHAT_ID' AND node_name='$TARGET_NODE';"
send_msg "$CHAT_ID" "🗑️ 节点 \`$TARGET_NODE\` 的档案已从司令部彻底销毁!"
# 🛡️ [终极防线: 防越权横向打击] 先校验该节点是否真实属于当前操作者!
# 因为趋势库中没有 Chat_ID 标识,不校验直接删会给黑客伪造回调清空他人数据的机会!
VALID_OWNER=$(db_exec "SELECT 1 FROM nodes WHERE chat_id='$CHAT_ID' AND node_name='$TARGET_NODE' LIMIT 1;")
if [ "$VALID_OWNER" == "1" ]; then
# 验权通过,执行原子化级联销毁:同时抹除主配置与历史污染趋势
db_exec "DELETE FROM nodes WHERE chat_id='$CHAT_ID' AND node_name='$TARGET_NODE';"
db_exec "DELETE FROM ip_trend_log WHERE node_name='$TARGET_NODE';"
send_msg "$CHAT_ID" "🗑️ 节点 \`$TARGET_NODE\` 的档案及历史污染趋势已从司令部彻底销毁!"
else
send_msg "$CHAT_ID" "⛔ **安全拦截**:销毁失败。目标节点不存在或您无权越权操作!"
continue
fi
# 剔除后直接返回上级一级雷达菜单
REGION_DATA=$(db_exec "SELECT region, COUNT(*) FROM nodes WHERE chat_id='$CHAT_ID' GROUP BY region;")
@@ -508,13 +664,7 @@ while true; do
BTNS="["
while IFS='|' read -r REGION_NAME NODE_COUNT; do
[ -z "$REGION_NAME" ] && REGION_NAME="UNKNOWN"
FLAG="🌐"
case "$REGION_NAME" in
"US") FLAG="🇺🇸" ;; "JP") FLAG="🇯🇵" ;; "HK") FLAG="🇭🇰" ;;
"SG") FLAG="🇸🇬" ;; "UK"|"GB") FLAG="🇬🇧" ;; "DE") FLAG="🇩🇪" ;; "FR") FLAG="🇫🇷" ;;
"CA") FLAG="🇨🇦" ;; "AU") FLAG="🇦🇺" ;; "KR") FLAG="🇰🇷" ;; "NL") FLAG="🇳🇱" ;;
"BR") FLAG="🇧🇷" ;; "IN") FLAG="🇮🇳" ;; "TW") FLAG="🇹🇼" ;;
esac
FLAG=$(get_flag "$REGION_NAME")
BTNS="$BTNS[{\"text\":\"$FLAG $REGION_NAME ($NODE_COUNT 台)\",\"callback_data\":\"region:$REGION_NAME\"}],"
done <<< "$REGION_DATA"
BTNS="${BTNS%,}]"
@@ -550,14 +700,9 @@ while true; do
TARGET_URL="${TARGET_URL}&b64=${ALIAS_B64}"
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
# [向下兼容补丁] 若 HTTPS 拒绝或超时,回退 HTTP 试探老节点
if [ "$RESPONSE" == "FAILED" ] || [ -z "$RESPONSE" ]; then
TARGET_URL_HTTP="${TARGET_URL/https:\/\//http:\/\/}"
RESPONSE=$(curl -s -m 5 "$TARGET_URL_HTTP" || echo "FAILED")
fi
if [ "$RESPONSE" == "FAILED" ]; then
send_msg "$CHAT_ID" "❌ 指令下发超时!请检查节点连通性。"
send_msg "$CHAT_ID" "❌ 指令下发超时!为防范劫持风险,已终止请求。"
elif [[ "$RESPONSE" == *"Action Accepted"* ]]; then
# [v3.5.2 极致丝滑] 确认 Agent 修改成功后Master 立即自动同步本地 SQLite 数据库!
db_exec "UPDATE nodes SET node_alias='$NEW_ALIAS' WHERE chat_id='$CHAT_ID' AND node_name='$TARGET_NODE';"
@@ -595,18 +740,13 @@ while true; do
TARGET_URL=$(generate_signed_url "$AGENT_IP" "$AGENT_PORT" "/trigger_ota")
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
# [向下兼容补丁] 若 HTTPS 拒绝或超时,回退 HTTP 试探老节点
if [ "$RESPONSE" == "FAILED" ] || [ -z "$RESPONSE" ]; then
TARGET_URL_HTTP="${TARGET_URL/https:\/\//http:\/\/}"
RESPONSE=$(curl -s -m 5 "$TARGET_URL_HTTP" || echo "FAILED")
fi
if [ "$RESPONSE" == "FAILED" ]; then
TEXT_RES="❌ OTA 指令下发超时!请检查节点公网连通性。"
TEXT_RES="❌ OTA 指令下发彻底失败!链路异常或严禁使用 HTTP 降级通讯。"
elif [[ "$RESPONSE" == *"403"* ]]; then
TEXT_RES="⚠️ **节点拒绝执行**:该节点本地未开启 OTA 权限或运行在官方网关下!"
else
TEXT_RES="✅ OTA 触发成功!节点正在后台执行拉取重构,请等待其发送更新完成的回执消息。"
TEXT_RES="✅ OTA (TLS加密) 触发成功!节点正在后台执行拉取重构..."
fi
if [ -n "$MSG_ID" ]; then
@@ -619,10 +759,10 @@ while true; do
fi
;;
# 【核心升级】增加拦截规则,支持 google 和 trust 前缀
google:*|trust:*|run:*|report:*|log:*)
# 【核心升级 v4.0.0】增加拦截规则,支持 quality 前缀
google:*|trust:*|run:*|report:*|log:*|quality:*)
# 🛡️ 提取并强制过滤动作参数、节点名与 CHAT_ID
ACTION_TYPE=$(echo "$TEXT" | cut -d':' -f1 | tr -cd 'a-z')
ACTION_TYPE=$(echo "$TEXT" | cut -d':' -f1)
TARGET_NODE=$(echo "$TEXT" | cut -d':' -f2 | tr -cd 'a-zA-Z0-9_.-')
CHAT_ID=$(echo "$CHAT_ID" | tr -cd '0-9-')
@@ -641,15 +781,10 @@ while true; do
# 🛡️ [v3.0.4] 动态签名生成与触发 (防重放与防篡改)
TARGET_URL=$(generate_signed_url "$AGENT_IP" "$AGENT_PORT" "/trigger_${ACTION_TYPE}")
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
# [向下兼容补丁] 若 HTTPS 拒绝或超时,回退 HTTP 试探老节点
if [ "$RESPONSE" == "FAILED" ] || [ -z "$RESPONSE" ]; then
TARGET_URL_HTTP="${TARGET_URL/https:\/\//http:\/\/}"
RESPONSE=$(curl -s -m 5 "$TARGET_URL_HTTP" || echo "FAILED")
fi
# 结果判定
if [ "$RESPONSE" == "FAILED" ]; then
TEXT_RES="❌ 指令下发超时或失败!请检查节点公网 IP 或防火墙端口 ($AGENT_PORT) 是否放行。"
TEXT_RES="❌ 指令下发超时或失败!为保护链路安全,已终止通信 (严禁降级为 HTTP)。"
elif [[ "$RESPONSE" == *"403"* ]]; then
TEXT_RES="⚠️ **拒绝执行**:该节点未在本地开启此模块,请检查安装时的配置!"
else
@@ -657,6 +792,8 @@ while true; do
TEXT_RES="✅ 节点 \`$TARGET_NODE\` 回应: 📍 Google 纠偏程序启动。"
elif [ "$ACTION_TYPE" == "trust" ]; then
TEXT_RES="✅ 节点 \`$TARGET_NODE\` 回应: 🛡️ IP 信用净化程序启动。"
elif [ "$ACTION_TYPE" == "quality" ]; then
TEXT_RES="✅ 节点 \`$TARGET_NODE\` 回应: 🔍 深海声呐已投放!请等待异步战报回传。"
elif [ "$ACTION_TYPE" == "log" ]; then
TEXT_RES="✅ 节点 \`$TARGET_NODE\` 正在抓取日志..."
else
@@ -674,6 +811,55 @@ while true; do
send_msg "$CHAT_ID" "❌ 数据库中未找到该节点的通讯地址。"
fi
;;
trend:*)
# [v4.0.2 优化: 扩容 15 次追踪并引入 GOOG/GPT 状态]
TARGET_NODE=$(echo "${TEXT#*:}" | tr -cd 'a-zA-Z0-9_.-')
CHAT_ID=$(echo "$CHAT_ID" | tr -cd '0-9-')
TREND_DATA=$(db_exec "SELECT datetime(check_time, 'localtime'), scam_score, goog_status, nf_status, gpt_status FROM ip_trend_log WHERE node_name='$TARGET_NODE' ORDER BY check_time DESC LIMIT 15;")
if [ -z "$TREND_DATA" ]; then
TEXT_RES="⚠️ 节点 \`$TARGET_NODE\` 暂无历史体检档案。请先执行 [🔍 投放深海声呐] 进行探测。"
else
TARGET_ALIAS=$(db_exec "SELECT IFNULL(node_alias, node_name) FROM nodes WHERE chat_id='$CHAT_ID' AND node_name='$TARGET_NODE' LIMIT 1;")
[ -z "$TARGET_ALIAS" ] && TARGET_ALIAS="$TARGET_NODE"
TEXT_RES="📈 *[${TARGET_ALIAS}] 历史态势感知 (近15次)*\n\n"
TEXT_RES+="时间(本地) | 风险 | 谷歌 | NF | GPT\n"
TEXT_RES+="-----------------------------------------\n"
while IFS='|' read -r c_time score goog nf gpt; do
[ -z "$score" ] && score="0"
[ -z "$goog" ] && goog="未知"
[ -z "$nf" ] && nf="未知"
[ -z "$gpt" ] && gpt="未知"
# 时间做极简切割 (截取 04-24 20:52) 节省横向空间
short_time=$(echo "$c_time" | cut -c 6-16)
if [ "$score" -le 20 ]; then SCORE_EMJ="🟢"
elif [ "$score" -le 60 ]; then SCORE_EMJ="🟡"
else SCORE_EMJ="🔴"
fi
# 拼接紧凑排版
TEXT_RES+="\`${short_time}\` | ${SCORE_EMJ}\`${score}\` | \`${goog}\` | \`${nf}\` | \`${gpt}\`\n"
done <<< "$TREND_DATA"
TEXT_RES+="\n_💡 提示:🔴风险分 >60 极易触发网页验证码拦截;谷歌显示 CN 即为高危送中。_"
fi
# [v4.0.3 体验升级] 注入交互式控制台按钮,并调用原生 UI 重绘函数
BTNS="[[{\"text\":\"⚙️ 调出该节点控制台\",\"callback_data\":\"manage:$TARGET_NODE\"}]]"
if [ -n "$MSG_ID" ]; then
edit_ui "$CHAT_ID" "$MSG_ID" "$TEXT_RES" "$BTNS"
else
send_ui "$CHAT_ID" "$TEXT_RES" "$BTNS"
fi
;;
esac
done
fi

View File

@@ -38,6 +38,8 @@ fi
echo "[1/4] 正在停止并删除 Systemd 服务..."
if command -v systemctl >/dev/null 2>&1; then
echo "💡 检测到 Systemd 环境,正在抹除 Systemd 服务单元..."
# [防死锁修复] 先发送 SIGKILL 瞬间抹杀,防止卡死
systemctl kill --signal=SIGKILL ip-sentinel-master.service >/dev/null 2>&1 || true
systemctl disable --now ip-sentinel-master.service >/dev/null 2>&1
rm -f /etc/systemd/system/ip-sentinel-master.service
systemctl daemon-reload
@@ -52,9 +54,8 @@ pkill -9 -f "tg_master.sh" >/dev/null 2>&1 || true
# 3. 清除看门狗定时任务 (Cron)
echo "[3/4] 正在清理系统定时任务 (Cron)..."
crontab -l 2>/dev/null | grep -v "tg_master.sh" > /tmp/cron_backup
crontab /tmp/cron_backup
rm -f /tmp/cron_backup
# [终极防御] 内存管道流过滤,绝不写硬盘
crontab -l 2>/dev/null | grep -v "tg_master.sh" | crontab - >/dev/null 2>&1 || true
# 4. 删除所有文件、配置与数据库
echo "[4/4] 正在抹除核心程序、配置文件与 SQLite 数据库..."

104
scripts/fetch_trust_urls.py Normal file
View File

@@ -0,0 +1,104 @@
import urllib.request
import xml.etree.ElementTree as ET
import os
import json
import random
# ================== [路径防弹装甲] ==================
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_ROOT = os.path.dirname(SCRIPT_DIR)
REGIONS_DIR = os.path.join(PROJECT_ROOT, "data", "regions")
# ====================================================
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 全球骨干新闻 RSS 监听矩阵
RSS_FEEDS = {
"US": ["http://rss.cnn.com/rss/cnn_topstories.rss", "https://feeds.npr.org/1001/rss.xml"],
"UK": ["http://feeds.bbci.co.uk/news/rss.xml"],
"AU": ["https://www.abc.net.au/news/feed/51120/rss.xml"],
"CA": ["https://www.cbc.ca/cmlink/rss-topstories"],
"DE": ["https://www.tagesschau.de/xml/rss2"],
"FR": ["https://www.france24.com/fr/rss"],
"ES": ["https://feeds.elpais.com/mrss-s/pages/ep/site/elpais.com/portada"],
"JP": ["https://news.yahoo.co.jp/rss/topics/top-picks.xml"],
"HK": ["https://hk.news.yahoo.com/rss/hong-kong"],
"TW": ["https://news.google.com/rss?hl=zh-TW&gl=TW&ceid=TW:zh-Hant"],
"KR": ["https://www.yonhapnewstv.co.kr/category/news/headline/feed/"],
"SG": ["https://www.channelnewsasia.com/api/v1/rss-outbound-feed?_format=xml"],
"NL": ["https://feeds.nos.nl/nosnieuwsalgemeen"],
"VN": ["https://vnexpress.net/rss/tin-moi-nhat.rss"],
"MY": ["https://news.google.com/rss?hl=en-MY&gl=MY&ceid=MY:en"],
"NG": ["https://punchng.com/feed/", "https://guardian.ng/feed/"]
}
def fetch_rss_links(region_code, max_items=15):
"""抓取该战区最新的 RSS 新闻链接"""
feeds = RSS_FEEDS.get(region_code, [])
if not feeds:
return []
links = []
for url in feeds:
try:
req = urllib.request.Request(url, headers=HEADERS)
with urllib.request.urlopen(req, timeout=10) as response:
xml_data = response.read()
root = ET.fromstring(xml_data)
for item in root.findall('.//item'):
link = item.find('link')
if link is not None and link.text:
clean_link = link.text.strip()
if clean_link.startswith('http'):
links.append(clean_link)
except Exception as e:
print(f"⚠️ [{region_code}] RSS 抓取异常 ({url}): {e}")
# 去重并截取最新
return list(set(links))[:max_items]
def process_json_file(file_path, region_code):
"""融合静态基石与动态新闻"""
try:
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
trust_mod = data.get("trust_module", {})
if not trust_mod or "static_urls" not in trust_mod:
return
static_urls = trust_mod.get("static_urls", [])
# 抓取今日该战区的活体新闻流
daily_news_urls = fetch_rss_links(region_code)
# 战术混合:基石(保证高权重) + 新闻(保证活体动态)
combined_urls = static_urls + daily_news_urls
# 深度洗牌,打破机械顺序特征
combined_urls = list(set(combined_urls))
random.shuffle(combined_urls)
# 覆写回供 Agent 拉取的 white_urls
trust_mod["white_urls"] = combined_urls
data["trust_module"] = trust_mod
with open(file_path, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"✅ [信用融合] {os.path.basename(file_path)}: 骨干 {len(static_urls)} 条 + 活体 {len(daily_news_urls)}")
except Exception as e:
print(f"❌ [处理失败] {file_path}: {e}")
if __name__ == '__main__':
print("========== 启动 IP-Sentinel 活体新闻流融合引擎 ==========")
for root_dir, _, files in os.walk(REGIONS_DIR):
for file in files:
if file.endswith(".json"):
file_path = os.path.join(root_dir, file)
region_code = os.path.relpath(file_path, REGIONS_DIR).split(os.sep)[0]
process_json_file(file_path, region_code)
print("========== 融合引擎执行完毕 ==========")

View File

@@ -1,2 +1,2 @@
MASTER_VERSION=3.6.3
AGENT_VERSION=3.6.3
MASTER_VERSION=4.0.8
AGENT_VERSION=4.0.8