1 puntos por GN⁺ 2024-07-10 | 1 comentarios | Compartir por WhatsApp
  • PySkyWiFi es un experimento que usa temporalmente los campos de perfil de una cuenta de millas aéreas accesibles incluso antes de pagar, para hacer viajar solicitudes y respuestas HTTP de ida y vuelta de forma extremadamente lenta durante vuelos largos
  • El prototipo inicial actualizaba y consultaba el campo de nombre de la cuenta para crear un chat, y luego se amplió para que un demonio en tierra leyera solicitudes como STOCKPRICE: APPL y devolviera el resultado
  • La arquitectura final se divide entre un sky proxy dentro del avión y un ground daemon conectado a internet, y usa el encabezado X-PySkyWiFi de solicitudes locales con curl para indicar la URL de destino
  • La transmisión divide las solicitudes HTTP en pequeños chunks y mantiene el orden con segmentos DATA, ACK, END y números de secuencia de 6 dígitos
  • Se evitó seguir enviando solicitudes automáticas a cuentas reales de aerolíneas, y la prueba final se quedó en usar GitHub Gist para llamar con curl la página principal del blog y recibir la respuesta HTML unos minutos después

Un atajo descubierto en el portal Wi‑Fi antes de pagar

  • La página de inicio de sesión del Wi‑Fi del avión exigía pago, pero incluso antes de pagar permitía gratis el inicio de sesión de la cuenta de millas aéreas
  • Al ver el campo de nombre en la pantalla de edición del perfil, surgió la idea de usar ese valor como un pequeño canal de comunicación con el exterior
  • Al principio se pensó en Go como lenguaje de implementación, pero se eligió Python para poder ponerle al proyecto el nombre PySkyWiFi
  • El código fuente está publicado en PySkyWiFi

Prototipo 1: mensajería instantánea usando el campo de nombre

  • Dos clientes inician sesión en la misma cuenta de millas aéreas y se envían mensajes alternando entre actualizar y leer el campo de nombre
    • Si uno cambia el nombre a Hello how are you, el otro lo lee
    • Luego lo cambia a Im fine how are you y el primero ve la respuesta
  • Como cambiar el nombre manualmente en la UI era incómodo, se automatizó con una herramienta de línea de comandos
    • La herramienta inicia sesión en el sitio web y actualiza el campo de nombre de una cuenta de prueba con el mensaje
    • Cada pocos segundos consulta el campo de nombre y, si cambia el valor, lo muestra como respuesta de la otra parte
  • Se decidió no seguir enviando datos automáticos a cuentas reales de millas aéreas, y solo se verificó que fuera posible actualizar el nombre rápidamente unas 10 veces con éxito
    • Ese resultado sugiere que la cuenta quizá no imponía límites de velocidad o cantidad de solicitudes
  • Después, el desarrollo continuó reproduciendo el mismo principio con GitHub Gists y archivos locales
    • Porque era más rápido y fácil iterar que con cuentas reales de millas aéreas

Prototipo 2: obtener información externa con un demonio en tierra

  • En el siguiente paso, se ejecuta un demonio en una computadora con conexión a internet en tierra o en la nube
  • El demonio consulta constantemente el campo de nombre de la cuenta de millas aéreas y busca solicitudes estructuradas enviadas desde el avión
    • Ejemplo: STOCKPRICE: APPL
    • Ejemplo: SCORE: MANUNITED
  • Cuando detecta una solicitud nueva, el demonio la interpreta, obtiene la información desde la API correspondiente y la devuelve al avión a través de la cuenta de millas aéreas
  • A partir de esta etapa, ya no se trata solo de chat, sino también de consultas de información en tiempo real como precios de acciones o marcadores deportivos

Arquitectura completa con sky proxy y ground daemon

  • PySkyWiFi es un protocolo similar a TCP/IP que mete una solicitud HTTP completa dentro de una cuenta de millas aéreas, luego una computadora en tierra realiza la solicitud HTTP real y sube la respuesta del mismo modo
  • Tiene dos componentes
    • sky proxy: un proxy que corre en la laptop dentro del avión
    • ground daemon: un demonio que corre en una computadora con conexión a internet en casa o en la nube
  • Antes de usarlo, primero se ejecuta el demonio en tierra; luego, ya conectado al Wi‑Fi del avión, se ejecuta el sky proxy en la laptop
  • El usuario envía una solicitud HTTP al proxy local con herramientas como curl
    • Ejemplo: curl localhost:1234 -H "X-PySkyWiFi: example.com"
    • La URL real de destino se coloca en el encabezado personalizado X-PySkyWiFi
  • El demonio en tierra elimina el encabezado X-PySkyWiFi y lo usa para enrutar al sitio web de destino
    • El cuerpo de la solicitud y los demás encabezados se reenvían sin cambios
  • Cuando todo termina, se recibe una respuesta HTTP como en una solicitud normal de internet, pero según el estado de la red del avión la petición puede quedarse detenida varios minutos y avanzar a solo unos pocos bytes por segundo

