Tagoletta/SiberGuvenlikBaskanligi-API
GitHub: Tagoletta/SiberGuvenlikBaskanligi-API
一个非官方的自动化工具,从土耳其网络安全局公开 API 拉取威胁情报黑名单并生成防火墙可直接订阅的域名、URL 和 IP 拦截列表。
Stars: 0 | Forks: 0
# SiberGuvenlikBaskanligi-API
## 🇹🇷 土耳其语
### 是什么?
从 `https://siberguvenlik.gov.tr/api/address/index` 的公开 API 中拉取 **5 种地址类型**(domain、url、ip、ip6、ip6net);在数据库中存储每条记录的日期,并在每次运行时根据时间窗口生成最新的列表。
**无需服务器。** GitHub Actions 会每小时运行,并将列表 commit 到 `data/` 文件夹。您的防火墙可以直接从原始的 GitHub URL 获取列表。
### 输出文件(`data/` 文件夹)
每种地址类型都保存在单独的文件中:
| 窗口 | Domain | URL | IPv4 | IPv6 | IPv6 网络 |
| ------- | --------- | ------- | ---- | ---- | ----------- |
| 所有时间 | `full-domains.txt` | `full-urls.txt` | `full-ips.txt` | `full-ip6.txt` | `full-ip6net.txt` |
| 最近 30 天 | `days-30-domains.txt` | `days-30-urls.txt` | `days-30-ips.txt` | `days-30-ip6.txt` | `days-30-ip6net.txt` |
| 最近 60 天 | `days-60-domains.txt` | `days-60-urls.txt` | `days-60-ips.txt` | `days-60-ip6.txt` | `days-60-ip6net.txt` |
| 最近 90 天 | `days-90-domains.txt` | `days-90-urls.txt` | `days-90-ips.txt` | `days-90-ip6.txt` | `days-90-ip6net.txt` |
| 最近 120 天 | `days-120-domains.txt` | `days-120-urls.txt` | `days-120-ips.txt` | `days-120-ip6.txt` | `days-120-ip6net.txt` |
每个文件:每行一条记录,没有引号,没有空格,LF 换行符。Domain 按字母顺序排序,IP 按数字顺序排序。
### 大致记录数量(当前)
| 类型 | 记录数量 |
| --- | ------------ |
| Domain | ~458,000 |
| URL(包含 query string) | ~7,000 |
| IPv4 | ~14,700 |
| IPv6 | ~10 |
| IPv6 网络块 | ~0–10 |
### 防火墙 URL 示例
```
https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-domains.txt
https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/days-30-domains.txt
https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-ips.txt
https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-urls.txt
```
兼容 pfSense、OPNsense、MikroTik、ipset、Pi-hole、Squid 及类似系统。
### 运行原理
- **首次运行**(没有完整列表):开始对所有类型进行全面抓取。每种类型均使用 `per-page=1000` 参数获取(总共约 481 页)。首次抓取以平均每页 5–12 秒的速度,将在 **~1–2 小时**内完成。
- **全面抓取后**:在每小时的运行中,仅获取新页面(incremental),并重新生成列表。
- **每 7 天**:进行一次全面重新抓取,以捕获从源中删除的记录。已删除的记录会被附加到 `data/removed.log` 文件中。
### 老化逻辑
列表是在每次运行时根据数据库 + 当前时间生成的。31 天的记录会从 `days-30-*` 中掉出,但仍会保留在 `days-60-*`、`days-90-*`、`days-120-*` 和 `full-*` 中。任何记录都不会从更宽泛的窗口中消失。
### 使用 Docker 运行(可选)
如果您使用 GitHub Actions,则不需要 Docker。要在您自己的服务器上运行:
```
docker compose up -d --build
docker compose logs -f
```
列表将在 `./data` 文件夹中生成。
## 🇬🇧 英语
### 这是什么?
一个开源工具,从土耳其网络安全局(`siberguvenlik.gov.tr`)的公开 API 中拉取 **五种地址类型**(domain、url、ip、ip6、ip6net),存储每条记录及其原始日期,并在每次运行时重新生成基于时间窗口的拦截列表。
**无需服务器。** 一个 GitHub Actions 工作流会每小时运行,将刷新后的列表 commit 到 `data/`,您的防火墙可以直接从原始的 GitHub URL 获取它们。
### 输出文件(`data/` 目录)
每种地址类型都保存在其各自的文件中:
| 窗口 | Domain | URL | IPv4 | IPv6 | IPv6 网络 |
| ------ | ------- | ---- | ---- | ---- | --------- |
| 所有时间 | `full-domains.txt` | `full-urls.txt` | `full-ips.txt` | `full-ip6.txt` | `full-ip6net.txt` |
| 最近 30 天 | `days-30-domains.txt` | `days-30-urls.txt` | `days-30-ips.txt` | `days-30-ip6.txt` | `days-30-ip6net.txt` |
| 最近 60 天 | `days-60-domains.txt` | `days-60-urls.txt` | `days-60-ips.txt` | `days-60-ip6.txt` | `days-60-ip6net.txt` |
| 最近 90 天 | `days-90-domains.txt` | `days-90-urls.txt` | `days-90-ips.txt` | `days-90-ip6.txt` | `days-90-ip6net.txt` |
| 最近 120 天 | `days-120-domains.txt` | `days-120-urls.txt` | `days-120-ips.txt` | `days-120-ip6.txt` | `days-120-ip6net.txt` |
每行一条记录,没有引号,没有周围空格,LF 换行符。Domain 按字母顺序排序,IP 按数字顺序排序。
### 大致记录数量(当前)
| 类型 | 数量 |
| ---- | ----- |
| Domain | ~458,000 |
| URL(包含 query string) | ~7,000 |
| IPv4 | ~14,700 |
| IPv6 | ~10 |
| IPv6 网络块 | ~0–10 |
### 防火墙 URL 示例
```
https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-domains.txt
https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/days-30-domains.txt
https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-ips.txt
https://raw.githubusercontent.com/Tagoletta/SiberGuvenlikBaskanligi-API/main/data/full-urls.txt
```
兼容 pfSense、OPNsense、MikroTik、ipset、Pi-hole、Squid 及类似系统。
### 运行原理
- **首次运行**(不存在完整列表):开始对所有类型进行全面抓取。每种类型均使用 `per-page=1000` 进行获取(总共约 481 页)。以每页 5–12 秒的速度,初始种子提取将在 **~1–2 小时**内完成。
- **全面抓取后**:每小时的运行会进行快速的 incremental 更新 —— 仅获取每种类型的新页面 —— 然后重新生成列表。
- **每 7 天**:运行一次全面重新抓取,以检测在源中被移除的条目。被移除的记录将被附加到 `data/removed.log`。
### 老化逻辑
列表是在每次运行时根据数据库 + 当前时间生成的。达到 31 天的记录会从 `days-30-*` 中掉出,但仍保留在 `days-60-*`、`days-90-*`、`days-120-*` 和 `full-*` 中。任何条目都不会从更宽泛的窗口中丢失。
### 环境变量
| 变量 | 默认值 | 描述 |
| -------- | ------- | ----------- |
| `MIN_DELAY` / `MAX_DELAY` | `5` / `12` | 全面抓取期间页面之间的秒数 |
| `INC_MIN_DELAY` / `INC_MAX_DELAY` | `2` / `6` | incremental 期间页面之间的秒数 |
| `TIME_BUDGET_SECONDS` | `18000` | 在这么多秒后对全面抓取设置 checkpoint |
| `FULL_RESYNC_DAYS` | `7` | 重新抓取所有内容的频率,以检测被移除的内容(`0` = 关闭) |
| `INCREMENTAL_MAX_PAGES` | `50` | 每次运行每种类型的 incremental 页面的安全上限 |
| `PER_PAGE` | `1000` | 每个 API 页面的记录数(API 支持的最大值) |
| `DATA_DIR` | `data` | 输出目录 |
| `USER_AGENT` | Chrome/138 | 请求的 User-Agent |
### Docker(可选)
如果您使用 GitHub Actions,则不需要。
```
docker compose up -d --build
docker compose logs -f
```
列表将出现在 `./data` 下。通过 `docker-compose.yml` 中的环境变量覆盖步调。
### GitHub Actions
`.github/workflows/update-lists.yml` 每小时运行一次。首次运行会执行可恢复的全面抓取;一旦完成,每小时的运行即为快速的 incremental 更新。
### 本地运行(无 Docker)
```
pip install -r scraper/requirements.txt
DATA_DIR=data python scraper/fetch.py
```
### API 源
所有数据均来自官方公开 API:
```
GET https://siberguvenlik.gov.tr/api/address/index?type={domain|url|ip|ip6|ip6net}&page={n}&per-page=1000
```
API 文档:`https://siberguvenlik.gov.tr/api/openapi.yaml`
标签:GitHub Actions, 威胁情报, 开发者工具, 网络调试, 自动化, 自动笔记, 请求拦截, 逆向工具, 防火墙, 黑名单