IP API и эндпоинты для командной строки
Узнайте свой публичный IP-адрес из скрипта, оболочки или задания cron: простой текст для curl, JSON с подробностями и хосты только с IPv4 или только с IPv6, когда нужно конкретное семейство. Без ключа, без аккаунта, 600 запросов в минуту с одного адреса.
Быстрый старт: узнать IP через curl
curl checkmyip.com/raw
203.0.113.42Для большинства задач это и есть весь API: один запрос, адрес, перевод строки. curl -4 и curl -6 принудительно выбирают семейство; curl checkmyip.com/json возвращает подробности ниже. Любой клиент, отправляющий Accept: text/plain или User-Agent командной строки, получает голый адрес с /raw; браузеры получают обычную страницу.
$ curl checkmyip.com
216.73.216.52
$ curl -H "Accept: text/plain" https://checkmyip.com/
216.73.216.52 Эндпоинты
| Эндпоинт | Возвращает | Примечания |
|---|---|---|
GET https://checkmyip.com/raw | ваш IP простым текстом с переводом строки в конце | также GET / с User-Agent curl/wget/PowerShell |
GET https://checkmyip.com/ip · /ip.txt | тот же адрес простым текстом (псевдонимы для скриптов, ожидающих эти пути) | Cache-Control: no-store |
GET https://checkmyip.com/json | JSON: ip, version, geo, network, type, сводка risk (поля ниже) | Cache-Control: private, no-store |
GET https://checkmyip.com/json?ip=203.0.113.42 | тот же JSON для любого публичного адреса | тот же лимит 600/мин |
GET https://ipv4.checkmyip.com/ip | {ip, family: 4, …} только по IPv4 | не сработает без пути IPv4 |
GET https://ipv6.checkmyip.com/ip | {ip, family: 6, …} только по IPv6 | не сработает без пути IPv6 |
GET https://ds.checkmyip.com/ip | семейство, которое предпочитает клиент, когда работают оба | ?format=text для голого вывода |
Все эндпоинты отвечают по HTTPS с CORS для чтения, отправляют Cache-Control: no-store и помечены noindex для поисковиков. Результаты для чужих адресов кешируются на десять минут.
https://checkmyip.com/rawhttps://checkmyip.com/iphttps://checkmyip.com/ip.txthttps://checkmyip.com/https://checkmyip.com/jsonhttps://checkmyip.com/json?ip=203.0.113.9All of them send Cache-Control: private, no-store, Access-Control-Allow-Origin: * and X-Robots-Tag: noindex; api-ключ не нужен.
Поля JSON-ответа
ip — адрес строкой. version — 4 или 6. geo.consensus — country (ISO 3166-1 alpha-2), region, city, lat, lon, timezone, confidence (0–1), disagreement (boolean), anycast (boolean); geo.sources[] — ответ каждой базы с updated, licence и attribution. network — asn, as_name, as_org, prefix, rir, allocation_date, registry_country, abuse_contacts[]. hostname — PTR-имя или null. type.type — residential, mobile, business, datacenter или unknown, с confidence и reasons[]. risk — is_proxy, is_vpn, is_tor, is_datacenter, is_relay, score (0–100), level, reasons[], blacklists[] и score_version. Отсутствующее значение — null с причиной в status или note; эвристические вердикты так и помечены. Строки атрибуции обязательно показывать, если вы выводите данные геолокации пользователям (условия CC BY 4.0 / CC BY-SA 4.0).
Two fields are additive on top of the list above: schema_version (the lookup service's response schema, 1.1 today; fields are only ever added) and geo.agreement — the per-field tally behind the consensus (country_sources, country_source_ids, city_sources, city_source_ids, the disagreeing ids and a one-line summary such as “country confirmed by 3 sources, city from 2”). network.origins[] lists every ASN that originates the address (asn, as_name, as_org, named_by[], primary; network.multi_origin is true when there is more than one and network.note says which was chosen as primary). risk.factors[] carries the score arithmetic (id, label, points, source; sum = score before the cap at 100) and risk.reasons[] the same signals as full sentences. A tied city vote sets geo.consensus.city to null and lists the options in geo.consensus.city_candidates[]; geo.consensus.tie_break says what rule applied. hosted_domains (full lookups only) is the IP2WHOIS hosted-domain block: status (ok, cached, budget_exhausted with retry_after, no-data, skipped on fast answers), total_domains, domains[] (a sample — the free plan returns one name per page), page/total_pages and the attribution string, which must be shown with the names. Own-address answers also carry colo (the Cloudflare data centre that served you) and cache (live or edge ≤10 min).
Примеры кода
Каждый пример печатает публичный адрес машины, на которой запущен.
curl
curl -s https://checkmyip.com/raw
curl -s -4 https://checkmyip.com/raw # только IPv4
curl -s -6 https://checkmyip.com/raw # только IPv6
curl -s https://checkmyip.com/json | jq .geo.consensus.countrywget
wget -qO- https://checkmyip.com/rawPowerShell
(Invoke-WebRequest -Uri https://checkmyip.com/raw -UseBasicParsing).Content.Trim()
(Invoke-RestMethod -Uri https://checkmyip.com/json).network.asnPython
import urllib.request
ip = urllib.request.urlopen("https://checkmyip.com/raw", timeout=5).read().decode().strip()
print(ip)JavaScript (fetch)
const r = await fetch("https://checkmyip.com/json", { cache: "no-store" });
const { ip, geo } = await r.json();
console.log(ip, geo.consensus.country);Go
resp, err := http.Get("https://checkmyip.com/raw")
if err != nil { log.Fatal(err) }
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
fmt.Println(strings.TrimSpace(string(b)))Bash-скрипты и cron
#!/bin/sh
# уведомлять о смене публичного IP (запускать из cron каждые 5 минут)
new=$(curl -fsS --max-time 5 https://checkmyip.com/raw) || exit 0
old=$(cat /var/tmp/public-ip 2>/dev/null)
[ "$new" != "$old" ] && { echo "$new" > /var/tmp/public-ip; logger "public IP changed: $old -> $new"; }Используйте --max-time, считайте сбой неизвестным состоянием, а не изменением, и опрашивайте не чаще раза в минуту.
Лимиты и добросовестное использование
/raw, /ip, /ip.txt, /json, /json?ip= и хосты /ip для конкретного семейства допускают 600 запросов в минуту с адреса; проверка портов — 20 в минуту и только для собственного адреса вызывающего. Превышение лимита возвращает HTTP 429 с телом ошибки в JSON. Эндпоинты бесплатны для личного, внутреннего и коммерческого использования в этих пределах; если вы ожидаете стабильный объём выше или хотите встроить наши данные в продукт, сначала напишите нам через страницу контактов. Пожалуйста, не используйте страницы для людей из скриптов — они тяжелее и медленнее эндпоинтов выше.
Доступность и статус
Эндпоинты работают в той же сети на краю, что и сайт, и постоянно мониторятся; эндпоинт /healthz нашего тестового сервера сообщает версию и аптайм. Публичная страница статуса запланирована. Изменения формата ответа анонсируются на этой странице заранее; существующие поля никогда не переименовываются, только добавляются.
Частые вопросы
Есть ли бесплатный IP API?
Да. Эндпоинты на этой странице возвращают ваш публичный адрес простым текстом или JSON без ключа и аккаунта в пределах лимитов выше, а /json?ip= возвращает тот же JSON для любого публичного адреса. Страница проверки IP-адреса показывает те же данные для людей.
Законны ли IP-грабберы?
«IP-граббер» — ссылка или картинка, которая записывает адрес того, кто её открыл. Логировать адреса посетителей собственного сайта законно и обычно; обманом заставить кого-то раскрыть адрес, чтобы преследовать, найти или атаковать его, — там уже вмешивается закон. Наши эндпоинты возвращают только адрес клиента, который их вызвал.
Есть ли у API IP-адрес?
У любого сервера, отвечающего на API, есть IP-адрес, включая наш. Вопрос, который обычно стоит за этим, — «может ли программа узнать свой публичный адрес?» — и есть назначение этих эндпоинтов: программа спрашивает нас, а мы отвечаем адресом, с которого пришёл запрос.
Что такое API «мой IP-адрес»?
Веб-эндпоинт, который отвечает адресом того, кто его вызвал. https://checkmyip.com/raw возвращает его текстом, а https://checkmyip.com/json — с местоположением, сетью и признаками риска, как описано выше.
Что делает curl ifconfig.me?
ifconfig.me — ещё один сайт, возвращающий адрес вызывающего при запросе через curl. curl checkmyip.com/raw делает то же самое здесь; JSON-эндпоинт дополнительно даёт поля сети и местоположения.
Как узнать IP-адрес через curl?
Выполните curl -s https://checkmyip.com/raw в любом терминале с доступом в интернет. Добавьте -4 или -6, чтобы принудительно выбрать IPv4 или IPv6. Вывод — адрес и перевод строки, что безопасно для скриптов.
Безопасен ли ifconfig.me?
За другие сервисы мы ручаться не можем. За наш: запросы обрабатываются без сохранения вашего адреса, ответ отдаётся по HTTPS, а политика конфиденциальности распространяется на эндпоинты так же, как на страницы.