1 pontos por GN⁺ 2024-07-10 | 1 comentários | Compartilhar no WhatsApp
  • O PySkyWiFi é um experimento que usa campos de perfil de uma conta de milhagem aérea acessíveis mesmo antes do pagamento como armazenamento temporário, para fazer requisições e respostas HTTP irem e voltarem de forma extremamente lenta durante voos longos
  • O protótipo inicial criava um chat atualizando e consultando o campo de nome da conta, e depois foi expandido para um modelo em que um daemon em solo lia pedidos como STOCKPRICE: APPL e devolvia o resultado
  • A arquitetura final é dividida entre um sky proxy dentro do avião e um ground daemon conectado à internet, passando a URL de destino pelo cabeçalho X-PySkyWiFi em requisições locais de curl
  • A transmissão divide as requisições HTTP em pequenos chunks e usa segmentos DATA, ACK e END, além de números de sequência de 6 dígitos, para manter a ordem
  • O autor evitou continuar enviando requisições automáticas para contas reais de companhias aéreas, e o teste final ficou no nível de chamar a página inicial do blog com curl via GitHub Gist e receber a resposta HTML alguns minutos depois

Um caminho alternativo descoberto no portal de Wi‑Fi antes do pagamento

  • A página de login do Wi‑Fi do avião exigia pagamento, mas ainda permitia gratuitamente o login na conta de milhagem aérea antes do pagamento
  • Ao ver o campo de nome na tela de edição de perfil, surgiu a ideia de usá-lo como um pequeno canal de comunicação com o mundo externo
  • A linguagem pensada no início era Go, mas Python foi escolhido porque assim a ferramenta poderia se chamar PySkyWiFi
  • O código-fonte foi publicado em PySkyWiFi

Protótipo 1: mensagens instantâneas com o campo de nome

  • Dois clientes faziam login na mesma conta de milhagem aérea e trocavam mensagens atualizando e lendo alternadamente o campo de nome
    • Um lado mudava o nome para Hello how are you, e o outro lia isso
    • Depois mudava para Im fine how are you, e o primeiro lado confirmava a resposta
  • Como mudar o nome manualmente pela UI era trabalhoso, isso foi automatizado com uma ferramenta de linha de comando
    • A ferramenta fazia login no site e atualizava o campo de nome da conta de teste com a mensagem
    • A cada poucos segundos, consultava o campo de nome e, quando o valor mudava, exibia isso como resposta da outra ponta
  • Decidiu-se não enviar mais dados automáticos para contas reais de milhagem aérea, e apenas foi verificado se cerca de 10 atualizações rápidas do nome funcionavam com sucesso
    • Esse resultado sugere que a conta talvez não aplicasse limitação de taxa ou de quantidade de requisições
  • Depois disso, o desenvolvimento continuou reproduzindo o mesmo princípio com GitHub Gists e arquivos locais
    • porque isso tornava o ciclo de desenvolvimento mais rápido e fácil do que usar uma conta de milhagem aérea

Protótipo 2: buscando informações externas com um daemon em solo

  • Na etapa seguinte, um daemon era executado em um computador com internet em solo ou na nuvem
  • O daemon consultava continuamente o campo de nome da conta de milhagem aérea em busca de requisições estruturadas enviadas do avião
    • Exemplo: STOCKPRICE: APPL
    • Exemplo: SCORE: MANUNITED
  • Ao detectar uma nova requisição, o daemon a interpretava, buscava as informações em APIs relevantes e as devolvia para o avião pela mesma conta de milhagem aérea
  • A partir desse ponto, deixava de ser apenas um chat simples e passava a permitir consulta de informações em tempo real, como preços de ações ou placares esportivos

A arquitetura completa com sky proxy e ground daemon

  • O PySkyWiFi é um protocolo semelhante ao TCP/IP que empurra uma requisição HTTP inteira para dentro de uma conta de milhagem aérea, faz um computador em solo executar a requisição HTTP real e então envia a resposta de volta da mesma maneira
  • Há dois componentes
    • sky proxy: proxy executado no notebook dentro do avião
    • ground daemon: daemon executado em casa ou em um computador na nuvem com acesso à internet
  • Antes do uso, primeiro inicia-se o daemon em solo; depois, já conectado ao Wi‑Fi do voo, inicia-se o sky proxy no notebook
  • O usuário envia uma requisição HTTP ao proxy local usando ferramentas como curl
    • Exemplo: curl localhost:1234 -H "X-PySkyWiFi: example.com"
    • A URL de destino real é colocada no cabeçalho customizado X-PySkyWiFi
  • O ground daemon remove o cabeçalho X-PySkyWiFi e o usa para rotear a requisição ao site de destino
    • O corpo da requisição e os demais cabeçalhos são encaminhados como estão
  • Quando tudo termina, recebe-se uma resposta HTTP como numa requisição comum à internet, mas dependendo do estado da rede da aeronave a requisição pode ficar parada por vários minutos e a velocidade pode cair para poucos bytes por segundo

