Skip to content

Releases: ATropichev/WinPublicIP-cpp

v1.0.3

08 May 14:38

Choose a tag to compare

English | Русский


English

What's fixed

  • Configuration repair — if %APPDATA%\WinPublicIP\config.json is malformed, the app now saves the original file as config.invalid.YYYYMMDD-HHMMSS.json and writes a fresh default configuration.

  • Configuration normalization backup — if config.json is valid JSON but contains values that must be normalized, the original file is also backed up before the repaired config is written.

  • HTTP response validation — WinHTTP responses must now return a successful 2xx status code, oversized response bodies are rejected, and diagnostic errors include the HTTP status code.

  • Public IP validation — IP provider responses are accepted only if they parse as valid IPv4 or IPv6 addresses.

  • Geolocation validation — the default ip-api.com provider now requests status,message and requires status: "success" before applying geolocation data.

Documentation

  • README now documents HTTP/geolocation response validation.
  • README now documents automatic config.json backup and repair behavior in English and Russian.

Download

File Size Requirements
WinPublicIP.exe ~545 KB No prerequisites — statically linked, no VC++ Redistributable needed

SHA256 checksum:

File SHA256
WinPublicIP.exe 01EC1CEB5C1E1269EECB1176405DA467B2E5E8C0F0D9D45DB15A0E986E706155

Requirements

Windows 10 / 11 / Server 2019+, x64


Русский

Что исправлено

  • Восстановление конфигурации — если %APPDATA%\WinPublicIP\config.json повреждён, приложение теперь сохраняет исходный файл как config.invalid.YYYYMMDD-HHMMSS.json и записывает новый конфиг с настройками по умолчанию.

  • Backup при нормализации конфигурации — если config.json является валидным JSON, но содержит значения, которые нужно нормализовать, исходный файл также сохраняется в backup перед записью исправленного конфига.

  • Проверка HTTP-ответов — WinHTTP-ответы теперь должны иметь успешный статус 2xx, слишком большие тела ответов отклоняются, а диагностические ошибки содержат HTTP status code.

  • Проверка внешнего IP — ответы IP-провайдеров принимаются только если они являются валидными IPv4 или IPv6 адресами.

  • Проверка геолокации — дефолтный провайдер ip-api.com теперь запрашивает status,message и требует status: "success" перед применением геоданных.

Документация

  • README теперь описывает проверку HTTP-ответов и ответов геолокации.
  • README теперь описывает автоматический backup и восстановление config.json на английском и русском языках.

Скачать

Файл Размер Требования
WinPublicIP.exe ~545 КБ Без зависимостей — статическая линковка, VC++ Redistributable не нужен

Контрольная сумма SHA256:

Файл SHA256
WinPublicIP.exe 01EC1CEB5C1E1269EECB1176405DA467B2E5E8C0F0D9D45DB15A0E986E706155

Системные требования

Windows 10 / 11 / Server 2019+, x64

v1.0.2

08 May 14:07

Choose a tag to compare

English | Русский


English

What's fixed

  • Refresh thread lifetime — background refresh work no longer uses detached threads that could outlive the tray application object. Refresh shutdown is now coordinated, and pending refresh messages are cleaned up safely.

  • Stale refresh results — manual and timer refreshes are protected from overlapping updates. Only the current refresh result is applied to the tray state.

  • Settings dialog message loop — the settings dialog no longer exits via PostQuitMessage. It now uses a local modal loop and disables the parent window while open.

  • HTTP request handling — query strings are now preserved in WinHTTP requests, response status codes are checked, and response reads are validated.

  • IP and configuration validation — external IP responses are validated as IPv4/IPv6 before use. JSON settings are normalized and invalid values fall back to safe defaults.

  • WinAPI hardening — clipboard and embedded resource loading paths now check allocation/API failures and avoid leaking memory on error paths.

Documentation

  • Added a bilingual code review document with findings and remediation notes.
  • Removed the unused homeCountry setting from the documented configuration.

Download

File Size Requirements
WinPublicIP.exe ~482 KB No prerequisites — statically linked, no VC++ Redistributable needed

SHA256 checksum:

File SHA256
WinPublicIP.exe FD0727BA9669A8A23BBA839C11CA141A16BE26BAFCC5363238B047FC6B865D81

Requirements

Windows 10 / 11 / Server 2019+, x64


Русский

Что исправлено

  • Жизненный цикл потоков обновления — фоновые обновления больше не используют detached-потоки, которые могли пережить объект приложения в трее. Завершение refresh-потока теперь координируется, а ожидающие сообщения обновления очищаются безопасно.

  • Устаревшие результаты обновления — ручное обновление и обновление по таймеру защищены от пересечения. К состоянию трея применяется только актуальный результат refresh-запроса.

  • Message loop диалога настроек — диалог настроек больше не завершается через PostQuitMessage. Теперь используется локальный modal loop, а родительское окно отключается на время открытия диалога.

  • Обработка HTTP-запросов — query string теперь сохраняется в WinHTTP-запросах, HTTP status code проверяется, чтение ответа валидируется.

  • Валидация IP и конфигурации — ответы провайдеров внешнего IP проверяются как IPv4/IPv6 перед использованием. JSON-настройки нормализуются, некорректные значения заменяются безопасными значениями по умолчанию.

  • Усиление WinAPI-путей — копирование в clipboard и загрузка встроенных ресурсов теперь проверяют ошибки выделения памяти/API и не протекают на ошибочных путях.

