Una aplicación de Android escrita en C/C ++, Java y Kotlin para ejecutar OpenPyn de forma remota a través de Juicessh. Un agradecimiento especial a NvidiaGpumonitor, un complemento Juicessh escrito en Kotlin por SDS100 que sirvió como base para este complemento Juicessh.
Nota : Se ha lanzado la primera versión beta pública.
La idea comenzó cuando quería conectarme a los servidores OpenVPN alojados por NordVPN en un ASUS RT-AC86U. Por defecto, esto es posible, pero el firmware predeterminado que incluye firmware de terceros Asuswrt-Merlin solo permite guardar un máximo de 5 clientes OpenVPN.
Luego me topé con OpenPyn, aprendí rápidamente Python e hice una solicitud de extracción, lo que permitía soporte para Asuswrt-Merlin. OpenPyn es un script Python3 que se puede ejecutar en entware-ng-3x en asuswrt-merlin. La característica principal de OpenPyn es que se conecta automáticamente al servidor OpenVPN de latencia menos ocupado y de baja. El soporte de escritura de NVRAM para Asuswrt-Merlin en OpenPyn puede guardar el servidor OpenVPN de latencia menos ocupado y de menor ocupado en el NVRAM de un enrutador ASUS habilitado para ENTWARE-NG-3X.
Ahora, había logrado más o menos lo que deseaba, pero esto me dejó con una última lucha, tenía que recurrir para abrir una conexión SSH al enrutador ASUS y suministrar a OpenPyn con los argumentos deseados, por ejemplo, el país, el umbral de carga, el tipo de servidor y el número de pings que se enviarán a cada servidor para determinar la calidad. Pensé que tener la capacidad de hacer eso en mi teléfono en lugar de mi computadora haría que esto sea mucho más fácil, y eso me llevó a descubrir Juicessh.
Juicessh admite el uso de complementos, lo que me permitió crear esta fantástica aplicación. Esta aplicación se ejecuta en Android, establece una conexión a un dispositivo que tiene un servidor SSH que se ejecuta y luego puede enviar un comando OpenPyn al dispositivo remoto.
Nota : Este proyecto es mi primer proyecto de Android y, como tal, puede no seguir todas las mejores prácticas de codificación hasta ahora, independientemente de esto, estoy comprometido a hacer de esta aplicación una fuente de inspiración para otros desarrolladores que trabajan en aplicaciones de Android basadas en Google, especialmente aplicaciones de Android basadas en Google Maps.
Admite la mayoría de los argumentos disponibles en OpenPyn con preferencias fáciles de usar
Permite usar el filtrado basado en la ubicación en OpenPyn
La vista de mapa muestra marcadores para cada país apoyado por NordVPN
Permite ocultar países en la vista del mapa
Permite protagonizar un país en la vista del mapa
Las claves API almacenadas en preferencias compartidas están encriptadas ("AES/GCM/NOPADDING")
Al inicio de la aplicación, utilizará una ubicación inteligente, para determinar el país más cercano
Utiliza API de geolocalización para determinar la ubicación actual en función de la dirección IP pública actual
¿Me falta alguna característica esencial?
Muchos componentes hacen que esta aplicación funcione, cubriré algunos de los conceptos básicos aquí. Básicamente, en el inicio de la aplicación, el mapa se carga de forma asincrónica, un archivo mbtile (base de datos SQLite) ubicado en la carpeta de recursos de activos dentro del APK se carga y luego se almacena y lee en la memoria. World.mbtiles se generó utilizando un script de python personalizado, generar_tile_multiprocess.py.
rm ./app/src/main/assets/world.mbtiles
python3 ./generate_tiles_multiprocess.py ./mapfile.xml ./app/src/main/assets/world.mbtiles 4 4 --format webp
Una vez que se realiza la carga del mapa, la API NORDVPN se invoca para consultar todos los países compatibles, el filtrado basado en preferencias como el tipo de servidor se realiza aquí, los marcadores se generan perezosamente para todos los países (los marcadores no se colocan en el mapa), todas las mosaicos (imágenes WebP 512x512) se cargan previamente para la escala mínima de Zoom especificada por el archivo MBTILE. La ubicación actual se detecta en función de la dirección IP pública del cliente. El mapa luego anima al marcador más cercano a esta ubicación. Después de que se complete la animación, solo los marcadores "perezosos" cuya ubicación se encuentran dentro de los límites visibles del mapa se hacen visibles (los marcadores se colocan en el mapa una vez que se hacen visibles por primera vez).
Nota : Puede usar este flujo con múltiples dispositivos remotos, siempre y cuando ese dispositivo remoto tenga un servidor SSH que se ejecuta y se configura en conexiones en Juicessh y se selecciona en la barra de herramientas de la aplicación de esta aplicación antes de que se haga clic en el botón de acción flotante de color (FAB).





La versión beta pública está abierta a cualquiera.
Por favor, use mi rama test de OpenPyn.
git clone --branch 2.2.1 [email protected]:1951FDG/openpyn-nordvpn.git
cd openpyn-nordvpn
pip3 install --upgrade .
Para compilar y ejecutar el proyecto que necesitará:
Android Studio 3.5 o superior
10 (API level 29)29.0.2v3.10.2Mapas SDK para Android
Mystorage.kt inspirado en la publicación de blog, guardar y recuperar ArrayList de Object en SharedPreference: Android de Ready Android.
PrintArray.kt inspirado en GitHub Repo, PrintArray por Tobibur Rahman.
SecurityManager.java inspirado en la publicación del blog, haciendo una versión segura de EditTextPreference de Nikita Ogorodnikov.
No dude en enviarnos comentarios enviando un problema. Los informes de errores, las solicitudes de funciones, los parches y los buenos deseos siempre son bienvenidos.
Nota : Las solicitudes de extracción son bienvenidas. Para cambios importantes, envíe primero un problema para discutir lo que le gustaría cambiar.
Esta aplicación utiliza el código (modificado) de varios proyectos de código abierto.
Acerca de la caja
Sqlite-ndk
Android Maps Extensions
Mapa de mapa
Android Google Maps API V2 complementos
Google Maps Biblioteca de utilidad de API de Android
Botón flotante de verificación
Nota : Un agradecimiento especial a Yesy, autor de Read SQLite Database de Android Asset Resource
Muchas gracias a Sonelli que hizo este proyecto posible e indoloro. Un agradecimiento especial a Krystian Bigaj, autor de SQLite-NDK.