Chunks, ACK y una segunda cuenta para la ida y vuelta HTTP

  • El sky proxy recibe la solicitud de curl y divide toda la solicitud HTTP en chunks
    • Porque la cantidad de datos que cabe de una vez en el campo de nombre de una cuenta de millas aéreas es pequeña
  • Cada chunk se escribe en orden en el campo de nombre de la primera cuenta de millas aéreas
  • El ground daemon consulta la cuenta y, cuando detecta un chunk nuevo, lo lee y deja una confirmación de recepción indicando que ya puede enviarse el siguiente
  • Una vez reensamblada toda la solicitud HTTP, el ground daemon hace la solicitud real a internet
  • La respuesta HTTP sigue el mismo proceso en sentido contrario
    • El ground daemon divide la respuesta en chunks y los envía
    • Para simplificar la implementación, los chunks de respuesta usan una segunda cuenta de millas aéreas
    • El sky proxy lee los chunks, reconstruye la respuesta HTTP y la devuelve a la llamada original de curl

Separación de responsabilidades entre capa de transporte y capa de red

  • La lógica de comunicación de PySkyWiFi se divide en capa de transporte y capa de red
  • La capa de transporte decide qué datos enviar y en qué orden
    • Cómo dividir mensajes largos en chunks pequeños
    • Cómo indicar que el receptor está listo para recibir el siguiente chunk
    • Cumple un papel muy vagamente parecido al de TCP
  • La capa de red escribe y lee en el almacenamiento real los datos definidos por la capa de transporte
    • Ese almacenamiento puede ser una cuenta de millas aéreas, un archivo local o un perfil de Discord
  • Esta separación facilita agregar nuevas plataformas de millas aéreas
    • Solo hace falta implementar una nueva capa de red y la capa de transporte puede mantenerse igual
    • La capa de red de pruebas puede leer y escribir archivos locales en vez de una cuenta de millas aéreas

Reglas de transmisión con DATA, ACK y END

  • La conexión de transporte de PySkyWiFi está compuesta por dos pipes
    • Cada cliente tiene un pipe SEND para escribir y un pipe RECV para leer
    • Una cuenta de millas aéreas puede usarse como pipe
  • En un momento dado, un cliente PSWF solo puede estar enviando o recibiendo
    • En modo de envío no puede ver los datos enviados por la otra parte
    • En modo de recepción, aunque envíe datos, la otra parte no puede verlos
    • No funciona como TCP, donde siempre hay envío y recepción bidireccional
  • Los mensajes largos se transmiten con segmentos DATA, ACK y END
    • DATA: se compone de la letra D, un número de secuencia rellenado a 6 dígitos y los datos reales del chunk
    • Ejemplo: D000451adline": "Mudslide in Wigan causes m
    • ACK: se compone de la letra A y el número de secuencia de 6 dígitos que se confirma
    • Ejemplo: A000451
    • END: una sola letra E marca el final del mensaje
  • El emisor manda un DATA y espera hasta recibir el ACK del mismo número de secuencia
    • Si recibe A000451, considera procesado el chunk 000451 y envía el chunk 000452
  • Cuando el receptor ve END, trata el mensaje como terminado y emisor y receptor intercambian roles

Interfaz de implementación de la capa de red

  • La capa de red ofrece una interfaz sencilla para escribir y leer datos en el almacenamiento
  • Hay dos operaciones obligatorias
    • send(msg: str): escribe msg en el almacenamiento
    • recv() -> str: lee un mensaje del almacenamiento
  • En una implementación basada en millas aéreas, estas dos operaciones equivalen a escribir y leer el campo de nombre de la cuenta
  • También hay dos propiedades obligatorias
    • sleep_for: tiempo en segundos que la capa de transporte debe esperar entre sondeos del pipe RECV
    • segment_data_size: cantidad de caracteres que caben en un segmento
  • sleep_for puede ser bajo en implementaciones de prueba como archivos, pero en una implementación con cuentas de millas aéreas debe ser de al menos varios segundos para no enviar demasiadas solicitudes al servidor remoto
  • segment_data_size debe coincidir con el tamaño máximo del campo de la cuenta de millas aéreas que se esté usando; en el ejemplo son unos 20 caracteres
  • Hay dos hooks opcionales
    • connect_send(): se llama al inicializar el pipe SEND y, en una implementación con millas aéreas, podría usarse para iniciar sesión con nombre de usuario y contraseña y obtener cookies
    • connect_recv(): se llama al inicializar el pipe RECV