Документация

  • Добавлен двуязычный документ code review с найденными проблемами и рекомендациями по устранению.
  • Неиспользуемая настройка homeCountry удалена из документированной конфигурации.

Скачать

Файл Размер Требования
WinPublicIP.exe ~482 КБ Без зависимостей — статическая линковка, VC++ Redistributable не нужен

Контрольная сумма SHA256:

Файл SHA256
WinPublicIP.exe FD0727BA9669A8A23BBA839C11CA141A16BE26BAFCC5363238B047FC6B865D81

Системные требования

Windows 10 / 11 / Server 2019+, x64

v1.0.1

07 May 23:05

Choose a tag to compare

English | Русский


English

What's fixed

  • GDI handle leakCreateCompatibleBitmap(GetDC(nullptr), ...) was called on every refresh without releasing the DC, causing progressive exhaustion of USER/GDI resources. After prolonged use this resulted in the tray icon disappearing and context menu items not rendering. Fixed by using CreateBitmap(32, 32, 1, 1, nullptr) which requires no DC.

  • WinHTTP handle leak on exceptionhSession, hConnect, and hRequest were not guaranteed to close if an exception was thrown mid-request. Replaced manual WinHttpCloseHandle calls with a RAII WinHttpHandle wrapper struct. Also fixed ToWide() to pass s.size() instead of -1 to MultiByteToWideChar, preventing an embedded null terminator in the resulting wstring.

Download

File Size Requirements
WinPublicIP.exe ~477 KB No prerequisites — statically linked, no VC++ Redistributable needed

SHA256 checksum:

File SHA256
WinPublicIP.exe DC83D7D779F6D441CC4B140468E21BD6770DD7B73ABF1ED4F0469952C31BBC4A

Requirements

Windows 10 / 11 / Server 2019+, x64


Русский

Что исправлено

  • Утечка GDI-хэндлов — при каждом обновлении вызывался CreateCompatibleBitmap(GetDC(nullptr), ...) без освобождения DC, что со временем исчерпывало USER/GDI-ресурсы системы. После длительной работы это приводило к исчезновению иконки в трее и пропаданию пунктов контекстного меню. Исправлено заменой на CreateBitmap(32, 32, 1, 1, nullptr), не требующий DC.

  • Утечка WinHTTP-хэндлов при исключенииhSession, hConnect и hRequest не гарантированно закрывались при возникновении исключения в процессе запроса. Ручные вызовы WinHttpCloseHandle заменены RAII-обёрткой WinHttpHandle. Также исправлена функция ToWide(): теперь передаётся s.size() вместо -1 в MultiByteToWideChar, что предотвращало появление нулевого символа внутри результирующей wstring.

Скачать

Файл Размер Требования
WinPublicIP.exe ~477 КБ Без зависимостей — статическая линковка, VC++ Redistributable не нужен

Контрольная сумма SHA256:

Файл SHA256
WinPublicIP.exe DC83D7D779F6D441CC4B140468E21BD6770DD7B73ABF1ED4F0469952C31BBC4A

Системные требования

Windows 10 / 11 / Server 2019+, x64

v1.0.0

02 May 13:37

Choose a tag to compare

English | Русский


English

Windows tray application showing public IP, country flag and VPN status.
Native C++17 / Win32 — single .exe, no runtime required.

Features

  • Country flag (60+ countries, embedded)
  • Public IP in tooltip; copy to clipboard in one click
  • VPN indicator: green shield (on) / grey (off)
  • Auto-detection: TAP, tun, WireGuard, OpenVPN, Tailscale, ZeroTier, PPP, IKEv2
  • Configurable refresh interval (Settings dialog, 10–3600 sec)
  • Balloon notification on IP change
  • Start with Windows option

Download

File Size Requirements
WinPublicIP.exe ~477 KB No prerequisites — statically linked, no VC++ Redistributable needed

SHA256 checksum:

File SHA256
WinPublicIP.exe A5B14B07592047ABF23209327C2E42243892BC5F8806DDF9D2DFDAC5C10584CD

Requirements

Windows 10 / 11 / Server 2019+, x64


Русский

Приложение для системного трея Windows: публичный IP, флаг страны, статус VPN.
Нативный C++17 / Win32 — один .exe, рантайм не требуется.

Возможности

  • Флаг страны (60+ стран, встроены в файл)
  • Внешний IP в tooltip; копирование в буфер одним кликом
  • Индикатор VPN: зелёный щит (включён) / серый (выключен)
  • Авто-определение: TAP, tun, WireGuard, OpenVPN, Tailscale, ZeroTier, PPP, IKEv2
  • Настраиваемый интервал обновления (диалог, 10–3600 сек)
  • Уведомление при смене IP
  • Автозапуск с Windows

Скачать

Файл Размер Требования
WinPublicIP.exe ~477 КБ Без зависимостей — статическая линковка, VC++ Redistributable не нужен

Контрольная сумма SHA256:

Файл SHA256
WinPublicIP.exe A5B14B07592047ABF23209327C2E42243892BC5F8806DDF9D2DFDAC5C10584CD

Системные требования

Windows 10 / 11 / Server 2019+, x64