Check-host.net - получить информацию про IP по 5 гео базам - bash - python - 2026

Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2026
Перейти к:навигация, поиск

check-host.net предоставляет страницу /ip-info, где можно посмотреть информацию об IP-адресе из нескольких гео-баз одновременно. Данный скрипт автоматизирует сбор этих данных и выводит сводную таблицу.

Полный код

#!/usr/bin/env bash

read -rp "Введите IP: " IP

URL="https://check-host.net/ip-info?host=$IP"
TMP=$(mktemp)

echo
echo "========================================="
echo "GeoIP информация для $IP"
echo "Источник: Check-Host"
echo "========================================="
echo

if ! curl -fsSL "$URL" -o "$TMP"; then
    echo "Ошибка загрузки страницы."
    rm -f "$TMP"
    exit 1
fi

python3 - "$TMP" <<'PY'
from bs4 import BeautifulSoup
import sys
import re

with open(sys.argv[1], encoding="utf-8", errors="ignore") as f:
    html = f.read()

soup = BeautifulSoup(html, "html.parser")

wanted = [
    "DB-IP",
    "IPGeolocation.io",
    "IP2Location",
    "MaxMind GeoIP",
    "IPInfo.io",
    "CloudFlare CDN",
]

rows = []

for h in soup.find_all(["h2","h3","h4","h5","h6","strong","b"]):
    text = " ".join(h.get_text(" ", strip=True).split())

    for name in wanted:
        if name.lower() not in text.lower():
            continue

        country = "-"

        table = h.find_next("table")
        if table:
            for tr in table.find_all("tr"):
                cols = tr.find_all(["td","th"])
                if len(cols) < 2:
                    continue

                key = cols[0].get_text(" ", strip=True).lower()

                if key == "country":
                    country = cols[1].get_text(" ", strip=True)
                    break

        rows.append((name, country))
        break

if not rows:
    print("Не удалось получить данные.")
    sys.exit(1)

print(f'{"База":<20} Страна')
print("-" * 45)

countries = set()

for name, country in rows:
    print(f'{name:<20} {country}')
    if country != "-":
        countries.add(country)

print("-" * 45)

if len(countries) == 1:
    print(f"✔ Все базы совпадают ({next(iter(countries))})")
else:
    print(f"⚠ Найдено {len(countries)} разных стран:")
    for c in sorted(countries):
        print(f"  • {c}")
PY

rm -f "$TMP"

Описание работы

Скрипт последовательно выполняет следующие действия:

  1. Запрашивает у пользователя IP-адрес.
  2. Формирует URL вида https://check-host.net/ip-info?host=<IP>.
  3. Скачивает HTML-страницу при помощи curl.
  4. Передаёт HTML в Python-скрипт (встроенный heredoc), который использует BeautifulSoup для парсинга.
  5. Ищет на странице 6 гео-баз: DB-IP, IPGeolocation.io, IP2Location, MaxMind GeoIP, IPInfo.io, CloudFlare CDN.
  6. Для каждой найденной базы извлекает название страны из первой расположенной рядом таблицы (по ключу country).
  7. Выводит результат в виде таблицы и итоговый вердикт — совпадают ли базы.

Пример вывода

=========================================
  GeoIP информация для 8.8.8.8
  Источник: Check-Host
  =========================================

  База                 Страна
  ---------------------------------------------
  DB-IP                United States
  IPGeolocation.io     United States
  IP2Location          United States
  MaxMind GeoIP        United States
  IPInfo.io            United States
  CloudFlare CDN       United States
  ---------------------------------------------
  ✔ Все базы совпадают (United States)

Зависимости

  • bash — оболочка для запуска.
  • curl — загрузка HTML-страницы.
  • python3 — интерпретатор Python.
  • BeautifulSoup (bs4) — парсинг HTML (устанавливается через pip install beautifulsoup4).
  • html.parser — встроенный парсер Python (не требует дополнительной установки).

Резюме

Скрипт представляет собой удобный инструмент для быстрой проверки геолокации IP-адреса по шести независимым базам данных через сервис check-host.net. Он позволяет наглядно увидеть, согласованы ли данные между разными провайдерами GeoIP-информации. Если базы расходятся — можно сделать вывод о возможной неточности или конфликте данных.

Ссылки

×
Реклама
← В главную
ИКС 88x31 - Visitor counter