Codificación base26 e ideas para mejorar el ancho de banda

  • El formulario HTML de millas aéreas puede no permitir caracteres que no sean letras en el nombre
    • Stephen podría estar permitido
    • GET /data?id=5 podría ser rechazado
  • Para evitarlo, la capa de red debe codificar los segmentos en base26 antes de escribirlos en la cuenta de millas aéreas
    • Base26 representa una cadena usando solo letras de A a Z
    • Convierte una cadena de bytes en un número grande y luego la expresa como si fuera un número en base 26 usando caracteres A~Z
    • Ejemplo: b26_encode("Hello world") devuelve CZEZINADXFFTZEIDPKM
  • La capa de transporte no necesita conocer esta codificación
    • La capa de red convierte los bytes a base26 al escribirlos y los restaura al leerlos
  • Base26 alarga bastante las cadenas y reduce el ancho de banda
    • Usar base52 con mayúsculas y minúsculas podría acortarlas, pero eso queda como mejora para una versión 2
  • El ancho de banda puede mejorarse aumentando el tamaño del segmento
    • Aunque un campo solo guarde 20 caracteres, si se escriben 5 campos de 20 caracteres al mismo tiempo, se puede enviar un segmento de 100 caracteres con una sola solicitud
    • El receptor puede leer esos 5 campos en una sola solicitud y volver a unirlos

Espacio de mejora con HTTP CONNECT y la prueba final

  • PySkyWiFi podría construir un túnel mejor si usara HTTP CONNECT requests en vez de intercambiar solicitudes HTTP manualmente
  • CONNECT es el método que usan la mayoría de los proxies HTTP; con eso, PySkyWiFi podría funcionar como un proxy a nivel de sistema y también manejar solicitudes del navegador
  • Con CONNECT, PySkyWiFi negociaría directamente la conexión TLS con el sitio web de destino, así que el tráfico que atraviesa la cuenta de millas aéreas quedaría cifrado
  • La desventaja es que la implementación sería mucho más compleja
  • En la prueba final, se tunelizaron datos a través de GitHub Gist para cargar con curl la página principal del blog, y varios minutos después se recibió la respuesta HTML

