build 2026-09-20 03:18 UTC (6cd10434a3)

This commit is contained in:
gitea-actions
2026-09-20 03:18:25 +00:00
commit 117a97ba9e
54 changed files with 1524 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Leonid Pershin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+300
View File
@@ -0,0 +1,300 @@
# ipcheck-domains
Список доменов сервисов, которые определяют и проверяют IP-адрес: «какой у меня IP»,
тесты утечек DNS/WebRTC, GeoIP-базы и скоринг прокси/VPN.
Собирается в несколько форматов. Основной — `geosite.dat` (protobuf v2ray/Xray) для 3x-ui.
CI на Gitea Actions пересобирает всё при каждом изменении `data/` и раз в сутки по расписанию.
> Если форкнули к себе — поменяйте `gitea.hsrv.site/mrleo1nid/ipcheck-domains` в примерах
> ниже и в `BASE_URL` внутри [`tools/update-geosite.sh`](tools/update-geosite.sh).
## Категории
| Категория | Что внутри |
| --- | --- |
| `ipcheck` | всё вместе — то, что обычно и нужно в роутинге |
| `ip-lookup` | «какой у меня IP»: 2ip, whoer, ipinfo, ifconfig.me, ipify… |
| `leak-test` | тесты утечек: browserleaks, ipleak, dnsleaktest |
| `geoip-db` | GeoIP-базы и справочники: maxmind, db-ip, ip2location… |
| `fraud-score` | детекторы VPN/прокси: spur, scamalytics, ipqualityscore… |
## Скачать
Ветка `release` перезаписывается при каждой сборке, ссылки стабильные:
```
https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release/<путь>
```
| Файл | Для чего |
| --- | --- |
| `ipcheck.dat` | Xray / v2ray / 3x-ui — кладётся рядом со штатным `geosite.dat` |
| `geosite.dat` | то же самое, но именем по умолчанию — если хотите заменить штатный файл |
| `ipcheck.dat.sha256sum` | контрольная сумма, по ней работает автообновление |
| `update-geosite.sh` | скрипт обновления для cron (см. ниже) |
| `sing-box/<категория>.srs` | sing-box, скомпилированный rule-set |
| `sing-box/<категория>.json` | sing-box, исходный rule-set |
| `mihomo/<категория>.mrs` | mihomo, бинарный rule-provider |
| `clash/<категория>.yaml` | Clash/mihomo rule-provider, `behavior: domain` |
| `clash/<категория>.list` | Clash/mihomo rule-provider, `behavior: classical` |
| `txt/<категория>.txt` | просто домены, по одному на строку |
| `json/<категория>.json` | структурированный список с типами правил |
| `adguard/<категория>.txt` | AdGuard Home / uBlock — если нужно блокировать, а не роутить |
| `metadata.json`, `SHA256SUMS` | время сборки, счётчики, суммы по всем файлам |
Плюс каждая сборка публикуется как релиз Gitea с датой в теге — там же лежит
`ipcheck-domains-all.tar.gz` со всем содержимым `dist/` разом.
## 3x-ui
Файл кладётся туда же, где у панели лежат `geoip.dat` и `geosite.dat`. Обычно это
`/usr/local/x-ui/bin` (установка скриптом) или `/usr/local/share/xray`:
```bash
curl -fsSL -o /usr/local/x-ui/bin/ipcheck.dat https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release/ipcheck.dat
```
Дальше в панели: **Xray Settings → Routing Rules → Add Rule**, поле `domain`:
```
ext:ipcheck.dat:ipcheck
```
и нужный `outboundTag`. Тем же правилом в JSON-конфиге:
```json
{
"type": "field",
"domain": ["ext:ipcheck.dat:ipcheck"],
"outboundTag": "proxy"
}
```
Если вы заменили штатный `geosite.dat` нашим файлом, синтаксис короче — `geosite:ipcheck`.
Отдельные категории адресуются так же: `ext:ipcheck.dat:leak-test`.
После замены файла Xray нужно перезапустить (в 3x-ui — **Restart Xray**).
## Автообновление на сервере
Xray читает `.dat` только при старте, поэтому обновление — это «скачать файл и
перезапустить сервис». Этим занимается [`update-geosite.sh`](tools/update-geosite.sh):
- сначала тянет `.sha256sum` и, если сумма совпала с локальным файлом, **молча выходит**
ни лишней закачки, ни лишнего перезапуска Xray;
- проверяет контрольную сумму скачанного файла **до** подмены;
- подменяет файл атомарно (`mv` в пределах каталога), старый сохраняет в `.bak`;
- перезапускает сервис только если файл действительно изменился;
- пишет в stdout только когда что-то произошло, так что cron не будет слать письма впустую.
### Установка
```bash
curl -fsSL -o /usr/local/bin/update-geosite.sh https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release/update-geosite.sh
chmod +x /usr/local/bin/update-geosite.sh
```
`BASE_URL` и `DEST` уже прописаны в скрипте по умолчанию, так что задать нужно только
команду перезапуска. Проверьте вручную — первый запуск скачает файл и перезапустит панель:
```bash
RESTART_CMD='x-ui restart' /usr/local/bin/update-geosite.sh
```
Второй запуск подряд должен отработать молча и мгновенно — значит сравнение сумм работает.
### Вариант 1: cron
`crontab -e` от root, одна строка (04:17 ночи, чтобы не совпадать с чужими крон-джобами):
```cron
17 4 * * * RESTART_CMD='x-ui restart' /usr/local/bin/update-geosite.sh >> /var/log/ipcheck-update.log 2>&1
```
Если путь до `.dat` другой или репозиторий свой, добавьте в ту же строку `DEST=…`
и `BASE_URL=…`. Когда переменных много, вынесите их в `/etc/default/ipcheck`:
```bash
export BASE_URL=https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release
export DEST=/usr/local/x-ui/bin/ipcheck.dat
export RESTART_CMD='x-ui restart'
```
```cron
17 4 * * * . /etc/default/ipcheck && /usr/local/bin/update-geosite.sh >> /var/log/ipcheck-update.log 2>&1
```
`export` здесь обязателен: скрипт читает переменные из окружения, а не из своего шелла.
### Вариант 2: systemd timer
Точнее cron: `Persistent=true` догоняет пропущенный запуск после перезагрузки,
`RandomizedDelaySec` размазывает нагрузку, а логи идут в journald.
`/etc/systemd/system/ipcheck-geosite.service`:
```ini
[Unit]
Description=Обновление ipcheck.dat для Xray
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
Environment=BASE_URL=https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release
Environment=DEST=/usr/local/x-ui/bin/ipcheck.dat
Environment=RESTART_CMD=x-ui restart
ExecStart=/usr/local/bin/update-geosite.sh
```
`/etc/systemd/system/ipcheck-geosite.timer`:
```ini
[Unit]
Description=Ежедневное обновление ipcheck.dat
[Timer]
OnCalendar=daily
RandomizedDelaySec=1h
Persistent=true
[Install]
WantedBy=timers.target
```
```bash
systemctl daemon-reload
systemctl enable --now ipcheck-geosite.timer
systemctl start ipcheck-geosite.service # разовая проверка
journalctl -u ipcheck-geosite.service -n 20
```
### Если 3x-ui в Docker
Путь указывайте внутрь примонтированного тома, а перезапуск делайте через docker:
```bash
DEST=/var/lib/x-ui-bin/ipcheck.dat RESTART_CMD='docker restart 3x-ui' /usr/local/bin/update-geosite.sh
```
### Переменные скрипта
| Переменная | По умолчанию | Значение |
| --- | --- | --- |
| `BASE_URL` | `https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release` | база, откуда качать |
| `DEST` | `/usr/local/x-ui/bin/ipcheck.dat` | куда положить файл |
| `NAME` | имя файла из `DEST` | имя файла в репозитории |
| `RESTART_CMD` | пусто | что выполнить после успешного обновления |
| `TIMEOUT` | `30` | таймаут curl, секунды |
Коды возврата: `0` — обновлено или уже актуально, `1` — ошибка (не скачалось,
не совпала сумма, не удался перезапуск).
## sing-box
```json
{
"route": {
"rules": [{ "rule_set": "ipcheck", "outbound": "proxy" }],
"rule_set": [
{
"type": "remote",
"tag": "ipcheck",
"format": "binary",
"url": "https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release/sing-box/ipcheck.srs",
"download_detour": "direct",
"update_interval": "1d"
}
]
}
}
```
Здесь cron не нужен — sing-box обновляет rule-set сам.
## Clash / mihomo
```yaml
rule-providers:
ipcheck:
type: http
behavior: domain
format: yaml
url: "https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release/clash/ipcheck.yaml"
path: ./ruleset/ipcheck.yaml
interval: 86400
rules:
- RULE-SET,ipcheck,PROXY
```
Для `.mrs` укажите `behavior: domain` и `format: mrs`. Обновление тоже своё, по `interval`.
## Как добавить домен
Правьте файлы в `data/` — по одному домену на строку, в подходящую категорию.
Всё остальное соберётся само.
Формат строки (тот же, что у `v2fly/domain-list-community`):
```
example.com # домен и все его поддомены (тип по умолчанию)
domain:example.com # то же самое, явно
full:www.example.com # только этот хост, без поддоменов
keyword:ipcheck # подстрока в имени
regexp:^ip[0-9]+\.com$ # регулярное выражение
include:ip-lookup # подключить другую категорию целиком
example.com @ads # атрибут — попадёт в .dat как geosite:ipcheck@ads
```
Пустые строки и всё после `#` игнорируются.
## Локальная сборка
Нужен только Python 3.10+, зависимостей нет:
```bash
python3 tools/build.py
```
Результат — в `dist/`. Проверка исходников без сборки (синтаксис, дубликаты,
домены, уже покрытые родительским суффиксом, циклические `include`):
```bash
python3 tools/build.py --check
```
Тесты сборщика:
```bash
python3 -m unittest discover -s tools -t tools
```
`.srs` и `.mrs` собираются, только если в `PATH` есть `sing-box` и `mihomo`
без них остальные форматы всё равно соберутся. Скачать их вместе с `xray`:
```bash
sh tools/fetch-tools.sh ./bin
```
Сборщик проверяет сам себя: после записи `geosite.dat` он разбирает файл обратно
и сверяет с исходником. В CI дополнительно поднимается настоящий Xray с правилом
`ext:ipcheck.dat:ipcheck` — если файл не читается, сборка падает.
## CI
[`.gitea/workflows/build.yml`](.gitea/workflows/build.yml): проверка → тесты →
сборка → валидация настоящими Xray и sing-box → публикация в ветку `release`
релиз в Gitea.
Раннеру нужен образ с `python3`, `curl`, `unzip`, `tar`, `git` (например
`catthehacker/ubuntu:act-latest`); если чего-то нет, первый шаг доставит пакеты сам.
Публикация идёт под автоматическим токеном `${{ github.token }}`. Если у раннера
нет прав на push в репозиторий или на создание релизов — заведите секрет
`RELEASE_TOKEN` с правами `repo:write`, workflow предпочтёт его.
## Лицензия
[MIT](LICENSE). Список доменов — общедоступные факты, используйте как угодно.
+51
View File
@@ -0,0 +1,51 @@
1c1c3f6ca2303141ecbc62b7eb948a62c173a8b8b28f2b4b86cf737a9aa52427 adguard/fraud-score.txt
5ab46aa0ca887111b61135b66f9447f51b55c93d6588252ea3490c93919aae97 adguard/geoip-db.txt
ec0e452c5a359e2156056da21330a0440b0e817aff1b81b559a80ad39b85e1a9 adguard/ip-lookup.txt
9412216ee6701726a4f2c8fe4d57546d78aa0be624adc69c0bdfc902749edef7 adguard/ipcheck.txt
1b5c5b3341f2e95adb7c7664bab3b8a02270bb646e7045196ca584511087f4e1 adguard/leak-test.txt
c475f3d485e2830b904621857958908345e2baafe0e410207c61163ad5b9fd64 clash/fraud-score.list
faddbb13d3c9a2a47c559d23aa0fadba0018d461dc292e60219b8a56634877b7 clash/fraud-score.yaml
c7913328a44f93b61a41545aceb6c60557f9ee1eb2d73b3d6180a05ec12dbd72 clash/geoip-db.list
77dfcb3cfa6efad45adfd2e5f5c310fae148099907f783336f77451f2309e1e6 clash/geoip-db.yaml
664e02852f5b132103d475055ddc8af2f0782d02cba607e5d1444ef8d8770cb8 clash/ip-lookup.list
d653aa6b6c8b9fcc980489b3a65c10cad3799c1260a98488abae49026bab450f clash/ip-lookup.yaml
690fcdab44b059c31be6c2656de8cf27b7568d7868cedcb1542adfa6d958a6fe clash/ipcheck.list
896904b80a6fb32b64fc98fa36e3f3018dcdc8bf5c493e3151478bbfdeff6cd4 clash/ipcheck.yaml
2ce43be4508d5b44c9283f4c9831ddb541ba6386293d50f752f7e3eb6c740638 clash/leak-test.list
4c73658860aacb7597d979c335b0b91eb0fed567789c746bb413ac846cca6bea clash/leak-test.yaml
40ac1b41d51aecabf178ff98ade8dfe2587bd6b49c66260331990774588b040c geosite.dat
67df6d4260d20cc0a77588ff264a6672293b30cbfd406fd0852cd10e07c2bbfa geosite.dat.sha256sum
40ac1b41d51aecabf178ff98ade8dfe2587bd6b49c66260331990774588b040c ipcheck.dat
70ee904b3608e34b985598f8c4d9d70b4deca9778fe1d709fff038688efecb6b ipcheck.dat.sha256sum
817556a7f8f3d74499d8d77459ead2e9d84a42c45e3ba2ac107928c79482e309 json/fraud-score.json
e5172358f352144b1f13ec8442e1e9b3adf490c86dd3411617be408b524179f3 json/geoip-db.json
60b9e442f55454c3d168c0f0fec7ff768be54d04adada068d294f71994d8cbd3 json/ip-lookup.json
22dcc71ef7c7cdd92992037022225f390e00d35c75c49151d3c09fa0abaf1d3a json/ipcheck.json
a4ebdd1db3795f1726d2c4a9bbe3564bf8f2d1ccb575f93e0799ee3a6a1fae9b json/leak-test.json
40ad4fdba0c2709b6240910756ad59337598dc7482c08dbfb95a66130d0ec8cf metadata.json
4909af8cff1593c6e264ecad0e69887bcb881ba3870fa47b0935c2c33a4de63f mihomo/fraud-score.mrs
467e31f4829571d49360f081ab6fbf7453714ee3339fc96e69fc9409b40cc0b3 mihomo/geoip-db.mrs
4a3fe564d7e22ce2e7e317b1727edea9503f08f779ee8969e3eca4b1bcd07d9d mihomo/ip-lookup.mrs
37340c6a9d3e3039eb34d74776d76c88393588cbfc8f273351bc5b7466431fd9 mihomo/ipcheck.mrs
b3e409367c2240fb61f88867686e0708ef9ef3761da1c2b2d5afefa10853ed3c mihomo/leak-test.mrs
f37da541dfebd9389d911b899485e38cd85843a4018733caa4959c5853692662 sing-box/fraud-score.json
68bd460e9119e4b792254ca79b40267a33968d501f40c1841cbad2e2a8448318 sing-box/fraud-score.srs
a08238aa218a4dbe0949b2aad1b5400d447b75fd09c1dc825189c3d657043585 sing-box/geoip-db.json
8d3a1c06cec32a290b868ed27c5432650e11b253b120e293423070a7d8146aeb sing-box/geoip-db.srs
0bc4678629314106f6f4b2d8bcc58c03ea1b55f0971306a9a77f8e5d93aa81b0 sing-box/ip-lookup.json
76a4e6ee48b47c0b25522f6c203873a8560f1fe55dd99d381ff46f507e87e5e3 sing-box/ip-lookup.srs
538890422358a2d094f15ff24e3e21835ab0e7a3ee6d3abd978c4ab4aeb316a8 sing-box/ipcheck.json
feffddcb48734fc5bbfd72d8d85d3d533ae225edae935ea45c9a8b475907c86a sing-box/ipcheck.srs
01bd53410b788ca85e0b09ce729da1355681e422c3c49068da44c9284e457742 sing-box/leak-test.json
c90764bb5463108ff734f531d7c1f7288fa4a1672c6c79a53d769e63f85a5763 sing-box/leak-test.srs
b67ff3c4ea1c371be2d777dcf2b88614673ffd7532f2f8cff7377e7993aa91b6 src/fraud-score.txt
0514a090c68e117030b2eb478360f0eba79740db1c02d5ade6ea7c96e8c864e2 src/geoip-db.txt
0bb286f849b93defebceaec7ec6f3f820aaf3821f7954590b5e7d46a7b559726 src/ip-lookup.txt
c6f4b98ddcdafcafe7bd2c4c580a1ee020d10841e41e9be9404115243bbfdcf8 src/ipcheck.txt
eaffb62f3e7edb9746ca12e15478091127d3891589c3f2cdc15d47fa326df238 src/leak-test.txt
ae44fea51df8eb856c094068205d2b574dea2e54abd2c9832e6cf1b92c916fb4 txt/fraud-score.txt
903d74a61b3832168e793ca3eb940d162de64f965f8df247f4a561791e8690b9 txt/geoip-db.txt
a9f7ee701e36a0b5210945f6d5799447be35a8fe3b412781431b4d2660542aa0 txt/ip-lookup.txt
1fad7449ab2f8beb6f46a7936c2b53d045eba34945bed9e5e36b658eb09338ad txt/ipcheck.txt
5f3438791d5c49b345d26fd8c9bfdba582bed80c3c314fa572e0cf66135e626e txt/leak-test.txt
ff655b22d14d5c0a267ca8fea34ad6dcc18d40a8aef1c0b6a1c6e8a34e2238c2 update-geosite.sh
+12
View File
@@ -0,0 +1,12 @@
! ipcheck-domains — категория: fraud-score
! Правил: 9. Файл генерируется автоматически, не редактируйте вручную.
! Источник: data/fraud-score.txt
||criminalip.io^
||fraudguard.io^
||getipintel.net^
||iphub.info^
||ipqualityscore.com^
||proxycheck.io^
||scamalytics.com^
||spur.us^
||vpnapi.io^
+12
View File
@@ -0,0 +1,12 @@
! ipcheck-domains — категория: geoip-db
! Правил: 9. Файл генерируется автоматически, не редактируйте вручную.
! Источник: data/geoip-db.txt
||bigdatacloud.net^
||db-ip.com^
||ip2location.com^
||ipbase.com^
||ipdata.co^
||ipgeolocation.io^
||ipregistry.co^
||ipwhois.io^
||maxmind.com^
+21
View File
@@ -0,0 +1,21 @@
! ipcheck-domains — категория: ip-lookup
! Правил: 18. Файл генерируется автоматически, не редактируйте вручную.
! Источник: data/ip-lookup.txt
||2ip.io^
||2ip.ru^
||icanhazip.com^
||ifconfig.co^
||ifconfig.io^
||ifconfig.me^
||ip-api.com^
||ip.sb^
||ipaddress.is^
||ipapi.co^
||ipapi.is^
||ipify.org^
||ipinfo.io^
||myip.com^
||whatismyip.com^
||whatismyipaddress.com^
||whoer.com^
||whoer.net^
+42
View File
@@ -0,0 +1,42 @@
! ipcheck-domains — категория: ipcheck
! Правил: 39. Файл генерируется автоматически, не редактируйте вручную.
! Источник: data/ipcheck.txt
||2ip.io^
||2ip.ru^
||bigdatacloud.net^
||browserleaks.com^
||criminalip.io^
||db-ip.com^
||dnsleaktest.com^
||fraudguard.io^
||getipintel.net^
||icanhazip.com^
||ifconfig.co^
||ifconfig.io^
||ifconfig.me^
||ip-api.com^
||ip.sb^
||ip2location.com^
||ipaddress.is^
||ipapi.co^
||ipapi.is^
||ipbase.com^
||ipdata.co^
||ipgeolocation.io^
||iphub.info^
||ipify.org^
||ipinfo.io^
||ipleak.net^
||ipqualityscore.com^
||ipregistry.co^
||ipwhois.io^
||maxmind.com^
||myip.com^
||proxycheck.io^
||scamalytics.com^
||spur.us^
||vpnapi.io^
||whatismyip.com^
||whatismyipaddress.com^
||whoer.com^
||whoer.net^
+6
View File
@@ -0,0 +1,6 @@
! ipcheck-domains — категория: leak-test
! Правил: 3. Файл генерируется автоматически, не редактируйте вручную.
! Источник: data/leak-test.txt
||browserleaks.com^
||dnsleaktest.com^
||ipleak.net^
+12
View File
@@ -0,0 +1,12 @@
# ipcheck-domains — категория: fraud-score
# Правил: 9. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/fraud-score.txt
DOMAIN-SUFFIX,criminalip.io
DOMAIN-SUFFIX,fraudguard.io
DOMAIN-SUFFIX,getipintel.net
DOMAIN-SUFFIX,iphub.info
DOMAIN-SUFFIX,ipqualityscore.com
DOMAIN-SUFFIX,proxycheck.io
DOMAIN-SUFFIX,scamalytics.com
DOMAIN-SUFFIX,spur.us
DOMAIN-SUFFIX,vpnapi.io
+13
View File
@@ -0,0 +1,13 @@
# ipcheck-domains — категория: fraud-score
# Правил: 9. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/fraud-score.txt
payload:
- '+.criminalip.io'
- '+.fraudguard.io'
- '+.getipintel.net'
- '+.iphub.info'
- '+.ipqualityscore.com'
- '+.proxycheck.io'
- '+.scamalytics.com'
- '+.spur.us'
- '+.vpnapi.io'
+12
View File
@@ -0,0 +1,12 @@
# ipcheck-domains — категория: geoip-db
# Правил: 9. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/geoip-db.txt
DOMAIN-SUFFIX,bigdatacloud.net
DOMAIN-SUFFIX,db-ip.com
DOMAIN-SUFFIX,ip2location.com
DOMAIN-SUFFIX,ipbase.com
DOMAIN-SUFFIX,ipdata.co
DOMAIN-SUFFIX,ipgeolocation.io
DOMAIN-SUFFIX,ipregistry.co
DOMAIN-SUFFIX,ipwhois.io
DOMAIN-SUFFIX,maxmind.com
+13
View File
@@ -0,0 +1,13 @@
# ipcheck-domains — категория: geoip-db
# Правил: 9. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/geoip-db.txt
payload:
- '+.bigdatacloud.net'
- '+.db-ip.com'
- '+.ip2location.com'
- '+.ipbase.com'
- '+.ipdata.co'
- '+.ipgeolocation.io'
- '+.ipregistry.co'
- '+.ipwhois.io'
- '+.maxmind.com'
+21
View File
@@ -0,0 +1,21 @@
# ipcheck-domains — категория: ip-lookup
# Правил: 18. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/ip-lookup.txt
DOMAIN-SUFFIX,2ip.io
DOMAIN-SUFFIX,2ip.ru
DOMAIN-SUFFIX,icanhazip.com
DOMAIN-SUFFIX,ifconfig.co
DOMAIN-SUFFIX,ifconfig.io
DOMAIN-SUFFIX,ifconfig.me
DOMAIN-SUFFIX,ip-api.com
DOMAIN-SUFFIX,ip.sb
DOMAIN-SUFFIX,ipaddress.is
DOMAIN-SUFFIX,ipapi.co
DOMAIN-SUFFIX,ipapi.is
DOMAIN-SUFFIX,ipify.org
DOMAIN-SUFFIX,ipinfo.io
DOMAIN-SUFFIX,myip.com
DOMAIN-SUFFIX,whatismyip.com
DOMAIN-SUFFIX,whatismyipaddress.com
DOMAIN-SUFFIX,whoer.com
DOMAIN-SUFFIX,whoer.net
+22
View File
@@ -0,0 +1,22 @@
# ipcheck-domains — категория: ip-lookup
# Правил: 18. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/ip-lookup.txt
payload:
- '+.2ip.io'
- '+.2ip.ru'
- '+.icanhazip.com'
- '+.ifconfig.co'
- '+.ifconfig.io'
- '+.ifconfig.me'
- '+.ip-api.com'
- '+.ip.sb'
- '+.ipaddress.is'
- '+.ipapi.co'
- '+.ipapi.is'
- '+.ipify.org'
- '+.ipinfo.io'
- '+.myip.com'
- '+.whatismyip.com'
- '+.whatismyipaddress.com'
- '+.whoer.com'
- '+.whoer.net'
+42
View File
@@ -0,0 +1,42 @@
# ipcheck-domains — категория: ipcheck
# Правил: 39. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/ipcheck.txt
DOMAIN-SUFFIX,2ip.io
DOMAIN-SUFFIX,2ip.ru
DOMAIN-SUFFIX,bigdatacloud.net
DOMAIN-SUFFIX,browserleaks.com
DOMAIN-SUFFIX,criminalip.io
DOMAIN-SUFFIX,db-ip.com
DOMAIN-SUFFIX,dnsleaktest.com
DOMAIN-SUFFIX,fraudguard.io
DOMAIN-SUFFIX,getipintel.net
DOMAIN-SUFFIX,icanhazip.com
DOMAIN-SUFFIX,ifconfig.co
DOMAIN-SUFFIX,ifconfig.io
DOMAIN-SUFFIX,ifconfig.me
DOMAIN-SUFFIX,ip-api.com
DOMAIN-SUFFIX,ip.sb
DOMAIN-SUFFIX,ip2location.com
DOMAIN-SUFFIX,ipaddress.is
DOMAIN-SUFFIX,ipapi.co
DOMAIN-SUFFIX,ipapi.is
DOMAIN-SUFFIX,ipbase.com
DOMAIN-SUFFIX,ipdata.co
DOMAIN-SUFFIX,ipgeolocation.io
DOMAIN-SUFFIX,iphub.info
DOMAIN-SUFFIX,ipify.org
DOMAIN-SUFFIX,ipinfo.io
DOMAIN-SUFFIX,ipleak.net
DOMAIN-SUFFIX,ipqualityscore.com
DOMAIN-SUFFIX,ipregistry.co
DOMAIN-SUFFIX,ipwhois.io
DOMAIN-SUFFIX,maxmind.com
DOMAIN-SUFFIX,myip.com
DOMAIN-SUFFIX,proxycheck.io
DOMAIN-SUFFIX,scamalytics.com
DOMAIN-SUFFIX,spur.us
DOMAIN-SUFFIX,vpnapi.io
DOMAIN-SUFFIX,whatismyip.com
DOMAIN-SUFFIX,whatismyipaddress.com
DOMAIN-SUFFIX,whoer.com
DOMAIN-SUFFIX,whoer.net
+43
View File
@@ -0,0 +1,43 @@
# ipcheck-domains — категория: ipcheck
# Правил: 39. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/ipcheck.txt
payload:
- '+.2ip.io'
- '+.2ip.ru'
- '+.bigdatacloud.net'
- '+.browserleaks.com'
- '+.criminalip.io'
- '+.db-ip.com'
- '+.dnsleaktest.com'
- '+.fraudguard.io'
- '+.getipintel.net'
- '+.icanhazip.com'
- '+.ifconfig.co'
- '+.ifconfig.io'
- '+.ifconfig.me'
- '+.ip-api.com'
- '+.ip.sb'
- '+.ip2location.com'
- '+.ipaddress.is'
- '+.ipapi.co'
- '+.ipapi.is'
- '+.ipbase.com'
- '+.ipdata.co'
- '+.ipgeolocation.io'
- '+.iphub.info'
- '+.ipify.org'
- '+.ipinfo.io'
- '+.ipleak.net'
- '+.ipqualityscore.com'
- '+.ipregistry.co'
- '+.ipwhois.io'
- '+.maxmind.com'
- '+.myip.com'
- '+.proxycheck.io'
- '+.scamalytics.com'
- '+.spur.us'
- '+.vpnapi.io'
- '+.whatismyip.com'
- '+.whatismyipaddress.com'
- '+.whoer.com'
- '+.whoer.net'
+6
View File
@@ -0,0 +1,6 @@
# ipcheck-domains — категория: leak-test
# Правил: 3. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/leak-test.txt
DOMAIN-SUFFIX,browserleaks.com
DOMAIN-SUFFIX,dnsleaktest.com
DOMAIN-SUFFIX,ipleak.net
+7
View File
@@ -0,0 +1,7 @@
# ipcheck-domains — категория: leak-test
# Правил: 3. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/leak-test.txt
payload:
- '+.browserleaks.com'
- '+.dnsleaktest.com'
- '+.ipleak.net'
+25
View File
@@ -0,0 +1,25 @@
³
FRAUD-SCORE␍criminalip.io␍fraudguard.iogetipintel.net
iphub.infoipqualityscore.com␍proxycheck.ioscamalytics.com spur.us vpnapi.io
­
GEOIP-DBbigdatacloud.net db-ip.comip2location.com
ipbase.com ipdata.coipgeolocation.io␍ipregistry.co
ipwhois.io maxmind.com
«
IP-LOOKUP
2ip.io
2ip.ru␍icanhazip.com ifconfig.co ifconfig.io ifconfig.me
ip-api.com ip.sb ipaddress.is ipapi.co ipapi.is ipify.org ipinfo.io myip.comwhatismyip.comwhatismyipaddress.com whoer.com whoer.net
­
IPCHECK
2ip.io
2ip.rubigdatacloud.netbrowserleaks.com␍criminalip.io db-ip.comdnsleaktest.com␍fraudguard.iogetipintel.net␍icanhazip.com ifconfig.co ifconfig.io ifconfig.me
ip-api.com ip.sbip2location.com ipaddress.is ipapi.co ipapi.is
ipbase.com ipdata.coipgeolocation.io
iphub.info ipify.org ipinfo.io
ipleak.netipqualityscore.com␍ipregistry.co
ipwhois.io maxmind.com myip.com␍proxycheck.ioscamalytics.com spur.us vpnapi.iowhatismyip.comwhatismyipaddress.com whoer.com whoer.net
F
LEAK-TESTbrowserleaks.comdnsleaktest.com
ipleak.net
+1
View File
@@ -0,0 +1 @@
40ac1b41d51aecabf178ff98ade8dfe2587bd6b49c66260331990774588b040c geosite.dat
+25
View File
@@ -0,0 +1,25 @@
³
FRAUD-SCORE␍criminalip.io␍fraudguard.iogetipintel.net
iphub.infoipqualityscore.com␍proxycheck.ioscamalytics.com spur.us vpnapi.io
­
GEOIP-DBbigdatacloud.net db-ip.comip2location.com
ipbase.com ipdata.coipgeolocation.io␍ipregistry.co
ipwhois.io maxmind.com
«
IP-LOOKUP
2ip.io
2ip.ru␍icanhazip.com ifconfig.co ifconfig.io ifconfig.me
ip-api.com ip.sb ipaddress.is ipapi.co ipapi.is ipify.org ipinfo.io myip.comwhatismyip.comwhatismyipaddress.com whoer.com whoer.net
­
IPCHECK
2ip.io
2ip.rubigdatacloud.netbrowserleaks.com␍criminalip.io db-ip.comdnsleaktest.com␍fraudguard.iogetipintel.net␍icanhazip.com ifconfig.co ifconfig.io ifconfig.me
ip-api.com ip.sbip2location.com ipaddress.is ipapi.co ipapi.is
ipbase.com ipdata.coipgeolocation.io
iphub.info ipify.org ipinfo.io
ipleak.netipqualityscore.com␍ipregistry.co
ipwhois.io maxmind.com myip.com␍proxycheck.ioscamalytics.com spur.us vpnapi.iowhatismyip.comwhatismyipaddress.com whoer.com whoer.net
F
LEAK-TESTbrowserleaks.comdnsleaktest.com
ipleak.net
+1
View File
@@ -0,0 +1 @@
40ac1b41d51aecabf178ff98ade8dfe2587bd6b49c66260331990774588b040c ipcheck.dat
+42
View File
@@ -0,0 +1,42 @@
{
"category": "fraud-score",
"count": 9,
"rules": [
{
"type": "domain",
"value": "criminalip.io"
},
{
"type": "domain",
"value": "fraudguard.io"
},
{
"type": "domain",
"value": "getipintel.net"
},
{
"type": "domain",
"value": "iphub.info"
},
{
"type": "domain",
"value": "ipqualityscore.com"
},
{
"type": "domain",
"value": "proxycheck.io"
},
{
"type": "domain",
"value": "scamalytics.com"
},
{
"type": "domain",
"value": "spur.us"
},
{
"type": "domain",
"value": "vpnapi.io"
}
]
}
+42
View File
@@ -0,0 +1,42 @@
{
"category": "geoip-db",
"count": 9,
"rules": [
{
"type": "domain",
"value": "bigdatacloud.net"
},
{
"type": "domain",
"value": "db-ip.com"
},
{
"type": "domain",
"value": "ip2location.com"
},
{
"type": "domain",
"value": "ipbase.com"
},
{
"type": "domain",
"value": "ipdata.co"
},
{
"type": "domain",
"value": "ipgeolocation.io"
},
{
"type": "domain",
"value": "ipregistry.co"
},
{
"type": "domain",
"value": "ipwhois.io"
},
{
"type": "domain",
"value": "maxmind.com"
}
]
}
+78
View File
@@ -0,0 +1,78 @@
{
"category": "ip-lookup",
"count": 18,
"rules": [
{
"type": "domain",
"value": "2ip.io"
},
{
"type": "domain",
"value": "2ip.ru"
},
{
"type": "domain",
"value": "icanhazip.com"
},
{
"type": "domain",
"value": "ifconfig.co"
},
{
"type": "domain",
"value": "ifconfig.io"
},
{
"type": "domain",
"value": "ifconfig.me"
},
{
"type": "domain",
"value": "ip-api.com"
},
{
"type": "domain",
"value": "ip.sb"
},
{
"type": "domain",
"value": "ipaddress.is"
},
{
"type": "domain",
"value": "ipapi.co"
},
{
"type": "domain",
"value": "ipapi.is"
},
{
"type": "domain",
"value": "ipify.org"
},
{
"type": "domain",
"value": "ipinfo.io"
},
{
"type": "domain",
"value": "myip.com"
},
{
"type": "domain",
"value": "whatismyip.com"
},
{
"type": "domain",
"value": "whatismyipaddress.com"
},
{
"type": "domain",
"value": "whoer.com"
},
{
"type": "domain",
"value": "whoer.net"
}
]
}
+162
View File
@@ -0,0 +1,162 @@
{
"category": "ipcheck",
"count": 39,
"rules": [
{
"type": "domain",
"value": "2ip.io"
},
{
"type": "domain",
"value": "2ip.ru"
},
{
"type": "domain",
"value": "bigdatacloud.net"
},
{
"type": "domain",
"value": "browserleaks.com"
},
{
"type": "domain",
"value": "criminalip.io"
},
{
"type": "domain",
"value": "db-ip.com"
},
{
"type": "domain",
"value": "dnsleaktest.com"
},
{
"type": "domain",
"value": "fraudguard.io"
},
{
"type": "domain",
"value": "getipintel.net"
},
{
"type": "domain",
"value": "icanhazip.com"
},
{
"type": "domain",
"value": "ifconfig.co"
},
{
"type": "domain",
"value": "ifconfig.io"
},
{
"type": "domain",
"value": "ifconfig.me"
},
{
"type": "domain",
"value": "ip-api.com"
},
{
"type": "domain",
"value": "ip.sb"
},
{
"type": "domain",
"value": "ip2location.com"
},
{
"type": "domain",
"value": "ipaddress.is"
},
{
"type": "domain",
"value": "ipapi.co"
},
{
"type": "domain",
"value": "ipapi.is"
},
{
"type": "domain",
"value": "ipbase.com"
},
{
"type": "domain",
"value": "ipdata.co"
},
{
"type": "domain",
"value": "ipgeolocation.io"
},
{
"type": "domain",
"value": "iphub.info"
},
{
"type": "domain",
"value": "ipify.org"
},
{
"type": "domain",
"value": "ipinfo.io"
},
{
"type": "domain",
"value": "ipleak.net"
},
{
"type": "domain",
"value": "ipqualityscore.com"
},
{
"type": "domain",
"value": "ipregistry.co"
},
{
"type": "domain",
"value": "ipwhois.io"
},
{
"type": "domain",
"value": "maxmind.com"
},
{
"type": "domain",
"value": "myip.com"
},
{
"type": "domain",
"value": "proxycheck.io"
},
{
"type": "domain",
"value": "scamalytics.com"
},
{
"type": "domain",
"value": "spur.us"
},
{
"type": "domain",
"value": "vpnapi.io"
},
{
"type": "domain",
"value": "whatismyip.com"
},
{
"type": "domain",
"value": "whatismyipaddress.com"
},
{
"type": "domain",
"value": "whoer.com"
},
{
"type": "domain",
"value": "whoer.net"
}
]
}
+18
View File
@@ -0,0 +1,18 @@
{
"category": "leak-test",
"count": 3,
"rules": [
{
"type": "domain",
"value": "browserleaks.com"
},
{
"type": "domain",
"value": "dnsleaktest.com"
},
{
"type": "domain",
"value": "ipleak.net"
}
]
}
+13
View File
@@ -0,0 +1,13 @@
{
"built_at": "2026-08-07T11:33:25Z",
"geosite_dat_sha256": "40ac1b41d51aecabf178ff98ade8dfe2587bd6b49c66260331990774588b040c",
"geosite_dat_size": 1420,
"total_rules": 78,
"categories": {
"fraud-score": 9,
"geoip-db": 9,
"ip-lookup": 18,
"ipcheck": 39,
"leak-test": 3
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+29
View File
@@ -0,0 +1,29 @@
{
"version": 1,
"rules": [
{
"domain": [
"criminalip.io",
"fraudguard.io",
"getipintel.net",
"iphub.info",
"ipqualityscore.com",
"proxycheck.io",
"scamalytics.com",
"spur.us",
"vpnapi.io"
],
"domain_suffix": [
".criminalip.io",
".fraudguard.io",
".getipintel.net",
".iphub.info",
".ipqualityscore.com",
".proxycheck.io",
".scamalytics.com",
".spur.us",
".vpnapi.io"
]
}
]
}
Binary file not shown.
+29
View File
@@ -0,0 +1,29 @@
{
"version": 1,
"rules": [
{
"domain": [
"bigdatacloud.net",
"db-ip.com",
"ip2location.com",
"ipbase.com",
"ipdata.co",
"ipgeolocation.io",
"ipregistry.co",
"ipwhois.io",
"maxmind.com"
],
"domain_suffix": [
".bigdatacloud.net",
".db-ip.com",
".ip2location.com",
".ipbase.com",
".ipdata.co",
".ipgeolocation.io",
".ipregistry.co",
".ipwhois.io",
".maxmind.com"
]
}
]
}
Binary file not shown.
+47
View File
@@ -0,0 +1,47 @@
{
"version": 1,
"rules": [
{
"domain": [
"2ip.io",
"2ip.ru",
"icanhazip.com",
"ifconfig.co",
"ifconfig.io",
"ifconfig.me",
"ip-api.com",
"ip.sb",
"ipaddress.is",
"ipapi.co",
"ipapi.is",
"ipify.org",
"ipinfo.io",
"myip.com",
"whatismyip.com",
"whatismyipaddress.com",
"whoer.com",
"whoer.net"
],
"domain_suffix": [
".2ip.io",
".2ip.ru",
".icanhazip.com",
".ifconfig.co",
".ifconfig.io",
".ifconfig.me",
".ip-api.com",
".ip.sb",
".ipaddress.is",
".ipapi.co",
".ipapi.is",
".ipify.org",
".ipinfo.io",
".myip.com",
".whatismyip.com",
".whatismyipaddress.com",
".whoer.com",
".whoer.net"
]
}
]
}
Binary file not shown.
+89
View File
@@ -0,0 +1,89 @@
{
"version": 1,
"rules": [
{
"domain": [
"2ip.io",
"2ip.ru",
"bigdatacloud.net",
"browserleaks.com",
"criminalip.io",
"db-ip.com",
"dnsleaktest.com",
"fraudguard.io",
"getipintel.net",
"icanhazip.com",
"ifconfig.co",
"ifconfig.io",
"ifconfig.me",
"ip-api.com",
"ip.sb",
"ip2location.com",
"ipaddress.is",
"ipapi.co",
"ipapi.is",
"ipbase.com",
"ipdata.co",
"ipgeolocation.io",
"iphub.info",
"ipify.org",
"ipinfo.io",
"ipleak.net",
"ipqualityscore.com",
"ipregistry.co",
"ipwhois.io",
"maxmind.com",
"myip.com",
"proxycheck.io",
"scamalytics.com",
"spur.us",
"vpnapi.io",
"whatismyip.com",
"whatismyipaddress.com",
"whoer.com",
"whoer.net"
],
"domain_suffix": [
".2ip.io",
".2ip.ru",
".bigdatacloud.net",
".browserleaks.com",
".criminalip.io",
".db-ip.com",
".dnsleaktest.com",
".fraudguard.io",
".getipintel.net",
".icanhazip.com",
".ifconfig.co",
".ifconfig.io",
".ifconfig.me",
".ip-api.com",
".ip.sb",
".ip2location.com",
".ipaddress.is",
".ipapi.co",
".ipapi.is",
".ipbase.com",
".ipdata.co",
".ipgeolocation.io",
".iphub.info",
".ipify.org",
".ipinfo.io",
".ipleak.net",
".ipqualityscore.com",
".ipregistry.co",
".ipwhois.io",
".maxmind.com",
".myip.com",
".proxycheck.io",
".scamalytics.com",
".spur.us",
".vpnapi.io",
".whatismyip.com",
".whatismyipaddress.com",
".whoer.com",
".whoer.net"
]
}
]
}
Binary file not shown.
+17
View File
@@ -0,0 +1,17 @@
{
"version": 1,
"rules": [
{
"domain": [
"browserleaks.com",
"dnsleaktest.com",
"ipleak.net"
],
"domain_suffix": [
".browserleaks.com",
".dnsleaktest.com",
".ipleak.net"
]
}
]
}
Binary file not shown.
+13
View File
@@ -0,0 +1,13 @@
# ipcheck-domains — категория: fraud-score
# Правил: 9. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/fraud-score.txt
criminalip.io
fraudguard.io
getipintel.net
iphub.info
ipqualityscore.com
proxycheck.io
scamalytics.com
spur.us
vpnapi.io
+13
View File
@@ -0,0 +1,13 @@
# ipcheck-domains — категория: geoip-db
# Правил: 9. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/geoip-db.txt
bigdatacloud.net
db-ip.com
ip2location.com
ipbase.com
ipdata.co
ipgeolocation.io
ipregistry.co
ipwhois.io
maxmind.com
+22
View File
@@ -0,0 +1,22 @@
# ipcheck-domains — категория: ip-lookup
# Правил: 18. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/ip-lookup.txt
2ip.io
2ip.ru
icanhazip.com
ifconfig.co
ifconfig.io
ifconfig.me
ip-api.com
ip.sb
ipaddress.is
ipapi.co
ipapi.is
ipify.org
ipinfo.io
myip.com
whatismyip.com
whatismyipaddress.com
whoer.com
whoer.net
+43
View File
@@ -0,0 +1,43 @@
# ipcheck-domains — категория: ipcheck
# Правил: 39. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/ipcheck.txt
2ip.io
2ip.ru
bigdatacloud.net
browserleaks.com
criminalip.io
db-ip.com
dnsleaktest.com
fraudguard.io
getipintel.net
icanhazip.com
ifconfig.co
ifconfig.io
ifconfig.me
ip-api.com
ip.sb
ip2location.com
ipaddress.is
ipapi.co
ipapi.is
ipbase.com
ipdata.co
ipgeolocation.io
iphub.info
ipify.org
ipinfo.io
ipleak.net
ipqualityscore.com
ipregistry.co
ipwhois.io
maxmind.com
myip.com
proxycheck.io
scamalytics.com
spur.us
vpnapi.io
whatismyip.com
whatismyipaddress.com
whoer.com
whoer.net
+7
View File
@@ -0,0 +1,7 @@
# ipcheck-domains — категория: leak-test
# Правил: 3. Файл генерируется автоматически, не редактируйте вручную.
# Источник: data/leak-test.txt
browserleaks.com
dnsleaktest.com
ipleak.net
+9
View File
@@ -0,0 +1,9 @@
criminalip.io
fraudguard.io
getipintel.net
iphub.info
ipqualityscore.com
proxycheck.io
scamalytics.com
spur.us
vpnapi.io
+9
View File
@@ -0,0 +1,9 @@
bigdatacloud.net
db-ip.com
ip2location.com
ipbase.com
ipdata.co
ipgeolocation.io
ipregistry.co
ipwhois.io
maxmind.com
+18
View File
@@ -0,0 +1,18 @@
2ip.io
2ip.ru
icanhazip.com
ifconfig.co
ifconfig.io
ifconfig.me
ip-api.com
ip.sb
ipaddress.is
ipapi.co
ipapi.is
ipify.org
ipinfo.io
myip.com
whatismyip.com
whatismyipaddress.com
whoer.com
whoer.net
+39
View File
@@ -0,0 +1,39 @@
2ip.io
2ip.ru
bigdatacloud.net
browserleaks.com
criminalip.io
db-ip.com
dnsleaktest.com
fraudguard.io
getipintel.net
icanhazip.com
ifconfig.co
ifconfig.io
ifconfig.me
ip-api.com
ip.sb
ip2location.com
ipaddress.is
ipapi.co
ipapi.is
ipbase.com
ipdata.co
ipgeolocation.io
iphub.info
ipify.org
ipinfo.io
ipleak.net
ipqualityscore.com
ipregistry.co
ipwhois.io
maxmind.com
myip.com
proxycheck.io
scamalytics.com
spur.us
vpnapi.io
whatismyip.com
whatismyipaddress.com
whoer.com
whoer.net
+3
View File
@@ -0,0 +1,3 @@
browserleaks.com
dnsleaktest.com
ipleak.net
+74
View File
@@ -0,0 +1,74 @@
#!/bin/sh
# Обновляет локальный ipcheck.dat из ветки release. Рассчитан на запуск по cron.
#
# Скачивает файл, только если его sha256 отличается от локального, проверяет
# контрольную сумму до подмены и перезапускает сервис только когда файл реально
# изменился. Молчит, если обновлять нечего, — cron не будет слать письма впустую.
#
# ./update-geosite.sh
# BASE_URL=https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release \
# DEST=/usr/local/x-ui/bin/ipcheck.dat RESTART_CMD='x-ui restart' ./update-geosite.sh
#
# Коды возврата: 0 — обновлено или уже актуально, 1 — ошибка.
set -eu
BASE_URL="${BASE_URL:-https://gitea.hsrv.site/mrleo1nid/ipcheck-domains/raw/branch/release}"
DEST="${DEST:-/usr/local/x-ui/bin/ipcheck.dat}"
NAME="${NAME:-$(basename "$DEST")}"
RESTART_CMD="${RESTART_CMD:-}"
TIMEOUT="${TIMEOUT:-30}"
log() { printf '%s update-geosite: %s\n' "$(date -u '+%Y-%m-%dT%H:%M:%SZ')" "$*"; }
die() { log "ОШИБКА: $*" >&2; exit 1; }
command -v curl >/dev/null 2>&1 || die "нужен curl"
if command -v sha256sum >/dev/null 2>&1; then
hash_of() { sha256sum "$1" | cut -d' ' -f1; }
elif command -v shasum >/dev/null 2>&1; then
hash_of() { shasum -a 256 "$1" | cut -d' ' -f1; }
else
die "нужен sha256sum или shasum"
fi
fetch() { curl -fsSL --retry 3 --retry-delay 2 --max-time "$TIMEOUT" "$1"; }
# Без промежуточной переменной статус вернул бы cut, а не curl.
remote_line=$(fetch "$BASE_URL/$NAME.sha256sum") ||
die "не удалось скачать $BASE_URL/$NAME.sha256sum"
remote_sum=$(printf '%s' "$remote_line" | cut -d' ' -f1)
case "$remote_sum" in
[0-9a-f][0-9a-f]*) [ "${#remote_sum}" -eq 64 ] || die "битая контрольная сумма: $remote_sum" ;;
*) die "битая контрольная сумма: $remote_sum" ;;
esac
if [ -f "$DEST" ] && [ "$(hash_of "$DEST")" = "$remote_sum" ]; then
exit 0 # уже актуально — тишина
fi
tmp=$(mktemp "${TMPDIR:-/tmp}/ipcheck.XXXXXX") || die "не удалось создать временный файл"
trap 'rm -f "$tmp"' EXIT INT TERM
fetch "$BASE_URL/$NAME" > "$tmp" || die "не удалось скачать $BASE_URL/$NAME"
got=$(hash_of "$tmp")
[ "$got" = "$remote_sum" ] || die "контрольная сумма не совпала: ожидалось $remote_sum, получено $got"
[ -s "$tmp" ] || die "скачан пустой файл"
mkdir -p "$(dirname "$DEST")"
if [ -f "$DEST" ]; then
cp -p "$DEST" "$DEST.bak" || die "не удалось сохранить резервную копию"
fi
# mv в пределах одного каталога атомарен: Xray никогда не увидит половину файла.
cat "$tmp" > "$DEST.new" && mv -f "$DEST.new" "$DEST" || die "не удалось записать $DEST"
log "обновлён $DEST (sha256 $remote_sum)"
if [ -n "$RESTART_CMD" ]; then
if sh -c "$RESTART_CMD"; then
log "выполнено: $RESTART_CMD"
else
die "перезапуск не удался: $RESTART_CMD"
fi
fi