Escribí una aplicación que usa la biblioteca tsocks para forzar aplicaciones a través de un proxy 1337micro / SSHTunnel
La biblioteca es muy antigua y usa un archivo de configuración. También utiliza un analizador de archivos de texto muy antiguo para leer este archivo de texto (config). Necesitaba modificar este archivo de configuración usando Python para cambiar ciertas configuraciones para el usuario.
Al final del archivo hay la siguiente línea:
- ¿Cuál es la mejor compañía para comprar un disco duro externo de 1TB?
- ¿Cómo debo arreglar mi computadora mientras muestra que no se encontró ningún dispositivo de arranque?
- ¿Qué se necesitaría para causar una fuga de diseños de hardware de computadora y escapar de él? ¿Hay países donde no hay leyes en contra?
- ¿Cuál es el preferido: Win7 (ultimate) o Win8?
- ¿Qué debo hacer si mi computadora portátil se apaga sola después de un minuto de jugar, dado que sé que no se debe a un sobrecalentamiento?
server_port = 1080
Esto representa el puerto que le gustaría usar para conectarse a un servidor remoto o un proxy local SOCKS 127.0.0.1.
En esencia, la aplicación no se conectaba y no estaba seguro de por qué. Con la ayuda de algunos administradores de sistemas de freenode IRC, descubrimos que la aplicación estaba intentando conectarse en el puerto 108 en lugar de 1080 .
¡No podía entender por qué estaba haciendo esto! Cuando usaría la biblioteca manualmente, este problema no aparecería. Modificaría el archivo de configuración usando el editor de texto “nano” y funcionaría bien.
Resulta que cuando estaba modificando el archivo de configuración con Python, no dejé una línea vacía al final del archivo. Al ser una biblioteca antigua, Tsocks utilizó un analizador de texto para leer su archivo de configuración, pero el analizador no funcionó correctamente cuando no encontró un “\ n” al final del archivo. El resultado fue tsocks cortando el último carácter en el archivo que era el 0 al final del número de puerto 1080 . Para resolver el problema, solo necesitaba agregar manualmente un “\ n” después de modificar el archivo con python. Los editores de texto, como nano, dejan este nuevo carácter de línea adicional al final de los archivos automáticamente por exactamente este motivo. Algunos analizadores más antiguos esperan un “\ n” al final del archivo o algún otro carácter especial. Si el analizador no encuentra un “\ n”, alcanzará un EOF inesperado y puede funcionar mal, destruyendo cierta información al final.
Me tomó muchos días darme cuenta y estaba a punto de renunciar al proyecto, pero Freenode me salvó.