Chunks, ACKs e uma segunda conta para o tráfego HTTP de ida e volta

  • O sky proxy recebe a requisição do curl e divide a requisição HTTP inteira em chunks
    • porque a quantidade que cabe de uma vez no campo de nome da conta de milhagem aérea é pequena
  • Cada chunk é gravado em sequência no campo de nome da primeira conta de milhagem aérea
  • O ground daemon consulta a conta e, ao encontrar um novo chunk, lê o conteúdo e deixa uma confirmação de recebimento dizendo que o próximo chunk já pode ser enviado
  • Quando a requisição HTTP completa é remontada, o ground daemon envia a requisição real para a internet
  • A resposta HTTP passa pelo mesmo processo no sentido inverso
    • o ground daemon divide a resposta em chunks e os envia
    • para simplificar a implementação, os chunks da resposta usam uma segunda conta de milhagem aérea
    • o sky proxy lê os chunks, recompõe a resposta HTTP e a devolve à chamada original do curl

Separando os papéis da camada de transporte e da camada de rede

  • A lógica de comunicação do PySkyWiFi é dividida entre camada de transporte e camada de rede
  • A camada de transporte decide quais dados enviar e em que ordem
    • como dividir mensagens longas em chunks menores
    • como sinalizar que o receptor está pronto para receber o próximo chunk
    • um papel vagamente parecido com o do TCP
  • A camada de rede realmente escreve e lê no meio de armazenamento definido pela camada de transporte
    • esse meio pode ser uma conta de milhagem aérea, um arquivo local ou um perfil do Discord
  • Essa separação facilita conectar novas plataformas de milhagem de companhias aéreas
    • basta implementar uma nova camada de rede, enquanto a camada de transporte permanece a mesma
    • uma camada de rede de teste pode ler e escrever em arquivos locais no lugar da conta de milhagem aérea

Regras de transporte com DATA, ACK e END

  • A conexão de transporte do PySkyWiFi é composta por dois pipes
    • cada cliente tem um pipe SEND para escrita e um pipe RECV para leitura
    • uma conta de milhagem aérea pode ser usada como pipe
  • Em um dado momento, um cliente PSWF só pode estar enviando ou recebendo
    • no modo de envio, ele não consegue ver os dados enviados pela outra ponta
    • no modo de recebimento, mesmo que envie dados, a outra ponta não consegue vê-los
    • não é um esquema de envio e recebimento bidirecional a qualquer momento como no TCP
  • Mensagens longas são transmitidas com segmentos DATA, ACK e END
    • DATA: composto pela letra D, um número de sequência com 6 dígitos preenchidos e os dados reais do chunk
    • Exemplo: D000451adline": "Mudslide in Wigan causes m
    • ACK: composto pela letra A e o número de sequência de 6 dígitos que está sendo confirmado
    • Exemplo: A000451
    • END: uma única letra E indicando o fim da mensagem
  • O transmissor envia um DATA e então espera receber o ACK correspondente àquele número de sequência
    • ao receber A000451, entende que o chunk 000451 foi processado e envia o chunk 000452
  • Quando o receptor vê END, trata a mensagem como encerrada e transmissor e receptor trocam de papel

Interface de implementação da camada de rede

  • A camada de rede fornece uma interface simples para escrever e ler dados no meio de armazenamento
  • Há duas operações obrigatórias
    • send(msg: str): grava msg no armazenamento
    • recv() -> str: lê uma mensagem do armazenamento
  • Na implementação baseada em milhagem aérea, essas duas operações se tornam escrever e ler o campo de nome da conta
  • Também há dois atributos obrigatórios
    • sleep_for: tempo, em segundos, que a camada de transporte deve esperar entre uma consulta e outra ao pipe RECV
    • segment_data_size: número de caracteres que cabem em um segmento
  • sleep_for pode ser baixo em implementações de teste com arquivos, por exemplo, mas na implementação com conta de milhagem aérea ele deve ser de pelo menos alguns segundos para evitar requisições demais ao servidor remoto
  • segment_data_size deve ser igual ao tamanho máximo do campo usado na conta de milhagem aérea; no exemplo, algo em torno de 20 caracteres
  • Há dois hooks opcionais
    • connect_send(): chamado ao inicializar o pipe SEND; na implementação com milhagem aérea, pode ser usado para fazer login com usuário e senha e obter cookies
    • connect_recv(): chamado ao inicializar o pipe RECV

