Мой IP-адрес
Использование терминала и системного окружения
Говорим только о том, как пользоваться терминалом: для каждого «часто используемого варианта» даём команду + объясняем, какую проблему она решает (стек протоколов, формат вывода, таймауты, ретраи, смысл путей).
macOS / Linux / Raspberry Pi / BSD
Самые частые требования в терминале: вывод должен быть чистым (одна строка, которую можно копировать/записывать/сравнивать) и скрипт не должен зависать. Поэтому рекомендуемый формат по умолчанию включает: тихий режим (не «загрязнять» вывод) + HTTPS (не уйти на неверный протокол) + при необходимости таймауты (не зависать).
Базовое использование (самое рекомендуемое)
curl -4 my.ipin.io
C:\Users\admin>curl -4 my.ipin.io
171.83.40.149
-s: отключает прогресс/подсказки, чтобы вывод был «чище» (в скриптах не смешивать с шумом).https://: настоятельно рекомендуется писать полный протокол, чтобы в некоторых средах не использовать по умолчанию http и не получить редирект/перехват/проблемы с политиками портов.- Корневой путь
/: строго выводит IPv4; если IPv4 недоступен — запрос явно падает (чтобы не принять IPv6 за IPv4).
Часто используемые варианты (самый ходовой набор в реальной инженерии)
# A1) Только IPv6 (для проверки/диагностики IPv6)
curl -s https://my.ipin.io/v6
# A2) Краткая сводка по локации (текстовый вывод, удобнее читать в терминале)
curl -s https://my.ipin.io/info
# A3) Принудительно получить JSON в терминале (сменить UA на не-curl)
curl -s -A "Mozilla/5.0" https://my.ipin.io/info
# A4) Принудительно IPv4 / принудительно IPv6 (понять, какой стек реально используется для подключения)
curl -s -4 https://my.ipin.io
curl -s -6 https://my.ipin.io/v6
# A5) Добавить таймауты (обязательно для скриптов: чтобы не зависать при сетевых колебаниях)
curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io
# A6) Добавить ретраи (слабая сеть/редкие колебания: рекомендуется 1–2 раза)
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info
Пояснения к вариантам (то, что действительно нужно знать)
/v6: на уровне эндпоинта возвращает только IPv6; используется для «явной проверки, доступен ли IPv6»./info: на уровне эндпоинта возвращает IP + поля локации; в терминале это более «читаемый» вывод, подходит для «визуальной проверки выхода».-A "Mozilla/5.0": управление форматом вывода. По умолчанию UA curl содержит curl → сервис возвращает текст; меняем UA → сервис возвращает JSON.-4/-6: принудительно задаёт стек протоколов на уровне соединения (клиент подключается только по v4/v6), часто используется для выяснения «почему я всё время ухожу в v6».--connect-timeout: отвечает только за этап «установления соединения»; медленный handshake/коннект будет прерван здесь.--max-time: верхняя граница общего времени запроса; самое важное в автоматизации (защита от зависания).--retry: повышает шанс успеха, но рекомендуется мало ретраев (1–2). Слишком много ретраев замедляет задачи и усиливает сбои.
Android (Termux)
Типичные проблемы Termux: мобильная сеть сильнее «дрожит», маршрут сложнее, выбор стека протоколов менее стабилен. Поэтому рекомендуется по умолчанию: фиксировать стек + таймауты + ретраи при необходимости.
Базовое использование (рекомендуется)
curl -s -4 --connect-timeout 5 --max-time 10 https://my.ipin.io
Часто используемые варианты
# B1) Краткая сводка по локации (быстро проверить место выхода)
curl -s https://my.ipin.io/info
# B2) Проверка IPv6 (только если вы явно хотите тестировать IPv6)
curl -s -6 https://my.ipin.io/v6
# B3) Слабая сеть: небольшое число ретраев
curl -s --retry 2 --connect-timeout 5 --max-time 10 https://my.ipin.io
Пояснения к вариантам
-4: если вам нужен именно IPv4 — фиксируйте его, чтобы приоритет IPv6 в окружении не приводил к «плавающим» результатам./info: на мобильной сети выход часто меняется; так проще всего проверить, соответствует ли локация ожиданиям.- Стратегия ретраев: на мобильной сети часты разовые таймауты; небольшое число ретраев заметно повышает шанс успеха.
Windows (CMD / PowerShell)
В Windows полезно разделять сценарии: CMD/батчи — это скорее «получить одну строку текста»; PowerShell — «получить JSON и сразу распарсить поля».
Базовое использование (текст: одна строка IP)
curl.exe -s https://my.ipin.io
Часто используемые варианты
# C1) Краткая сводка по локации (читаемо в терминале)
curl.exe -s https://my.ipin.io/info
# C2) PowerShell получает JSON (удобно для парсинга в скриптах)
Invoke-RestMethod -Uri "https://my.ipin.io/info"
# C3) Проверка IPv6
curl.exe -s https://my.ipin.io/v6
# C4) Диагностика соединения (DNS, handshake, причины таймаутов; вывод длинный)
curl.exe -v https://my.ipin.io/info
Пояснения к вариантам
Invoke-RestMethod: удобно для JSON-сценариев — не нужно вручную парсить.-v: только для диагностики. Выводит много отладочной информации — не включайте по умолчанию в скриптах.- Частые источники проблем: системный прокси, корпоративный шлюз, подмена DNS, правила hosts приводят к тому, что «одна и та же команда» ведёт себя по-разному на разных машинах.
iOS (iSH / лёгкий терминал)
В лёгких терминалах часто есть только wget. Обратите внимание: UA wget по умолчанию часто не содержит curl, поэтому нередко вы получаете JSON.
Если вам нужна «одна строка текста», нужно явно задать UA, чтобы включить текстовый вывод для терминала.
Базовое использование
wget -qO- https://my.ipin.io
Часто используемые варианты
# D1) Краткая сводка по локации
wget -qO- https://my.ipin.io/info
# D2) Принудительно чистый текст (одна строка IP)
wget -qO- -U "curl/8" https://my.ipin.io
# D3) Принудительно JSON (стабильная интеграция)
wget -qO- -U "Mozilla/5.0" https://my.ipin.io/info
Пояснения к вариантам
-qO-: тихо + вывод в stdout, удобно для скриптов.-U: ключевой переключатель управления форматом вывода (UA содержит curl → текст; UA не содержит curl → JSON).
OpenWRT / встраиваемые устройства
Главная цель для встраиваемых устройств: не зависать. Поэтому обязательно задавайте таймауты. При «детекте изменения публичного IP» также важно избежать ложных срабатываний: неудачный запрос не означает, что IP изменился.
Базовое использование (с таймаутом)
wget -qO- --timeout=10 https://my.ipin.io
Часто используемые варианты
# E1) Краткая сводка по локации (самопроверка выхода)
wget -qO- --timeout=10 https://my.ipin.io/info
# E2) Принудительно чистый текст (одна строка IP)
wget -qO- --timeout=10 -U "curl/8" https://my.ipin.io
Пояснения к вариантам
--timeout: для встраиваемых устройств настоятельно рекомендуется использовать по умолчанию, чтобы планировщики не зависали.- Стабильный режим вывода: wget по умолчанию может вернуть JSON; если скрипту нужна только строка IP — надёжнее зафиксировать текстовый вывод через UA.
Docker / CI / автоматизация
В средах автоматизации неопределённости больше: колебания DNS, короткие таймауты и изменения политики выхода встречаются чаще. Рекомендуемые настройки по умолчанию: таймауты + немного ретраев + фиксированный формат вывода (чтобы парсинг не ломался на разных runner’ах).
Базовое использование (с таймаутом)
curl -s --connect-timeout 3 --max-time 8 https://my.ipin.io
Часто используемые варианты (самые практичные для CI)
# F1) Стабильно получить локацию (с ретраями)
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io/info
# F2) Для CI нужен стабильный JSON: фиксируем UA как не-curl
curl -s -A "Mozilla/5.0" --connect-timeout 3 --max-time 8 https://my.ipin.io/info
# F3) Диагностика: принудительно стек протоколов
curl -s -4 https://my.ipin.io
curl -s -6 https://my.ipin.io/v6
Пояснения к вариантам
- Фиксировать UA: в CI разные образы/инструменты могут иметь разный UA; при фиксации формат вывода не «плавает».
- Немного ретраев: повышает шанс успеха, но важно, чтобы сбой быстро проявлялся (для диагностики).
Часто задаваемые вопросы (FAQ)
Q1: Я использую curl -s https://my.ipin.io — почему иногда это падает или возвращает ошибку?
Корневой путь — это «строгий IPv4»: если текущая цепочка не может получить IPv4, запрос явно падает (а не «притворяется» успехом с IPv6). Обычно это происходит в: сетях только IPv6, некоторых средах прокси/шлюзов, или когда клиент принудительно идёт по IPv6 и на пути нет доступного IPv4.
Диагностика: используйте curl -s -4, чтобы принудительно пойти по IPv4; либо используйте /info, чтобы увидеть текущий выходной IP, и дальше решать, что делать.
Q2: Я делаю запрос curl к /info — почему это не JSON?
Потому что терминальные инструменты по умолчанию используют «терминальный режим вывода», и /info в этом режиме выводит более читаемую текстовую рамку.
Если нужен JSON (для jq/парсинга программой), достаточно сменить UA на не-curl.
curl -s -A "Mozilla/5.0" https://my.ipin.io/info
Q3: Почему одна и та же команда на разных машинах выдаёт разный формат вывода?
Формат вывода зависит от User-Agent запроса. У разных инструментов (curl / wget / системные утилиты) UA по умолчанию может отличаться,
из-за чего сервис возвращает текст или JSON по-разному.
Решение: фиксировать UA. Если нужен текст — пусть UA содержит curl; если нужен JSON — пусть UA не содержит curl. Для автоматизации/CI фиксация UA — ключ к «стабильному парсингу».
Q4: Почему я явно хочу IPv4, но ощущаю, что «пошёл по IPv6»?
Здесь нужно различать две вещи:
какой стек используется при подключении (клиент выбирает v4/v6 для соединения),
и какой тип IP возвращает эндпоинт (определяется путём / или /v6).
Рекомендация по диагностике: принудительно задайте стек соединения через -4/-6, чтобы понять, какую цепочку реально предпочитает ваша сеть.
Если нужен только IPv4, используйте корневой путь и при необходимости принудительно -4.
Q5: Как писать в скриптах, чтобы не было ложных срабатываний и чтобы ничего не зависало?
Рекомендуемая комбинация: тихий режим (без шума), таймауты (без зависаний), немного ретраев (устойчивость к колебаниям), и не перезаписывать старое значение при ошибке (не принимать ошибку за изменение).
curl -s --retry 2 --connect-timeout 3 --max-time 8 https://my.ipin.io
Q6: Что лучше использовать в первую очередь — curl или wget?
Если доступен curl — используйте curl: параметров больше и диагностика сильнее. Но в лёгких/встраиваемых средах часто есть только wget — это нормально. Главное: задавать таймауты, выводить в stdout и при необходимости фиксировать UA, чтобы закрепить формат вывода.