Кроссплатформенный переключатель прокси-сервера на Python + Qt

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Устав искать нормальный портативный инструмент для переключения между моим рабочим прокси-сервером и прямым подключением дома (который, к тому же, работал бы на Windows и Linux), я решил-таки запилить собственную тулзу для этих целей. Вооружившись Python и Qt, начал клепать код в VSCode... Что из этого вышло -- читаем под катом.


Мотивация

Основной мотивацией для создания данного инструмента стало жуткое неудобство системных настроек прокси при работе из офиса и дома. Каждый раз приходилось лезть в настройки прокси, передвигать флажок... А, кроме того, еще удалять или скрывать системные переменные HTTP_PROXY (и им подобные), чтобы консольные приложения вроде git также слушались руля... Это на Винде. А на Линуксе так вообще веселая история: не все графические системы имеют встроенные утилиты для управления настройками прокси, и моя Kali Linux как раз такая. Приходится вручную комментировать / раскомментировать экспорты переменных среды (той же HTTP_PROXY) и перелогиниваться... Морока, одним словом.

Беглый (а затем и не очень беглый) поиск в гугле / яндексе результатов не дал: предлагаются в основном плагины для браузеров, переключающие прокси только для браузера (системные настройки не изменяются). Нормальной легковесной, портативной, бесплатной, кроссплатформенной тулзы с графическим интерфейсом мне найти так и не удалось. И тогда, кряхтя и сопя от борьбы с ленью, открыл я VSCode и создал новый проект на Python...

Требования к инструменту

Почиркав в блокноте наброски GUI, я определился со следующими минимальными требованиями к приложению:

  • включение / выключение прокси-сервера одной кнопкой (с соответствующими автоматическими изменениями переменных среды)

  • настройки прокси должны быть постоянными, т.е. записываться в соответствующие системные файлы и оставаться после перезагрузки

  • возможность раздельных настроек для HTTP, HTTPS, FTP и (что бывает нужно для Unix) - RSYNC

  • импорт / экспорт настроек в / из файла

  • возможность подробного лога для отладки

Сразу скажу, что особой эстетичнойти GUI в минимальных требованиях не числилось. Главное -- простота и интуитивность. Это так, чтобы вы меня не слишком терроризировали за дизайнерские способности :)

Где хранятся системные настройки прокси

Windows

На машинах под Windows настройки прокси хранятся (как и большинство других системных настроек) в реестре. А именно, в ветке HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings (таким образом, эти настройки задаются пользователем и не являются общесистемными).

Настройки прокси в реестре Windows. Зеленым выделены основные переменные.
Настройки прокси в реестре Windows. Зеленым выделены основные переменные.

За настройки прокси отвечают две переменные в реестре:

  1. ProxyServer: адрес и порт прокси сервера, разделенные двоеточием (у моего прокси, например, адрес = 192.168.1.10, порт = 3128)

  2. ProxyOverride: разделенные запятыми адреса и маски адресов, которые должны работать по прямому соединению, минуя прокси (обычно сюда добавляется <local>, что означает localhost, т.е. не использовать прокси для локальных соединений)

Кроме того, многие приложения (в основном, консольные) берут настройки прокси не из реестра, а из специальных переменных среды:

  • HTTP_PROXY - прокси для HTTP-соединений в формате http://[[USER]:[PASSWORD]@]HOST:PORT (например, "http://user:pass@192.168.1.1:3000" или если без прокси-аутентификации: "http://192.168.1.1:3000")

  • HTTPS_PROXY - то же для HTTPS-соединений

  • FTP_PROXY - то же для FTP-соединений

  • RSYNC_PROXY - то же для RSYNC-соединений

  • NO_PROXY - адреса в обход прокси (аналог вышеуказанного ProxyOverride)

Переменные среды в Windows: определены переменные, относящиеся к настройкам прокси
Переменные среды в Windows: определены переменные, относящиеся к настройкам прокси

Linux и MacOS

В Unix'ах, как водится, все настройки хранятся в обычных файлах: пользовательские -- в директории текущего пользователя (~/...), системные -- в директории /etc.

Настройки прокси задаются такими же переменными среды для соответствующих соединений (HTTP_PROXY и т.д.) + NO_PROXY для прямых адресов + иногда может встречаться переменная ALL_PROXY, задающая настройки для всех типов соединений.

Вот неполный перечень файлов, в которых обычно задаются переменные среды и иные настройки:

  • Пользователь: ~/.profile, ~/.bashrc, ~/.bash_profile, ~/.zshrc, ~/.cshrc, ~/.tcshrc, ~/.login

  • Система: /etc/environment, /etc/profile, /etc/bashrc, /etc/bash.bashrc, /etc/zsh/zshrc, /etc/csh.cshrc, /etc/csh.login

А еще, конечно, переменные могут определяться в скриптах, расположенных в специальных директориях: /etc/init.d, /etc/environment.d и т.п. Простор фантазии, в двух словах!

Структура приложения

Приложение размещено на Github.

Структура приложения (писалось на Python 3.10) получилась такая:

Источник: https://habr.com/ru/post/646407/


Интересные статьи

Интересные статьи

В октябре Минимущества Московской области отчиталось, что за 2021 год был начислено 410 млн рублей штрафов за борщевик Сосновского в Подмосковье. В этой заметке расскажу, как сейчас собирают штрафы в ...
Настройка любой площадки для CMS — это рутинный процесс, который должен быть доведен до автоматизма в каждой уважающей себя компании. А потому частенько воспринимается, как восход солнца — это происхо...
Цикл for — самый базовый инструмент потока управления большинства языков программирования. Например, простой цикл for на C выглядит так: int i; for (i=0;i<N;i++) { //do someth...
В 2021 г. ожидается рост числа запросов на чат-боты на 15-20% от ор­га­низа­ций из госсектора, об­ра­зова­ния, медицины, ло­гис­ти­ки, ре­тей­ла и e-commerce, промышленны...
В прошлой статье рассмотрено как можно получить информацию по финансовым инструментам. Дальше будет опубликовано несколько статей о том, что первоначально можно делать с полученными данными, как ...