Codificação base26 e ideias para melhorar a largura de banda

  • O formulário HTML da milhagem aérea pode não aceitar caracteres que não sejam alfabéticos no nome
    • Stephen pode ser aceito
    • GET /data?id=5 pode ser rejeitado
  • Para evitar isso, a camada de rede pode codificar os segmentos em base26 antes de gravá-los na conta de milhagem aérea
    • base26 representa a string usando apenas letras de A a Z
    • a string de bytes é convertida em um número grande e então representada como se fosse um número em base 26 usando caracteres de A a Z
    • Exemplo: b26_encode("Hello world") retorna CZEZINADXFFTZEIDPKM
  • A camada de transporte não precisa saber dessa codificação
    • a camada de rede converte os bytes para base26 ao gravar e os restaura ao ler
  • A base26 alonga bastante as strings e reduz a largura de banda
    • usar base52 com maiúsculas e minúsculas poderia encurtar isso, mas foi deixado como melhoria para a versão 2
  • A largura de banda pode aumentar ampliando o tamanho do segmento
    • mesmo que um campo armazene só 20 caracteres, se 5 campos de 20 caracteres forem usados ao mesmo tempo, um segmento de 100 caracteres pode ser enviado em uma única requisição
    • o receptor pode ler os 5 campos em uma única requisição e concatená-los novamente

Espaço para melhorias com HTTP CONNECT e o teste final

  • Em vez de trocar requisições HTTP manualmente, o PySkyWiFi poderia criar um túnel melhor usando HTTP CONNECT requests
  • CONNECT é o método usado pela maioria dos proxies HTTP, e com isso o PySkyWiFi poderia funcionar como um proxy em nível de sistema e até lidar com requisições de navegador
  • Com CONNECT, o PySkyWiFi negociaria diretamente uma conexão TLS com o site de destino, então o tráfego que passasse pela conta de milhagem aérea ficaria criptografado
  • A desvantagem é que isso exigiria muito mais trabalho de implementação
  • No teste final, os dados foram tunelados via GitHub Gist e a página inicial do blog foi carregada com curl, recebendo uma resposta HTML alguns minutos depois

