У цій версії присутні кілька великих змін:
Дія 'Проксі' тепер не лише змінює проксі, а й робить так, щоб зміна проксі виглядала правдоподібніше. Робота в основному вікні програми (воно чорного кольору) тепер відбувається інтуїтивніше. Виправлено один дуже неприємний баг, пов'язаний з несвоєчасним звільненням пам'яті при роботі з одним браузером протягом тривалого часу.
Розгляньмо кожну зміну детальніше.
Для початку трохи інформації про WebRTC, оскільки цей функціонал вбудований у будь-який сучасний браузер, а за його допомогою можна отримати дані про реальний ip навіть використовуючи проксі. WebRTC - набір апі, які допомагають встановлювати з'єднання між браузерами і передавати між ними інформацію. Причому перевага надається саме прямому з'єднанню, і лише якщо обидва браузери перебувають за фаєрволом або NAT, то використовується спеціальний сервер щоб передавати трафік через нього. Встановити з'єднання буває непросто зважаючи на те, що ipv4 адрес недостатньо для всіх пристроїв і більшість з них перебувають у приватних мережах, мають адреси виду 192.168.. або 172.16.. і обмінюються інформацією з рештою через NAT. WebRTC використовує такий алгоритм щоб встановити з'єднання - спочатку пристрої отримують інформацію про конфігурацію своїх мереж і обмінюються нею через якийсь інший канал, потім вони намагаються з'єднатися використовуючи різні варіанти конфігурації. Припустимо, якщо пристрої перебувають в одній мережі, то для встановлення з'єднання достатньо використати ip у цій мережі, якщо один з пристроїв має зовнішній ip, то він виступає в ролі "сервера" і до нього підключається другий пристрій, або навпаки. Нам цікава якраз конфігурація мережі, оскільки вона містить реальні ip адреси. WebRTC допускає її читання, і навіть редагування через javascript перед відправленням співрозмовнику. Інформація має формат SDP описаний у цих документах https://tools.ietf.org/html/rfc5245#section-15 https://tools.ietf.org/html/rfc4566. За наступним посиланням її можна отримати через ваш браузер https://jsfiddle.net/wrbyLqkn/1/, скоріш за все там є ваш реальний ip. Одним з параметрів цієї інформації виступає зовнішній ip браузера, він отримується через запит до STUN сервера. Функціонал цього сервера дуже простий - повертати пристрою, що зробив запит, його реальний ip адресу. Сайт сам задає STUN сервер, який хоче використовувати, наприклад, у коді вище використовувався такий сервер stun.l.google.com:19302. Запити до цього сервера йдуть через протокол UPD (замість TCP) минаючи проксі. Підсумовуючи вищесказане, javascript може здійснювати запит до довільного сервера без проксі і отримувати відповідь у вигляді реального зовнішнього ip. Ось посилання на хорошу статтю якщо ви хочете ознайомитися з питанням детальніше https://www.html5rocks.com/en/tutorials/webrtc/infrastructure/
До недавнього часу в BAS використовувався алгоритм, який забороняє будь-які запити такого роду. У цій версії, BAS змінює ip отриманий від сервісу на зовнішній ip поточного проксі, це відбувається за замовчуванням при використанні дії 'Проксі', проте новий функціонал можна вимикати в цій же дії. Розгляньмо деталі реалізації:
Є простий метод, як можна перевірити, чи намагається сайт отримати ваш ip через WebRTC чи ні, достатньо встановити Wireshark, у полі фільтра встановити рядок stun і зайти на сайт, у разі використання WebRTC у вікні застосунку будуть запити. Ось відео, яке це демонструє:
У разі BAS, запитів не буде, хоч ip і повертатиметься.
Чому б не зробити запити до STUN сервера через тунелювання? Річ у тім, що не всі проксі підтримують протокол UPD, хоча це і вказано в специфікації. Приклад такого проксі У майбутньому BAS перевірятиме проксі на таку можливість, але зараз усі запити до STUN сервера заборонено.
Як бачите, ця реалізація хоч і не є ідеальною, але досить близька до неї.
Крім цього, дія 'Проксі' тепер також вміє автоматично змінювати геолокацію і часовий пояс браузера.
Зміна часового поясу тепер також відбувається на рівні браузера - абсолютно всі дати, які повертає браузер тепер мають часовий пояс точно такий самий, як і у проксі.
BAS навчився коректно повертати змінену дату з урахуванням літнього часу.
Ще один спосіб, яким можна виявити приблизне реальне місцезнаходження є використання internationalization api (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat). Приклад використання: https://jsfiddle.net/0Lq2km96/, за посиланням має відобразитися ваше приблизне реальне місцезнаходження незалежно від проксі і впн.
Ці значення також замінюються при використанні дії 'Проксі', ви можете переконатися в цьому зайшовши на цю сторінку з BAS.
Нарешті, бувають ситуації, коли ip, який ви використовуєте для доступу до проксі не відповідає його зовнішньому ip, у таких випадках BAS отримуватиме зовнішній ip через сервіс ip.bablosoft.com. На жаль, не існує способу отримати адресу без мережевого запиту. Сервіс має стабільно працювати при 20к запитах на секунду. Налаштування вимикається.
Чимало уваги в новому апдейті було приділено зручності використання основного вікна.
Для елементів, значення яких може бути не зовсім зрозумілим, з'явилися підказки. Реалізовано безліч зручних дрібниць: список нещодавніх проектів тепер завжди на основній панелі, шлях до поточного проекту можна скопіювати, всі іконки замінено на такі, що виглядають краще при малому розмірі елементів, змінено значки запущених браузерів. Додано можливість швидкого обміну проектами - відкриття проекту за посиланням і завантаження на гугл диск. Оновлено вікно компіляції проекту, воно стало інтуїтивнішим та інтегрованим з хмарою. Тепер проект можна оновлювати/створювати прямо з BAS, з'явилася можливість не створювати архів при кожній компіляції.
Було витрачено багато часу на пошук причини і виправлення бага з несвоєчасним звільненням пам'яті. Баг існував весь час протягом життя проекту і проявлявся лише тоді, коли кілька браузерів працювали 10 і більше годин без перезапуску. Споживання пам'яті збільшувалося приблизно на 5-10 мб на годину, через кілька днів безперервної роботи проект ставав непрацездатним. Помилка була пов'язана з бібліотекою Qt, було знайдено метод як обійти цей баг.
Сподіваюся, що нова версія вам сподобається і буде корисною!