mirror of
https://github.com/hotyue/IP-Sentinel.git
synced 2026-05-11 06:49:40 +08:00
Compare commits
169 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f73825972 | ||
|
|
56b655af2d | ||
|
|
70d940584e | ||
|
|
0cdb4f8d3f | ||
|
|
67be930060 | ||
|
|
be82242ed1 | ||
|
|
67d6e35d9f | ||
|
|
f34e697016 | ||
|
|
56cfbb5485 | ||
|
|
d40b7928d0 | ||
|
|
ac2f8b0a1c | ||
|
|
caf7589b89 | ||
|
|
ebada9f455 | ||
|
|
d2dc1a20c3 | ||
|
|
d115f01d4a | ||
|
|
b1dc0ab79d | ||
|
|
c147843d39 | ||
|
|
ae67817eb4 | ||
|
|
27e48defb2 | ||
|
|
cc216e288e | ||
|
|
9f32bc990d | ||
|
|
3a981f24e3 | ||
|
|
a626283b54 | ||
|
|
12eaf89f48 | ||
|
|
5e1331bad0 | ||
|
|
e44418d381 | ||
|
|
c86f1e509b | ||
|
|
f7f2421843 | ||
|
|
014486e558 | ||
|
|
ce4a40d860 | ||
|
|
36847aeaa2 | ||
|
|
43adf55a4b | ||
|
|
838dc01ebc | ||
|
|
641055ab74 | ||
|
|
5c19b6a6e1 | ||
|
|
af2570f15d | ||
|
|
df77f397aa | ||
|
|
d6dee813c5 | ||
|
|
d20f576908 | ||
|
|
17dd927719 | ||
|
|
bff49cd2b9 | ||
|
|
49090f1b97 | ||
|
|
15324d0840 | ||
|
|
8b632fe4f9 | ||
|
|
11ff23bf94 | ||
|
|
332765a72e | ||
|
|
38869e8681 | ||
|
|
85cd1dc594 | ||
|
|
55f7ee0c8c | ||
|
|
d24be4da0b | ||
|
|
ae36155545 | ||
|
|
dc5560f8fd | ||
|
|
18985cb57d | ||
|
|
830d62ead8 | ||
|
|
5c8d9d6096 | ||
|
|
22d26079e4 | ||
|
|
c564ea0ab8 | ||
|
|
ec7bf0f2b9 | ||
|
|
be241ab6bd | ||
|
|
4b2985b4ef | ||
|
|
d4afb57f9f | ||
|
|
230a59bbb3 | ||
|
|
f4a5cf8306 | ||
|
|
b606fe02ff | ||
|
|
3375356143 | ||
|
|
d9255ecbca | ||
|
|
6ad6f6b4b3 | ||
|
|
a8caea3b6d | ||
|
|
1a49e18200 | ||
|
|
c223d7a476 | ||
|
|
eaa51358a8 | ||
|
|
00827b3b15 | ||
|
|
ccddaf4386 | ||
|
|
0f0ba46989 | ||
|
|
f83db38a6b | ||
|
|
ba5582ab4c | ||
|
|
fb4e1d9b31 | ||
|
|
2dea6e382b | ||
|
|
fa8eada97b | ||
|
|
c102f66234 | ||
|
|
68a50fdb4a | ||
|
|
aac83acb8f | ||
|
|
4be4d5e9ef | ||
|
|
1f925b307f | ||
|
|
49afe032d6 | ||
|
|
f0f054c8cd | ||
|
|
699e9ca31a | ||
|
|
76cace4ff6 | ||
|
|
9f3218ab7f | ||
|
|
8a61f518f5 | ||
|
|
e9d5023263 | ||
|
|
05b1e21bba | ||
|
|
4a496fdab3 | ||
|
|
8ae3a6534d | ||
|
|
3269376c94 | ||
|
|
7a92de4d62 | ||
|
|
5fbc1e3fb3 | ||
|
|
d73c3154f9 | ||
|
|
b3fbed4a94 | ||
|
|
71fe3bde51 | ||
|
|
c739f58cc5 | ||
|
|
2c50c72fcb | ||
|
|
8d16c549fc | ||
|
|
d74d6d8775 | ||
|
|
853e6c09e1 | ||
|
|
1f21ac9a7e | ||
|
|
28fd94eff5 | ||
|
|
7460935acc | ||
|
|
109ae6f319 | ||
|
|
6b3acf5787 | ||
|
|
b1ecbd4f9a | ||
|
|
4d091e4dd9 | ||
|
|
ae6559c850 | ||
|
|
5cfaebceab | ||
|
|
88f55cbab9 | ||
|
|
1204336612 | ||
|
|
49a65a5f11 | ||
|
|
7e5b836a49 | ||
|
|
18f80400ef | ||
|
|
eca4b41da4 | ||
|
|
a24a533165 | ||
|
|
d2b575fe85 | ||
|
|
cb0aa2049e | ||
|
|
981b9e4859 | ||
|
|
eeee1b6811 | ||
|
|
e6852d0c9d | ||
|
|
23ea08f981 | ||
|
|
580a3d7fd5 | ||
|
|
6eabb60c28 | ||
|
|
7fd432ffee | ||
|
|
351143e59d | ||
|
|
725e8ae8c9 | ||
|
|
1e9de46fc5 | ||
|
|
543ab5c8bd | ||
|
|
972cd02874 | ||
|
|
9c37cb9df3 | ||
|
|
2a8a6b6fa7 | ||
|
|
e4b4c747eb | ||
|
|
eabd33e6b2 | ||
|
|
233af7181f | ||
|
|
62fb19f0c5 | ||
|
|
54178ddcf1 | ||
|
|
92a65d8308 | ||
|
|
eaaa7dabf0 | ||
|
|
e797c8203f | ||
|
|
9ecf50c153 | ||
|
|
c02b7eecc9 | ||
|
|
6af8b6b25d | ||
|
|
7081aa77cc | ||
|
|
5e48edb030 | ||
|
|
5f0f677f59 | ||
|
|
7f0c3e3e29 | ||
|
|
c03f6ca9ba | ||
|
|
66f3ba7d06 | ||
|
|
511ba90378 | ||
|
|
01806d20dd | ||
|
|
049278c458 | ||
|
|
0aaa2d44a0 | ||
|
|
3f139a593e | ||
|
|
bee6fef69c | ||
|
|
f283a8a4c6 | ||
|
|
0d2433d850 | ||
|
|
a6b01bd8d5 | ||
|
|
8f2279b7e2 | ||
|
|
d37d26708d | ||
|
|
6234d7c49a | ||
|
|
f9a7bba32a | ||
|
|
068734da16 | ||
|
|
09a4108bcc |
26
.github/workflows/daily_keywords.yml
vendored
26
.github/workflows/daily_keywords.yml
vendored
@@ -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
|
||||
|
||||
4
.github/workflows/ua_factory.yml
vendored
4
.github/workflows/ua_factory.yml
vendored
@@ -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:
|
||||
|
||||
37
README.md
37
README.md
@@ -5,6 +5,7 @@
|
||||