1 comentários

 
GN⁺ 2024-07-10
Opiniões no Hacker News
  • Décadas atrás, minha esposa usava mensagens de texto do Google Voice lendo e respondendo diretamente pela caixa de entrada do Gmail, e, como detestava celulares, carregava um antigo Kindle Keyboard com 3G ilimitado
    O navegador simples do Kindle conseguia abrir a interface leve do Gmail, então dava para usá-lo como um aparelho de SMS sem mensalidade; o único problema eram as notificações de novas mensagens
    Então, depois de fazer jailbreak, eu estava tentando colocar um contador na tela inicial, quando me ocorreu que bastaria pôr o contador ao lado do nome do dispositivo Kindle, que podia ser alterado na conta da Amazon
    No meu servidor doméstico, usei automação de navegador para fazer login na Amazon e alterar o nome do dispositivo para My Kindle (x), em que x era a quantidade de mensagens não lidas do Google Voice; o Kindle atualizava o nome na tela inicial em menos de um minuto, e isso funcionou bem por anos

    • Lembro que a conta da AT&T do Kindle 3G era enorme
      Lembro que economizar apenas alguns bytes já representava algo como um milhão de dólares em redução de custos
    • Emprestei meu Kindle Keyboard a um colega que ia viajar, e ele foi roubado no México
      Na época, provavelmente era um dos Kindles funcionais mais antigos, então o ladrão deve ter simplesmente pegado o que estava dentro da bolsa
      Depois encontrei outro Kindle Keyboard por 20 dólares em um mercado de pulgas, mas a bateria morreu seis meses depois; ainda tenho o aparelho, então fico curioso quanto custaria uma bateria de reposição
    • Aquele 3G grátis era realmente incrível
      Dava para usar o Gmail com muito esforço pelo navegador, e eu também criei um site de Zork amigável ao Kindle, onde era possível escolher entre várias ROMs de zmachine e jogar jogos de texto
      Ele chegou a ter alguma repercussão depois de aparecer em alguns sites de notícias
    • Eu também fiz isso
      Não tinha a integração esperta de mudar o nome do Kindle, mas por um tempo enviei mensagens de texto usando um Keyboard Kindle com 3G ilimitado
    • Antes de comprar um smartphone, eu usava o Kindle Keyboard para navegação por rotas em viagens longas de carro
      Dava para rodar o site do Google Maps, mal e porcamente
  • Certa vez peguei uma balsa de cerca de 20 horas da Itália para a Grécia; havia Wi-Fi pago baseado em internet via satélite, mas eu não queria pagar
    O acesso ao Stripe estava liberado para pagamento e, como descobri, dava para acessar todas as páginas de stripe.com, incluindo a documentação de desenvolvimento, então comecei a desperdiçar largura de banda baixando imagens repetidamente
    Aí lembrei que, para o Stripe funcionar, era preciso acesso ao CDN Fastly, e que o Reddit também usava Fastly; então me conectei ao Stripe e mudei o cabeçalho HTTP Host para reddit.com, e consegui ver o Reddit
    As imagens não funcionavam porque i.redd.it não era Fastly, mas, ao apontar old.reddit.com para o IP Fastly do Stripe em /etc/hosts e ignorar erros assustadores de TLS, até consegui fazer login

    • Nesse tipo de coisa, quem provavelmente sai prejudicado ao baixar alguns gigabytes de documentação são os passageiros dentro do avião que pagaram por aquele serviço
      Se a conexão ficar lenta e eles decidirem nunca mais comprar, a empresa provedora também é prejudicada, e isso também pode aumentar os custos de upload do Stripe
      Eu tendo a evitar downloads até no celular para não afetar negativamente as pessoas ao meu redor
    • Não sei exatamente o que se ganha com esse comportamento
      Entendo o experimento intelectual de explorar até onde dá para acessar em uma conexão bloqueada, mas desperdiçar largura de banda de propósito é parecido com abrir a torneira de um banheiro público para jogar água fora ou entupir o vaso até transbordar
    • Isso é domain fronting, e hoje está bloqueado em todos os grandes CDNs
      https://en.wikipedia.org/wiki/Domain_fronting
    • Da próxima vez, você deve ter deixado a água do hotel correndo para ensinar uma lição a eles por ousarem oferecer um serviço pago
    • Fico curioso por que seu primeiro instinto em relação a um serviço pelo qual você não queria pagar foi abusar da funcionalidade ou degradá-la
  • Algumas semanas atrás, levei meus filhos a uma aula em um shopping e tentei usar o Wi-Fi grátis; o login no notebook funcionou, mas aparecia que não havia internet
    Ao verificar o gateway padrão, vi que ele apontava para um modem Cisco; dava para ver ferramentas de diagnóstico e a lista de dispositivos conectados, mas a conexão com a internet estava desligada
    Pesquisei o modelo pelo celular e dizia que a conta de administrador era o número de série e a senha ficava em branco; também havia um padrão de exemplo, e o nome de um dos dispositivos conectados parecia exatamente esse padrão
    Fiz login assim mesmo, liguei o botão de internet, e 15 segundos depois ficou verde; também defini uma nova senha para o dispositivo

    • Uma vez, visitando minha família, conectei-me ao Wi-Fi sem segurança de um vizinho para tentar entrar na VPN da empresa
      A VPN não conectava, então, como era fácil acessar o roteador, alterei a configuração de MTU, e ela passou a funcionar imediatamente
  • Esse tipo de hacking é legal e eu gosto dele no sentido original da palavra
    Dito isso, em uma verificação recente, parece que no skywifi o DNS global resolve normalmente mesmo sem pagamento, e no voo em que eu estava acho que um túnel iodine comum também teria funcionado
    https://github.com/yarrick/iodine

    • Alguns anos atrás, eu operava um serviço iodine público que qualquer pessoa podia acessar
      Para evitar denúncias de abuso, fazia o tráfego externo do servidor passar pelo Tor, também coletava logs de em quais redes de trens, hotéis e aeroportos ele funcionava, e oferecia outros protocolos de tunelamento
      Foi um projeto divertido por um tempo; eu deveria tê-lo deixado rodando
      Hoje em dia, o tunelamento por DNS ficou um pouco mais difícil porque alguns servidores DNS, especialmente os do Google, randomizam maiúsculas e minúsculas nas requisições DNS, o que quebra bastante certos encodings
    • Há 6 anos, iodine funcionava no Wi-Fi de outra companhia aérea
      A ideia e os princípios são interessantes, mas, por causa da velocidade, na prática é quase inútil — talvez desse para rodar algo como um mensageiro sobre UDP, mas só isso ;-)
    • Se o DNS é permitido pelo firewall, não bastaria usar WireGuard em UDP/53 em vez de mexer no próprio protocolo DNS?
  • “Esqueci de carregar os fones de ouvido e Limp Bizkit começou a tocar pelos alto-falantes do notebook. Felizmente, as outras pessoas no avião não pareceram se importar, então todo mundo curtiu junto.”
    Pessoas assim carecem de etiqueta básica em público
    Muita gente ao redor com certeza se incomodou, mas é bem provável que fossem pessoas educadas demais para dizer para não impor barulho inútil aos outros

    • Se o autor escreve “isto é sátira”, a sátira deixa de funcionar
    • Eu li como piada
      Há tanta gente sem essa etiqueta básica que achei uma piada engraçada, e pelo menos não acho que o autor seja realmente uma pessoa assim
    • A piada não foi engraçada, mas combina com o tema do texto
      Ela mostra a imagem do hacker que vê a possibilidade de internet grátis como uma oportunidade executável e, depois, cria uma distância ao sugerir que não é alguém que de fato abusaria dos sistemas da companhia aérea, então o tom inicial parece um recurso estilístico
    • Parece ser algo que os humanos chamam de “humor”
    • Espero que tenha sido piada, como outros disseram
      Caso contrário, seria uma atitude extremamente rude e insensível
  • Fico me perguntando se sou o único que fica sempre tão cansado ao entrar num avião que não consegue fazer nada além de fechar os olhos e esperar até o fim
    Só de pensar em tirar o notebook ou um livro já fico exausto, há muito ruído, e, sem fones com cancelamento de ruído, é difícil me concentrar
    Já passei pelo menos 2 horas desde que saí de casa, pegando trem, bonde e passando pela segurança, e a comida nada saudável do aeroporto também não ajuda
    Em metade do ano, o clima também está quente ou frio demais, e a mochila de 10 kg me faz suar o tempo todo, então no fim não sobra ânimo para fazer nada dentro do avião

    • Tenho TDAH adulto e, embora seja mais difícil me concentrar no trabalho, em aviões ou outros lugares caóticos consigo me concentrar como um laser
      É contraintuitivo, mas ouvi dizer que muitos cérebros com TDAH funcionam assim, e o tempo que passo no avião é o mais produtivo
    • Antigamente eu tentava tirar o notebook e fazer alguma coisa, mas, depois que o espaço entre os assentos diminuiu, ficou realmente difícil tirar qualquer coisa maior que um tablet
      Ou você precisa apoiá-lo no colo, ou, se a pessoa da frente reclinar o assento, há risco de a tela quebrar — isso aconteceu de verdade com um colega alguns anos atrás
      Hoje em dia, simplesmente pego o iPad e os fones com cancelamento de ruído e assisto a filmes ou séries de TV
    • Não é só você
      Meu corpo reage exatamente igual, e acho que tem a ver com a redução da quantidade de oxigênio no ar
      Não é uma questão de ruído, é uma questão do ar; e fones com cancelamento de ruído funcionam muito bem
      Mas também há pessoas que não são afetadas em nada e fazem coisas úteis no avião
    • Eu sou exatamente o oposto
      Por mais cansado que eu esteja ou por menos que tenha dormido, no avião não consigo pegar no sono nem fico cansado, então voos transatlânticos são ainda mais sofridos, e quando quem viaja comigo dorme por 8 horas parece até que estão zombando de mim
    • Não é só você
      Durante o voo minha cabeça fica muito grogue, então fico de olhos fechados até o pouso; quando tento ler um livro ou trabalhar, depois de 5 a 10 minutos meu cérebro desliga
      Curiosamente, a refeição de bordo sempre me causa inchaço abdominal, então preciso de remédio logo depois de pousar
      O interessante é que, nas duas vezes em que voei de classe executiva, consegui ler um pouco antes de o cérebro desligar
      Em trens de longa distância, se eu estiver sentado no sentido do movimento, é de fato mais fácil trabalhar, mas, se o trem estiver bem cheio, meu cérebro desliga de novo
  • A história de enviar cotações de ações, placares de jogos e clima me lembrou os recursos que o Google oferecia antigamente como serviço de mensagens de texto
    Usei muito antes de comprar meu primeiro smartphone, e, se você enviasse W[ZIP code] para 46645(GOOGL), ele respondia por SMS com a previsão do tempo
    stock:[symbol] também funcionava, e havia vários outros recursos dos quais já me esqueci
    Claro que o Google encerrou o serviço, mas, enquanto durou, era bem legal

    • Na época em que eu mexia com PHP, criei um bot do Twitter chamado SongBuddy, que encontrava músicas a partir de trechos da letra
      A estrutura era: você enviava algumas linhas da letra por SMS DM, que o Twitter suportava na época, ele pesquisava " lyrics" no Google, analisava os resultados e devolvia por SMS o artista e o título
      Não funcionava tão bem, mas eu tinha bastante orgulho dele
    • O site de conversão de câmbio que uso é mantido por um professor e provavelmente roda em um computador Pentium III escondido embaixo de alguma escada da universidade, mas continua no ar há décadas e parece que vai durar para sempre
    • Criei uma interface SMS↔ChatGPT com Twilio e uma instância da AWS
      Graças a isso, posso fazer perguntas ao ChatGPT de qualquer lugar do planeta usando um comunicador via satélite portátil inReach Mini 2, e é bem legal poder perguntar algo até no meio do Death Valley
    • Eu usava esse serviço o tempo todo com um celular flip
      Levava bastante tempo para digitar os termos de busca do Google, e os resultados podiam demorar 1 ou 2 minutos para chegar, mas era melhor do que nada
      Eu o usava principalmente para pesquisar o endereço de lugares aonde queria ir e digitá-lo no TomTom; os tempos mudaram muito
    • Fico curioso para saber quando foi isso
      Por volta de 1995, quando eu trabalhava em uma empresa de pesquisa em telecomunicações, subsidiária da Ericsson, tive uma ideia assim, e o principal exemplo era atualizações de status de voos
      Como ninguém imaginava que mensagens P2P, em que era preciso apertar várias vezes para digitar uma letra no teclado numérico, seriam tão populares, no contexto de aumento de dados na web inicial, serviços de informação pareciam o melhor uso
      O Teletext ainda existia, e também havia um projeto separado para extrair dados dele
      Mas é interessante pensar no que nós, que tínhamos acesso a SMS, e o público em geral acabamos usando de fato
  • É interessante que o autor tenha chegado bem perto de um TCP sobre um campo abstrato de edição compartilhada
    Isso, por si só, poderia ser uma ferramenta muito legal
    Dá para imaginar um proxy em que você só projeta em alto nível como ler e escrever em um recurso compartilhado dos dois lados, e ele cuida de todo o resto e o expõe como um proxy SOCKS

    • Pelo que sei, TCP/IP sobre DNS já foi implementado para usar internet grátis em hotspots pagos da Boingo em aeroportos
      No fim, Wi-Fi gratuito virou padrão e isso deixou de ser grande coisa; agora a disputa passou para o Wi-Fi gratuito a bordo
      No fim, o Wi-Fi a bordo também será gratuito em todos os lugares, e várias companhias aéreas já fazem isso
    • Tenho pensado nisso há anos, desde que as operadoras do meu país começaram a anunciar “WhatsApp ilimitado” em planos com franquia de dados
      Só funcionaria para texto, não para imagens ou vídeos, mas teria sido suficiente para navegação web comum
  • Alguns anos atrás, o reitor da nossa universidade disse algo como “os jogos estão afetando a frequência às aulas” e decidiu bloquear a rede LAN depois das 22h
    A implementação consistia em bloquear todo o tráfego de ida e volta por endereço IP, mas não bloqueava o TCP em si e também tinha se esquecido completamente do IPv6, que na época já nem era tão novidade assim
    Então criei um app simples de chat P2P que funcionava via IPv6, e o único problema era fazer meus amigos compartilharem seus endereços IPv6 e mantê-los nos contatos
    Funcionou bem, mas depois descobri que era muito mais fácil fazer tunelamento para um computador fora da rede

  • Acho que este é um exemplo quase perfeito que lembra o texto sobre escrever mais software inútil e a discussão subsequente no HN
    Muda a vida de alguém? Provavelmente não
    O processo de criar e explorar foi divertido? Quase certamente
    Deveríamos fazer mais coisas assim
    https://ntietz.com/blog/write-more-useless-software/
    https://news.ycombinator.com/item?id=37911900