1 comentarios

 
GN⁺ 2024-07-10
Opiniones de Hacker News
  • Hace décadas, mi pareja usaba mensajes de Google Voice leyéndolos y respondiéndolos directamente desde la bandeja de entrada de Gmail, y como odiaba los celulares llevaba consigo un viejo Kindle Keyboard con 3G ilimitado
    Con el navegador simple del Kindle podía abrir la interfaz liviana de Gmail, así que podía usarlo como un dispositivo de SMS sin cuota mensual; el único problema eran las notificaciones de mensajes nuevos
    Entonces, después de hacerle jailbreak intenté poner un contador en la pantalla de inicio, hasta que se me ocurrió que podía poner el contador junto al nombre del dispositivo Kindle, que se podía cambiar desde la cuenta de Amazon
    Desde mi servidor casero hice que una automatización de navegador iniciara sesión en Amazon y cambiara el nombre del dispositivo a My Kindle (x), donde x era la cantidad de mensajes de Google Voice sin leer; el Kindle actualizaba el nombre en la pantalla de inicio en menos de 1 minuto, y funcionó bien durante años

    • Recuerdo que la factura de AT&T del Kindle 3G era enorme
      Recuerdo que reducir apenas unos bytes equivalía a ahorrar como un millón de dólares
    • Le presté mi Kindle Keyboard a un colega que se iba de viaje y se lo robaron en México
      Para entonces probablemente era casi el Kindle funcional más antiguo, así que el ladrón simplemente habrá agarrado lo que había dentro de la bolsa
      Más tarde encontré otro Kindle Keyboard de 20 dólares en un mercado de pulgas, pero a los 6 meses se le murió la batería; todavía tengo el equipo, así que me da curiosidad cuánto costará una batería de reemplazo
    • Ese 3G gratis era realmente increíble
      Con el navegador apenas se podía usar Gmail, e incluso hice un sitio web de Zork amigable para Kindle donde podías elegir entre varias ROM de zmachine para jugar juegos de texto
      Salió en algunos sitios de noticias y tuvo cierta repercusión
    • Yo también hice eso
      No tenía la integración ingeniosa de cambiar el nombre del Kindle, pero durante un tiempo mandé mensajes de texto con un Kindle Keyboard con 3G ilimitado
    • Antes de comprar un smartphone, en viajes largos en auto usaba el Kindle Keyboard para navegar rutas
      Apenas podía correr el sitio web de Google Maps
  • Una vez tomé un ferry de unas 20 horas de Italia a Grecia; tenía Wi-Fi pago basado en internet satelital, pero no quería pagarlo
    El acceso a Stripe estaba abierto para poder pagar y resultó que también podía acceder a todas las páginas de stripe.com, como la documentación para desarrolladores, así que empecé a desperdiciar ancho de banda descargando imágenes repetidamente
    Entonces recordé que para que Stripe funcionara hacía falta acceso al CDN de Fastly, y que Reddit también usa Fastly; tras conectarme a Stripe, cambié el encabezado HTTP Host a reddit.com y pude ver Reddit
    Las imágenes no funcionaban porque i.redd.it no está en Fastly, pero al apuntar old.reddit.com a la IP de Fastly de Stripe en /etc/hosts e ignorar los aterradores errores de TLS, también pude iniciar sesión

    • El perjudicado por descargar varios gigabytes de documentación de esa forma probablemente sean los pasajeros dentro del avión que pagan por ese servicio
      Si por la conexión más lenta deciden no volver a comprarlo, también perjudicas a la empresa proveedora, y podrías aumentar los costos de ancho de banda de subida de Stripe
      Yo suelo evitar descargas incluso en celular para no afectar negativamente a la gente alrededor
    • No sé exactamente qué se gana con ese comportamiento
      Entiendo el experimento intelectual de explorar hasta dónde se puede acceder en una conexión bloqueada, pero desperdiciar ancho de banda a propósito es parecido a abrir la llave de agua de un baño público para tirar agua o tapar un inodoro hasta que se desborde
    • Eso es domain fronting, y hoy está bloqueado en todos los CDN grandes
      https://en.wikipedia.org/wiki/Domain_fronting
    • Seguro la próxima vez dejaste abierta el agua del hotel para darles una lección por atreverse a ofrecer un servicio pago
    • Me pregunto por qué tu primer instinto ante un servicio por el que no querías pagar fue abusar de la funcionalidad o degradarla
  • Hace unas semanas, en un centro comercial, llevé a mis hijos a una clase e intenté usar el Wi-Fi gratis; el inicio de sesión en la laptop fue exitoso, pero decía que no había internet
    Revisé la puerta de enlace predeterminada y vi que estaba conectado a un módem Cisco; se veían las herramientas de diagnóstico y la lista de dispositivos conectados, pero la conexión a internet estaba apagada
    Busqué el modelo en el celular y decía que la cuenta de administrador era el número de serie y que la contraseña se dejaba en blanco; también había un patrón de ejemplo, y el nombre de uno de los dispositivos conectados se veía exactamente como ese patrón
    Inicié sesión con eso, encendí el botón de internet y 15 segundos después se puso verde; también configuré una nueva contraseña para el dispositivo

    • Una vez visité a mi familia e intenté conectarme a la VPN del trabajo usando el Wi-Fi sin seguridad de un vecino
      La VPN no conectaba, y como pude entrar fácilmente al router, cambié la configuración de MTU y enseguida empezó a funcionar bien
  • Este tipo de hacking me parece genial y me gusta, en el sentido original de la palabra
    Sin embargo, al revisar hace poco, parece que en skywifi el DNS global resuelve normalmente incluso sin pagar, y en el vuelo que tomé creo que también habría funcionado un túnel iodine común
    https://github.com/yarrick/iodine

    • Hace unos años operé un servicio iodine público al que cualquiera podía conectarse
      Para evitar reportes de abuso, hacía que el tráfico externo del servidor pasara por Tor; también reunía logs de en qué redes de trenes, hoteles y aeropuertos funcionaba, y ofrecía otros protocolos de tunneling
      Fue un proyecto divertido durante un tiempo, y ojalá lo hubiera dejado corriendo
      Hoy el tunneling por DNS es un poco más difícil porque algunos servidores DNS, especialmente Google, aleatorizan mayúsculas y minúsculas en las solicitudes DNS, lo que rompe bastante ciertos esquemas de codificación
    • Hace 6 años iodine funcionaba en el Wi-Fi de otra aerolínea
      La idea y los principios son interesantes, pero por la velocidad casi no sirve en la práctica, salvo quizá para montar algo como un mensajero sobre UDP ;-)
    • Si el firewall permite DNS, ¿no bastaría con no tocar el protocolo DNS en sí y usar WireGuard sobre UDP/53?
  • “Olvidé cargar los audífonos y Limp Bizkit empezó a sonar por los parlantes de la laptop. Por suerte, a las demás personas del avión no pareció importarles, así que todos la pasamos genial juntos.”
    A esta gente le falta etiqueta básica en público
    Seguro a muchas personas alrededor sí les molestó, pero probablemente eran demasiado educadas como para decirle que no les impusiera ruido innecesario

    • Si el autor escribe “esto es sátira”, arruina la sátira
    • Yo lo leí como un chiste
      Me pareció un chiste gracioso porque hay muchísima gente sin esa etiqueta básica y, al menos, no creo que el autor sea realmente así
    • El chiste no fue gracioso, pero encaja con el tema del texto
      Muestra la imagen del hacker que ve la posibilidad de internet gratis como una oportunidad ejecutable y, después, toma distancia dando a entender que no es alguien que realmente vaya a abusar del sistema de la aerolínea, así que el tono inicial parece un recurso estilístico
    • Parece que es lo que los humanos llaman “humor”
    • Espero que haya sido un chiste, como dicen otros
      Si no, es un comportamiento extremadamente grosero e insensible
  • Me pregunto si soy la única persona que, apenas se sube a un avión, siempre queda tan cansada que no puede hacer nada más que cerrar los ojos y esperar a que termine
    Solo pensar en sacar la laptop o un libro me agota; hay mucho ruido y, como no tengo audífonos con cancelación de ruido, cuesta concentrarse
    Para entonces ya llevo al menos 2 horas desde que salí de casa, pasando por tren, tranvía y control de seguridad, y la comida poco saludable del aeropuerto tampoco ayuda
    Además, durante medio año el clima es demasiado caluroso o demasiado frío, y con una mochila de 10 kg termino sudando todo el tiempo, así que al final ya no me dan ganas de hacer nada dentro del avión

    • Tengo TDAH de adulto y, aunque en el trabajo me cuesta más concentrarme, en aviones u otros lugares caóticos puedo concentrarme como un láser
      Es contraintuitivo, pero he oído que muchos cerebros con TDAH funcionan así, y el tiempo que paso en aviones es el más productivo
    • Antes sacaba la laptop e intentaba hacer algo, pero desde que redujeron el espacio entre asientos se volvió realmente difícil sacar algo más grande que una tablet
      Tienes que apoyarla sobre las rodillas o, si la persona de adelante reclina el asiento, corres el riesgo de que se rompa la pantalla; a un compañero le pasó de verdad hace unos años
      Hoy en día solo saco el iPad y los audífonos con cancelación de ruido para ver una película o una serie
    • No eres la única persona
      Mi cuerpo reacciona igual, y creo que tiene que ver con la menor cantidad de oxígeno en el aire
      No es un problema de ruido, sino del aire; aunque los audífonos con cancelación de ruido realmente funcionan muy bien
      Pero sí hay personas a las que no les afecta en absoluto y hacen trabajo útil en el avión
    • A mí me pasa exactamente lo contrario
      Por más cansado que esté o por más sueño que me falte, en el avión no logro dormirme ni me da cansancio, así que los vuelos transatlánticos se vuelven más sufridos; si mi acompañante duerme 8 horas, hasta siento que se está burlando de mí
    • No eres la única persona
      Durante el vuelo se me nubla muchísimo la cabeza y me quedo con los ojos cerrados hasta el aterrizaje; aunque intente leer o trabajar, a los 5–10 minutos el cerebro se me apaga
      Curiosamente, la comida de avión siempre me provoca hinchazón abdominal, así que necesito tomar algo justo después de aterrizar
      Algo interesante: las dos veces que viajé en clase ejecutiva pude leer un poco antes de que el cerebro se me apagara
      En trenes de larga distancia, si voy sentado mirando en la dirección de avance, de hecho me resulta más fácil trabajar; pero si el tren va bastante lleno, se me vuelve a apagar el cerebro
  • La historia sobre enviar cotizaciones de acciones, marcadores deportivos o el clima me recordó una función que Google ofrecía antes como servicio de mensajes de texto
    La usé muchísimo antes de comprar mi primer smartphone: enviabas W[ZIP code] al 46645(GOOGL) y te respondía el clima por SMS
    También funcionaba stock:[symbol], y había muchas otras funciones que ya olvidé
    Claro que Google la cerró, pero mientras duró fue bastante genial

    • En la época en que trasteaba con PHP, hice un bot de Twitter llamado SongBuddy que encontraba canciones a partir de fragmentos de letras
      La estructura era: enviabas unas líneas de la letra por DM vía SMS, que Twitter soportaba en ese entonces; el bot buscaba " lyrics" en Google, parseaba los resultados y devolvía el artista y el título por SMS
      No funcionaba muy bien, pero me sentía bastante orgulloso
    • El sitio de conversión de divisas que uso lo administra un profesor y probablemente corre en una computadora Pentium III escondida debajo de alguna escalera de la universidad, pero lleva décadas vivo y siento que va a durar toda la vida
    • Hice una interfaz SMS↔ChatGPT con Twilio y una instancia de AWS
      Gracias a eso puedo hacerle preguntas a ChatGPT desde cualquier lugar del mundo con un comunicador satelital portátil inReach Mini 2, y es bastante bueno poder preguntarle cosas incluso en medio de Death Valley
    • Usaba ese servicio todo el tiempo con un teléfono plegable
      Tipear una búsqueda de Google tomaba bastante, y los resultados podían tardar 1 o 2 minutos en llegar, pero era mejor que no tener nada
      Lo usaba sobre todo para buscar la dirección de lugares a los que quería ir y meterla en el TomTom; los tiempos han cambiado mucho
    • Me da curiosidad cuándo fue eso
      Alrededor de 1995, cuando trabajaba en una empresa de investigación en telecomunicaciones, subsidiaria de Ericsson, se me ocurrió una idea así, y el ejemplo típico eran las actualizaciones del estado de vuelos
      Como nadie imaginaba que la mensajería P2P, donde para escribir una letra en un teclado numérico había que presionar varias veces, fuera a ser tan popular, en un contexto de aumento de datos en la web temprana los servicios de información parecían el mejor uso
      Teletext todavía existía, y también había un proyecto aparte para extraer datos de ahí
      Pero es interesante pensar en para qué terminamos usando SMS tanto quienes teníamos acceso a él como el público general
  • Me parece interesante que el autor llegó bastante cerca de un TCP sobre un campo de edición compartido abstracto
    Eso, por sí solo, podría ser una herramienta muy buena
    Uno podría imaginar un proxy donde solo se diseñe a alto nivel cómo leer y escribir en un recurso compartido desde ambos lados, y que se encargue de todo lo demás y lo exponga como un proxy SOCKS

    • Tengo entendido que ya se implementó TCP/IP sobre DNS para usar internet gratis en hotspots pagos de Boingo en aeropuertos
      Al final, cuando el Wi-Fi gratis se volvió el estándar, dejó de ser gran cosa, y ahora pasamos a la guerra del Wi-Fi gratis a bordo
      Al final, el Wi-Fi a bordo también será gratis en todas partes, y varias aerolíneas ya lo hacen
    • Llevo años pensando en esto desde que una operadora de mi país empezó a anunciar “WhatsApp ilimitado” en planes con datos limitados
      Solo serviría para texto, no para imágenes ni video, pero habría sido suficiente para la navegación web normal
  • Hace unos años, el decano de nuestra universidad dijo algo como que “los juegos estaban afectando la asistencia” y decidió bloquear la red LAN después de las 10 p. m.
    La implementación consistía en bloquear todo el tráfico hacia y desde direcciones IP, pero no bloquearon TCP en sí, y también se olvidaron por completo de IPv6, que en ese entonces tampoco era precisamente nuevo.
    Así que hice una app sencilla de chat P2P que funcionaba sobre IPv6, y el único problema era tener que compartir mi dirección IPv6 con mis amigos y hacer que la guardaran en sus contactos.
    Funcionaba bien, pero después descubrí que era mucho más fácil hacer túneles hacia una computadora fuera de la red.

  • Me parece un ejemplo casi perfecto que recuerda al artículo sobre escribir más software inútil y la discusión posterior en HN.
    ¿Te cambia la vida? Probablemente no.
    ¿Fue divertido construirlo y explorarlo? Casi seguro que sí.
    Deberíamos crear más cosas así.
    https://ntietz.com/blog/write-more-useless-software/
    https://news.ycombinator.com/item?id=37911900