|
||||
|
||||
> **一个极度轻量、零感知、支持中枢遥控的 VPS IP 自动化养护与区域纠偏引擎。**
|
||||
> **💡 提示:如果本项目提升了您的节点稳定性,请点击右上角点亮 🌟 Star!您的支持是我们持续研发和维护指纹库的核心动力。**
|
||||
|
||||
📢 官方战术交流频道: 🛰️ [IP-Sentinel Matrix](https://t.me/IP_Sentinel_Matrix)
|
||||
|
||||
@@ -12,15 +13,18 @@
|
||||
|
||||
## ✨ 核心极客特性 (Core Architecture)
|
||||
|
||||
- 🎛️ **扁平化指挥矩阵 (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 的全透明计数中枢,绝对零隐私收集,仅作原子累加,底层网关源码全开源。
|
||||
@@ -32,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 大洲战区拓扑)
|
||||
@@ -45,6 +49,7 @@
|
||||
```
|
||||
|
||||
## 🚀 极速部署 (Quick Start)
|
||||
> 🛡️ **跨平台装甲支持**:Debian / Ubuntu / CentOS / RHEL / Alpine Linux / Arch Linux
|
||||
系统现提供两种接入模式,请根据您的战术需求选择:
|
||||
|
||||
### 🔹 模式 A:私有独立模式 (全自主、强烈推荐)
|
||||
@@ -53,13 +58,14 @@
|
||||
> ☢️ **核按钮系统已就绪**:采用私有部署,您将解锁 **OTA 远程静默升级** 权限!所有私有前线节点均可通过您的 TG 面板实现一键全网代码热重载换代!
|
||||
|
||||
- **部署 Master (中枢大脑)**:找一台 VPS 作为司令部(仅需部署一台),执行:
|
||||
- [官方部署教程](https://blog.iot-architect.com/engineering-practice/ip-sentinel-master-deployment-guide/)
|
||||
```bash
|
||||
bash <(curl -sL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/master/install_master.sh)
|
||||
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
|
||||
bash <(curl -sL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/core/install.sh)
|
||||
curl -fsSL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/core/install.sh -o /tmp/ins_agent.sh && sudo bash /tmp/ins_agent.sh
|
||||
```
|
||||
- 激活节点:安装完成后,您的手机会收到一条 #REGISTER# 注册暗号,将其转发给您自己的机器人即可完成编队入库。
|
||||
|
||||
@@ -69,9 +75,9 @@ bash <(curl -sL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/core/i
|
||||
- 关注机器人:在 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
|
||||
bash <(curl -sL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/core/install.sh)
|
||||
curl -fsSL https://raw.githubusercontent.com/hotyue/IP-Sentinel/main/core/install.sh -o /tmp/ins_agent.sh && sudo bash /tmp/ins_agent.sh
|
||||
```
|
||||
- 激活节点:同上,将收到的暗号转发给官方机器人即可。
|
||||
|
||||
@@ -124,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`。
|
||||
|
||||
@@ -40,27 +40,30 @@ 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 加密证书] ==================
|
||||
# [修复] 彻底废除官方网关免 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
|
||||
# ==============================================================================
|
||||
|
||||
# 3. 启动轻量级 Python3 Webhook 监听服务 (v3.0.4 动态 HMAC 签名防重放)
|
||||
cat > "${INSTALL_DIR}/core/webhook.py" << 'EOF'
|
||||
import http.server
|
||||
@@ -71,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
|
||||
@@ -79,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'):
|
||||
@@ -108,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")
|
||||
@@ -118,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
|
||||
|
||||
# 校验 3:HMAC 数据完整性与身份合法性校验
|
||||
msg = f"{req_path}:{req_t}".encode('utf-8')
|
||||
@@ -129,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()
|
||||
@@ -151,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")
|
||||
@@ -165,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")
|
||||
@@ -178,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':
|
||||
@@ -211,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]
|
||||
@@ -370,17 +416,48 @@ class AgentHandler(http.server.BaseHTTPRequestHandler):
|
||||
self.end_headers()
|
||||
self.wfile.write(b"Action Accepted: trigger_ota\n")
|
||||
|
||||
# [修复] 逃逸 Systemd Cgroup,防止 Agent 在升级时被同归于尽机制误杀
|
||||
# [修复] 逃逸 Systemd Cgroup,并引入 bash -n 语法树校验防砖机制
|
||||
import shutil
|
||||
import base64
|
||||
# 动态提取部署时的源地址,废除强制写死 main 分支,保障隔离测试环境
|
||||
repo_url = "https://raw.githubusercontent.com/hotyue/IP-Sentinel/main"
|
||||
ota_cmd = f"export SILENT_OTA='true'; curl -fsSL {repo_url}/core/install.sh -o /tmp/ota_agent.sh && bash /tmp/ota_agent.sh > /opt/ip_sentinel/logs/ota_upgrade.log 2>&1"
|
||||
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🚀 状态: 升级已取消,节点安全。"
|
||||
err_msg_b64 = base64.b64encode(err_msg.encode('utf-8')).decode('utf-8')
|
||||
|
||||
tg_url = config_mem.get('TG_API_URL', '')
|
||||
chat_id = config_mem.get('CHAT_ID', '')
|
||||
|
||||
# [v3.6.3 究极防御] 采用 Base64 将整个 OTA 执行脚本封装 (第二层隔离)
|
||||
# 彻底免疫因为 python 变量掺杂引号而导致的 shell 注入或截断
|
||||
ota_script = f"""
|
||||
export SILENT_OTA="true"
|
||||
curl -fsSL {repo_url}/core/install.sh -o /tmp/ota_agent.sh
|
||||
if bash -n /tmp/ota_agent.sh; then
|
||||
bash /tmp/ota_agent.sh > /opt/ip_sentinel/logs/ota_upgrade.log 2>&1
|
||||
else
|
||||
MSG=$(echo '{err_msg_b64}' | base64 -d)
|
||||
curl -s -m 10 -X POST "{tg_url}" -d "chat_id={chat_id}" -d "text=$MSG" -d "parse_mode=Markdown" > /dev/null 2>&1
|
||||
echo "OTA Checksum Failed: Script corrupted" > /opt/ip_sentinel/logs/ota_upgrade.log
|
||||
fi
|
||||
"""
|
||||
ota_script_b64 = base64.b64encode(ota_script.encode('utf-8')).decode('utf-8')
|
||||
|
||||
# 安全解包并执行
|
||||
if shutil.which("systemd-run"):
|
||||
full_cmd = f"systemd-run --quiet --no-block bash -c \"{ota_cmd}\""
|
||||
full_cmd = f"systemd-run --quiet --no-block bash -c \"echo '{ota_script_b64}' | base64 -d | bash\""
|
||||
else:
|
||||
full_cmd = f"nohup bash -c \"{ota_cmd}\" &"
|
||||
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)
|
||||
@@ -398,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:
|
||||
@@ -408,6 +494,21 @@ except Exception:
|
||||
ThreadedServer.address_family = socket.AF_INET
|
||||
httpd = ThreadedServer(("0.0.0.0", PORT), AgentHandler)
|
||||
|
||||
# ================== [v3.6.3 核心: 挂载 TLS 加密隧道 (强制装甲版)] ==================
|
||||
import ssl
|
||||
cert_path = '/opt/ip_sentinel/core/cert.pem'
|
||||
key_path = '/opt/ip_sentinel/core/key.pem'
|
||||
|
||||
# 全网强制启用 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)
|
||||
httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
|
||||
except Exception as e:
|
||||
print(f"SSL 隧道构建失败,退化为 HTTP: {e}")
|
||||
# ======================================================================================
|
||||
|
||||
try:
|
||||
httpd.serve_forever()
|
||||
except Exception as e:
|
||||
|
||||
421
core/install.sh
421
core/install.sh
@@ -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=()
|
||||
|
||||
# 基础探测:预检查缺失的命令
|
||||
@@ -53,40 +58,46 @@ if [ ${#MISSING_CMDS[@]} -gt 0 ]; then
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
# Debian / Ubuntu 系列
|
||||
apt-get update -y >/dev/null 2>&1
|
||||
apt-get install -y curl jq cron procps python3 >/dev/null 2>&1
|
||||
# [v3.6.3 抽脂级优化] 注入 --no-install-recommends 拒绝捆绑销售,大幅节省磁盘与内存
|
||||
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
|
||||
# RHEL / CentOS / AlmaLinux 系列
|
||||
PKG_MGR="yum"
|
||||
command -v dnf >/dev/null 2>&1 && PKG_MGR="dnf"
|
||||
$PKG_MGR install -y curl jq cronie procps-ng python3 >/dev/null 2>&1
|
||||
OPT_ARGS=""
|
||||
if command -v dnf >/dev/null 2>&1; then
|
||||
PKG_MGR="dnf"
|
||||
# [v3.6.3 抽脂级优化] 强行关闭 DNF 的弱依赖拉取
|
||||
OPT_ARGS="--setopt=install_weak_deps=False"
|
||||
fi
|
||||
$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
|
||||
# [核心修复 Issue #21] Alpine Linux 系列
|
||||
# Alpine 本身就是极致精简,无需特殊参数
|
||||
echo "Alpine 探测到系统类型为 Alpine Linux,正在执行轻量级安装..."
|
||||
apk add --no-cache curl jq dcron procps python3 bash >/dev/null 2>&1
|
||||
# Alpine 下必须手动创建 cron spool 目录并启动 crond
|
||||
# [修复] 新版 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
|
||||
# [核心修复 Issue #250] Arch Linux 系列
|
||||
pacman -Sy --noconfirm curl jq cronie procps-ng python >/dev/null 2>&1
|
||||
# Arch 下某些 cronie 实现可能缺少 /root/.cache 权限,做个兼容保障
|
||||
# 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
|
||||
|
||||
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 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
|
||||
|
||||
@@ -104,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
|
||||
@@ -131,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
|
||||
|
||||
@@ -163,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 "🗑️ 历史日志已按指令清空。"
|
||||
@@ -205,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}
|
||||
@@ -219,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}
|
||||
@@ -236,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=()
|
||||
@@ -248,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]}"
|
||||
@@ -256,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=()
|
||||
@@ -269,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]}"
|
||||
@@ -277,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"
|
||||
@@ -317,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"
|
||||
@@ -344,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"
|
||||
@@ -402,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,请选择要注册与养护的锚点:"
|
||||
@@ -576,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 的情况,无损补齐
|
||||
@@ -605,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 环境,正在部署原生守护服务..."
|
||||
@@ -665,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
|
||||
@@ -693,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]
|
||||
@@ -723,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
|
||||
@@ -749,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
|
||||
@@ -784,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
|
||||
|
||||
@@ -823,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"
|
||||
@@ -850,7 +1004,7 @@ else
|
||||
echo "🎉 边缘节点 (Agent) 部署流程彻底完成!"
|
||||
fi
|
||||
echo "📍 你的本地守护区域已锁定为: $REGION_NAME"
|
||||
echo "⚙️ 哨兵现已开启 [每30分钟] 的高频高拟真养护循环。"
|
||||
echo "⚙️ 哨兵现已开启 [每20分钟] 的高频高拟真养护循环。"
|
||||
if [[ -n "$TG_TOKEN" ]]; then
|
||||
echo "📡 Webhook 监听已启动 (端口: $AGENT_PORT) 并向中枢发送了注册请求。"
|
||||
|
||||
@@ -880,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
|
||||
fi
|
||||
echo -e "\n"
|
||||
|
||||
# ================== [新增: 安装成功高光时刻 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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -97,14 +109,21 @@ CURL_BIND_OPT=""
|
||||
DYNAMIC_IP_PREF="-${IP_PREF:-4}" # 默认提取用户配置
|
||||
|
||||
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
||||
CURL_BIND_OPT="--interface $BIND_IP"
|
||||
# 智能探测:带冒号为 V6,带点号为 V4
|
||||
if [[ "$BIND_IP" == *":"* ]]; then
|
||||
DYNAMIC_IP_PREF="-6"
|
||||
log "$MODULE_NAME" "INFO " "底层路由锁定: 绑定 IPv6 出口及协议 ($BIND_IP)"
|
||||
elif [[ "$BIND_IP" == *"."* ]]; then
|
||||
DYNAMIC_IP_PREF="-4"
|
||||
log "$MODULE_NAME" "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)"
|
||||
# [v3.6.3 容错层补丁] 探测物理网卡/虚拟 IP 存活状态
|
||||
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
||||
if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
|
||||
log "$MODULE_NAME" "WARN " "检测到配置的出口 IP ($RAW_BIND_IP) 已丢失,自动降级为系统默认路由出网!"
|
||||
CURL_BIND_OPT=""
|
||||
else
|
||||
CURL_BIND_OPT="--interface $BIND_IP"
|
||||
# 智能探测:带冒号为 V6,带点号为 V4
|
||||
if [[ "$BIND_IP" == *":"* ]]; then
|
||||
DYNAMIC_IP_PREF="-6"
|
||||
log "$MODULE_NAME" "INFO " "底层路由锁定: 绑定 IPv6 出口及协议 ($BIND_IP)"
|
||||
elif [[ "$BIND_IP" == *"."* ]]; then
|
||||
DYNAMIC_IP_PREF="-4"
|
||||
log "$MODULE_NAME" "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -143,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
266
core/mod_quality.sh
Executable 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
|
||||
@@ -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:-未知}"
|
||||
|
||||
@@ -99,14 +100,21 @@ CURL_BIND_OPT=""
|
||||
DYNAMIC_IP_PREF="-${IP_PREF:-4}" # 默认提取用户配置
|
||||
|
||||
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
||||
CURL_BIND_OPT="--interface $BIND_IP"
|
||||
# 智能探测:带冒号为 V6,带点号为 V4
|
||||
if [[ "$BIND_IP" == *":"* ]]; then
|
||||
DYNAMIC_IP_PREF="-6"
|
||||
log_msg "INFO " "底层路由锁定: 绑定 IPv6 出口及协议 ($BIND_IP)"
|
||||
elif [[ "$BIND_IP" == *"."* ]]; then
|
||||
DYNAMIC_IP_PREF="-4"
|
||||
log_msg "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)"
|
||||
# [v3.6.3 容错层补丁] 探测物理网卡/虚拟 IP 存活状态
|
||||
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
||||
if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
|
||||
log_msg "WARN " "检测到配置的出口 IP ($RAW_BIND_IP) 已丢失,自动降级为系统默认路由出网!"
|
||||
CURL_BIND_OPT=""
|
||||
else
|
||||
CURL_BIND_OPT="--interface $BIND_IP"
|
||||
# 智能探测:带冒号为 V6,带点号为 V4
|
||||
if [[ "$BIND_IP" == *":"* ]]; then
|
||||
DYNAMIC_IP_PREF="-6"
|
||||
log_msg "INFO " "底层路由锁定: 绑定 IPv6 出口及协议 ($BIND_IP)"
|
||||
elif [[ "$BIND_IP" == *"."* ]]; then
|
||||
DYNAMIC_IP_PREF="-4"
|
||||
log_msg "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -31,11 +47,17 @@ CURL_BIND_OPT=""
|
||||
DYNAMIC_IP_PREF="-${IP_PREF:-4}"
|
||||
|
||||
if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then
|
||||
CURL_BIND_OPT="--interface $BIND_IP"
|
||||
if [[ "$BIND_IP" == *":"* ]]; then
|
||||
DYNAMIC_IP_PREF="-6"
|
||||
elif [[ "$BIND_IP" == *"."* ]]; then
|
||||
DYNAMIC_IP_PREF="-4"
|
||||
# [v3.6.3 容错层补丁] 探测物理网卡/虚拟 IP 存活状态
|
||||
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
||||
if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
|
||||
CURL_BIND_OPT=""
|
||||
else
|
||||
CURL_BIND_OPT="--interface $BIND_IP"
|
||||
if [[ "$BIND_IP" == *":"* ]]; then
|
||||
DYNAMIC_IP_PREF="-6"
|
||||
elif [[ "$BIND_IP" == *"."* ]]; then
|
||||
DYNAMIC_IP_PREF="-4"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -90,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
|
||||
@@ -158,7 +180,7 @@ else
|
||||
MSG="$MSG
|
||||
|
||||
🕒 **最近执行快照 [${LAST_MOD:-"System"}]:**
|
||||
时间: ${LAST_TIME:-"暂无数据"}
|
||||
时间: ${LAST_TIME:-"暂无数据"} (节点本地)
|
||||
结论: ${LAST_SCORE:-"暂无数据"}"
|
||||
|
||||
fi
|
||||
@@ -168,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"
|
||||
@@ -177,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"
|
||||
|
||||
@@ -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 随机端口,请您按需手动关闭。"
|
||||
|
||||
@@ -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 热数据更新 =========="
|
||||
@@ -42,7 +54,12 @@ CURL_CMD="curl -${IP_PREF:-4} -sL"
|
||||
if [ -n "$BIND_IP" ]; then
|
||||
# curl 的 --interface 参数不支持带方括号的 IPv6 地址,必须强行脱壳
|
||||
RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]')
|
||||
CURL_CMD="$CURL_CMD --interface $RAW_BIND_IP"
|
||||
# [v3.6.3 容错层补丁] 探测网卡存活状态,防止 IP 漂移导致永久断网
|
||||
if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then
|
||||
log "Updater" "WARN " "检测到绑定的出口 IP ($RAW_BIND_IP) 已丢失,自动退回默认路由!"
|
||||
else
|
||||
CURL_CMD="$CURL_CMD --interface $RAW_BIND_IP"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ==========================================================
|
||||
@@ -117,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 行)
|
||||
# ==========================================================
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 o’sullivan
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 港交所股價
|
||||
國泰航空航班狀態
|
||||
香港迪士尼樂園門票
|
||||
百佳超級市場網購
|
||||
|
||||
@@ -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
|
||||
サンディスク 株価
|
||||
らじるらじる
|
||||
マクドナルド
|
||||
ロシア
|
||||
広島市
|
||||
ゲイブル・スティーブソン
|
||||
日本維新の会
|
||||
新 日本 繊維
|
||||
高見沢 俊彦
|
||||
不登校
|
||||
後期高齢者医療制度
|
||||
バーミヤン
|
||||
宮澤エマ
|
||||
チケプラ
|
||||
横綱
|
||||
宮里美香
|
||||
東京 天気 明日
|
||||
新宿 おすすめ 居酒屋
|
||||
最新のニュース 速報
|
||||
ゴールド 相場 チャート
|
||||
近くの静かなカフェ
|
||||
円安 影響 生活
|
||||
|
||||
@@ -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
161
data/keywords/kw_MY.txt
Normal 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
95
data/keywords/kw_NG.txt
Normal 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
|
||||
@@ -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é
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
巴哈姆特
|
||||
中時電子報
|
||||
聯合新聞網
|
||||
台灣高鐵
|
||||
台鐵時刻表
|
||||
中華電信
|
||||
統一發票
|
||||
勞動部
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
351
data/map.json
351
data/map.json
@@ -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 @@
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
50
data/regions/DE/BE/Berlin.json
Normal file
50
data/regions/DE/BE/Berlin.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/DE/BY/Nuremberg.json
Normal file
50
data/regions/DE/BY/Nuremberg.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
50
data/regions/DE/SN/Falkenstein.json
Normal file
50
data/regions/DE/SN/Falkenstein.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/MY/Default/Kuala_Lumpur.json
Normal file
50
data/regions/MY/Default/Kuala_Lumpur.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/NG/Default/Lagos.json
Normal file
50
data/regions/NG/Default/Lagos.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
50
data/regions/US/FL/Miami.json
Normal file
50
data/regions/US/FL/Miami.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/US/GA/Atlanta.json
Normal file
50
data/regions/US/GA/Atlanta.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/US/IA/Council_Bluffs.json
Normal file
50
data/regions/US/IA/Council_Bluffs.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/US/NJ/Newark.json
Normal file
50
data/regions/US/NJ/Newark.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/US/NY/New_York.json
Normal file
50
data/regions/US/NY/New_York.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/US/OH/Columbus.json
Normal file
50
data/regions/US/OH/Columbus.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/US/TX/Dallas.json
Normal file
50
data/regions/US/TX/Dallas.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
40
data/regions/US/TX/Houston.json
Normal file
40
data/regions/US/TX/Houston.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
50
data/regions/US/VA/Ashburn.json
Normal file
50
data/regions/US/VA/Ashburn.json
Normal 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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -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/"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
7954
data/user_agents.txt
7954
data/user_agents.txt
File diff suppressed because it is too large
Load Diff
@@ -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=()
|
||||
|
||||
# 基础探测:预检查缺失的命令
|
||||
@@ -146,29 +144,37 @@ if [ ${#MISSING_CMDS[@]} -gt 0 ]; then
|
||||
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
apt-get update -y >/dev/null 2>&1
|
||||
apt-get install -y curl jq sqlite3 cron procps >/dev/null 2>&1
|
||||
# [v3.6.3 抽脂级优化] 注入 --no-install-recommends 拒绝捆绑销售
|
||||
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"
|
||||
command -v dnf >/dev/null 2>&1 && PKG_MGR="dnf"
|
||||
$PKG_MGR install -y curl jq sqlite cronie procps-ng >/dev/null 2>&1
|
||||
OPT_ARGS=""
|
||||
if command -v dnf >/dev/null 2>&1; then
|
||||
PKG_MGR="dnf"
|
||||
# [v3.6.3 抽脂级优化] 强行关闭 DNF 的弱依赖拉取
|
||||
OPT_ARGS="--setopt=install_weak_deps=False"
|
||||
fi
|
||||
$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 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
|
||||
|
||||
@@ -259,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"
|
||||
|
||||
@@ -267,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
|
||||
@@ -301,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
|
||||
@@ -339,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"
|
||||
|
||||
@@ -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" \
|
||||
@@ -45,9 +64,9 @@ edit_ui() {
|
||||
-d "{\"chat_id\":\"$1\",\"message_id\":\"$2\",\"text\":\"$3\",\"parse_mode\":\"Markdown\",\"reply_markup\":{\"inline_keyboard\":$4}}" > /dev/null
|
||||
}
|
||||
|
||||
# 数据库执行函数
|
||||
# 数据库执行函数 (v3.6.3 终极静默版: 动用 .timeout 点命令防泄露)
|
||||
db_exec() {
|
||||
sqlite3 "$DB_FILE" "$1"
|
||||
printf ".timeout 5000\n%s\n" "$1" | sqlite3 "$DB_FILE"
|
||||
}
|
||||
|
||||
# ================== [v3.0.4 核心: 动态 HMAC 签名生成器] ==================
|
||||
@@ -65,10 +84,15 @@ generate_signed_url() {
|
||||
local signature=$(echo -n "$payload" | openssl dgst -sha256 -hmac "$CHAT_ID" | awk '{print $NF}')
|
||||
|
||||
# 返回最终带签名的 URL
|
||||
echo "http://${target_ip}:${target_port}${action_path}?t=${current_t}&sign=${signature}"
|
||||
echo "https://${target_ip}:${target_port}${action_path}?t=${current_t}&sign=${signature}"
|
||||
}
|
||||
# ========================================================================
|
||||
|
||||
# ================== [v3.6.3 核心: 激活 SQLite 高并发 WAL 引擎] ==================
|
||||
db_exec "PRAGMA journal_mode=WAL;" > /dev/null 2>&1
|
||||
db_exec "PRAGMA synchronous=NORMAL;" > /dev/null 2>&1
|
||||
# ==============================================================================
|
||||
|
||||
# ================== [v3.1.3-v3.6.0 核心: 数据库结构无损热升级] ==================
|
||||
# 自动探测并增加缺失字段,屏蔽已存在的报错,保护老节点数据
|
||||
db_exec "ALTER TABLE nodes ADD COLUMN region TEXT DEFAULT 'UNKNOWN';" 2>/dev/null
|
||||
@@ -78,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)
|
||||
@@ -92,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 新增: 拦截别名修改的对话回复] ==================
|
||||
@@ -111,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
|
||||
@@ -174,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%,}]"
|
||||
@@ -206,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"
|
||||
;;
|
||||
|
||||
@@ -237,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 -s -m 5 "$TARGET_URL" > /dev/null &
|
||||
curl -k -s -m 5 "$TARGET_URL" > /dev/null &
|
||||
sleep 0.3 # 严格流量削峰
|
||||
done
|
||||
fi
|
||||
@@ -262,6 +340,17 @@ while true; do
|
||||
|
||||
# 下载最新的 master install 脚本作为幽灵进程
|
||||
curl -fsSL "${REPO_RAW_URL}/master/install_master.sh" -o "/tmp/install_master.sh"
|
||||
|
||||
# [v3.6.3 修复] 🚀 OTA 防砖机制:严格校验脚本完整性
|
||||
if ! bash -n "/tmp/install_master.sh" >/dev/null 2>&1; then
|
||||
if [ -n "$MSG_ID" ]; then
|
||||
edit_msg "$CHAT_ID" "$MSG_ID" "❌ OTA 传输受损:脚本下载不完整,已触发防砖熔断,升级取消!"
|
||||
else
|
||||
send_msg "$CHAT_ID" "❌ OTA 传输受损:脚本下载不完整,已触发防砖熔断,升级取消!"
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
|
||||
chmod +x "/tmp/install_master.sh"
|
||||
|
||||
# 抛出幽灵进程进行脱壳升级,传递静默变量与回执 ID
|
||||
@@ -283,11 +372,13 @@ while true; do
|
||||
if [ -z "$NODE_DATA" ]; then
|
||||
send_msg "$CHAT_ID" "⚠️ 您名下暂无在线节点。"
|
||||
else
|
||||
send_msg "$CHAT_ID" "📢 **司令部指令下达:正在召唤所有哨兵回传简报...**"
|
||||
# [文案优化] 提前告知指挥官需要排队等待
|
||||
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 -s -m 5 "$TARGET_URL" > /dev/null &
|
||||
sleep 0.2 # [新增] 流量削峰:每秒最多并发下发 5 个,保护 Master 网络栈
|
||||
curl -k -s -m 5 "$TARGET_URL" > /dev/null &
|
||||
# [致命修复] 强行休眠 2 秒!错开 TG 官方 1条/秒 的发信红线
|
||||
sleep 2
|
||||
done
|
||||
fi
|
||||
;;
|
||||
@@ -301,13 +392,95 @@ while true; do
|
||||
send_msg "$CHAT_ID" "📢 **司令部指令下达:正在唤醒所有哨兵执行系统维护...**"
|
||||
echo "$NODE_DATA" | while IFS='|' read -r NNAME AIP APORT; do
|
||||
TARGET_URL=$(generate_signed_url "$AIP" "$APORT" "/trigger_run")
|
||||
curl -s -m 5 "$TARGET_URL" > /dev/null &
|
||||
curl -k -s -m 5 "$TARGET_URL" > /dev/null &
|
||||
sleep 0.2 # [新增] 流量削峰:防止瞬间 fork 导致句柄耗尽
|
||||
done
|
||||
fi
|
||||
;;
|
||||
# ====================================================================
|
||||
|
||||
# ------------------- 🚨 请将下面这段代码插入在这里 -------------------
|
||||
|
||||
# ================== [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;")
|
||||
@@ -317,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\"}]]"
|
||||
@@ -384,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\"}]"
|
||||
@@ -425,7 +592,8 @@ while true; do
|
||||
TARGET_URL=$(generate_signed_url "$AGENT_IP" "$AGENT_PORT" "/trigger_toggle")
|
||||
TARGET_URL="${TARGET_URL}&mod=${MOD_NAME}&state=${TARGET_STATE}"
|
||||
|
||||
RESPONSE=$(curl -s -m 5 "$TARGET_URL" || echo "FAILED")
|
||||
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
|
||||
|
||||
if [[ "$RESPONSE" == *"Action Accepted"* ]]; then
|
||||
# 下发成功,更新 DB,原位重绘
|
||||
db_exec "UPDATE nodes SET enable_${MOD_NAME}='$TARGET_STATE' WHERE chat_id='$CHAT_ID' AND node_name='$TARGET_NODE';"
|
||||
@@ -447,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
|
||||
@@ -463,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
|
||||
;;
|
||||
@@ -473,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;")
|
||||
@@ -484,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%,}]"
|
||||
@@ -525,10 +699,10 @@ while true; do
|
||||
ALIAS_B64=$(echo -n "$NEW_ALIAS" | base64 | tr -d '\n' | tr '+/' '-_')
|
||||
TARGET_URL="${TARGET_URL}&b64=${ALIAS_B64}"
|
||||
|
||||
RESPONSE=$(curl -s -m 5 "$TARGET_URL" || echo "FAILED")
|
||||
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
|
||||
|
||||
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';"
|
||||
@@ -565,14 +739,14 @@ while true; do
|
||||
fi
|
||||
|
||||
TARGET_URL=$(generate_signed_url "$AGENT_IP" "$AGENT_PORT" "/trigger_ota")
|
||||
RESPONSE=$(curl -s -m 5 "$TARGET_URL" || echo "FAILED")
|
||||
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
|
||||
|
||||
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
|
||||
@@ -585,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-')
|
||||
|
||||
@@ -606,11 +780,11 @@ while true; do
|
||||
|
||||
# 🛡️ [v3.0.4] 动态签名生成与触发 (防重放与防篡改)
|
||||
TARGET_URL=$(generate_signed_url "$AGENT_IP" "$AGENT_PORT" "/trigger_${ACTION_TYPE}")
|
||||
RESPONSE=$(curl -s -m 5 "$TARGET_URL" || echo "FAILED")
|
||||
RESPONSE=$(curl -k -s -m 5 "$TARGET_URL" || echo "FAILED")
|
||||
|
||||
# 结果判定
|
||||
if [ "$RESPONSE" == "FAILED" ]; then
|
||||
TEXT_RES="❌ 指令下发超时或失败!请检查节点公网 IP 或防火墙端口 ($AGENT_PORT) 是否放行。"
|
||||
TEXT_RES="❌ 指令下发超时或失败!为保护链路安全,已终止通信 (严禁降级为 HTTP)。"
|
||||
elif [[ "$RESPONSE" == *"403"* ]]; then
|
||||
TEXT_RES="⚠️ **拒绝执行**:该节点未在本地开启此模块,请检查安装时的配置!"
|
||||
else
|
||||
@@ -618,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
|
||||
@@ -635,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
|
||||
|
||||
@@ -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
104
scripts/fetch_trust_urls.py
Normal 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("========== 融合引擎执行完毕 ==========")
|
||||
@@ -1,2 +1,2 @@
|
||||
MASTER_VERSION=3.6.2
|
||||
AGENT_VERSION=3.6.2
|
||||
MASTER_VERSION=4.0.8
|
||||
AGENT_VERSION=4.0.8
|
||||
|
||||
Reference in New Issue
Block a user