IP API и эндпоинты для командной строки

Узнайте свой публичный IP-адрес из скрипта, оболочки или задания cron: простой текст для curl, JSON с подробностями и хосты только с IPv4 или только с IPv6, когда нужно конкретное семейство. Без ключа, без аккаунта, 600 запросов в минуту с одного адреса.

Последнее обновление: 21 октября 2026 г.

Быстрый старт: узнать IP через curl

text
curl checkmyip.com/raw
203.0.113.42

Для большинства задач это и есть весь API: один запрос, адрес, перевод строки. curl -4 и curl -6 принудительно выбирают семейство; curl checkmyip.com/json возвращает подробности ниже. Любой клиент, отправляющий Accept: text/plain или User-Agent командной строки, получает голый адрес с /raw; браузеры получают обычную страницу.

shell · live
$ 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/jsonJSON: 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 для поисковиков. Результаты для чужих адресов кешируются на десять минут.

GEThttps://checkmyip.com/raw
Plain text: your address + newline.
GEThttps://checkmyip.com/ip
Alias of /raw.
GEThttps://checkmyip.com/ip.txt
Alias of /raw with a file extension, for tools that want one.
GEThttps://checkmyip.com/
Plain text when the User-Agent is curl, wget, PowerShell or another non-browser, or when Accept: text/plain is sent; the HTML page otherwise.
GEThttps://checkmyip.com/json
JSON for your own address: live Cloudflare edge data, enriched by the lookup service within an 800 ms budget.
GEThttps://checkmyip.com/json?ip=203.0.113.9
JSON for any public address (lookup service). 503 with an error body when the service is unreachable — never guessed data.

All 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

text
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.country

wget

text
wget -qO- https://checkmyip.com/raw

PowerShell

text
(Invoke-WebRequest -Uri https://checkmyip.com/raw -UseBasicParsing).Content.Trim()
(Invoke-RestMethod -Uri https://checkmyip.com/json).network.asn

Python

text
import urllib.request
ip = urllib.request.urlopen("https://checkmyip.com/raw", timeout=5).read().decode().strip()
print(ip)

JavaScript (fetch)

text
const r = await fetch("https://checkmyip.com/json", { cache: "no-store" });
const { ip, geo } = await r.json();
console.log(ip, geo.consensus.country);

Go

text
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

text
#!/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, а политика конфиденциальности распространяется на эндпоинты так же, как на страницы.