1P by neo 2달전 | favorite | 댓글 1개

PySkyWiFi: 완전히 무료이면서 믿을 수 없을 정도로 어리석은 장거리 비행 와이파이

  • 비행기가 10,000피트에 도달했을 때, 필자는 인터넷을 사용하려고 노트북을 꺼냈음
  • 기내 와이파이에 연결하고 브라우저를 열었더니 네트워크 로그인 페이지가 신용카드 정보를 요구했음
  • 로그인 페이지에서 무료로 에어마일 계정에 로그인하라는 메시지를 보고, 방화벽의 허점을 발견했음
  • JetStreamers Diamond Altitude 계정에 로그인하여 인터넷에 접근할 수 있는 방법을 찾았음

Prototype 1: 인스턴트 메시징

  • 에어마일 계정의 이름 필드를 통해 메시지를 주고받는 방법을 고안했음
  • 두 컴퓨터에서 동일한 에어마일 계정에 로그인하여 이름 필드를 업데이트하고 읽는 방식으로 간단한 채팅을 구현했음
  • 이 과정을 자동화하기 위해 커맨드 라인 도구를 작성했음

Prototype 2: 실시간 헤드라인, 주식 가격, 축구 점수

  • 에어마일 계정을 통해 실시간 정보를 전송하는 프로그램을 작성했음
  • 지상에 있는 컴퓨터가 주기적으로 에어마일 계정의 이름 필드를 확인하고, 요청된 정보를 다시 비행기로 전송하는 방식으로 동작함

실제 구현: PySkyWiFi

  • PySkyWiFi는 TCP/IP 프로토콜을 단순화하여 HTTP 요청을 에어마일 계정을 통해 전송하는 도구임
  • 지상 컴퓨터에서 HTTP 요청을 처리하고 응답을 다시 에어마일 계정을 통해 비행기로 전송함

PySkyWiFi 작동 원리

  • PySkyWiFi는 두 가지 구성 요소로 이루어짐:

    • Sky Proxy: 비행기에서 노트북에 실행되는 프록시
    • Ground Daemon: 지상에서 인터넷에 연결된 컴퓨터에 실행되는 데몬
  • Sky Proxy는 HTTP 요청을 작은 청크로 나누어 에어마일 계정의 이름 필드에 기록함

  • Ground Daemon은 이 청크를 읽고, HTTP 요청을 처리한 후 응답을 다시 작은 청크로 나누어 에어마일 계정에 기록함

  • Sky Proxy는 이 응답 청크를 읽고 원래의 HTTP 응답으로 재구성함

PySkyWiFi의 통신 논리

  • PySkyWiFi의 통신 논리는 두 개의 레이어로 나뉨:

    • Transport Layer: 데이터를 작은 청크로 나누고, 송신 및 수신 모드를 관리함
    • Network Layer: 데이터를 실제로 전송하는 역할을 함
  • Transport Layer는 데이터를 작은 청크로 나누어 송신하고, 수신자가 이를 확인하면 다음 청크를 전송함

  • Network Layer는 에어마일 계정의 이름 필드를 사용하여 데이터를 송수신함

최적화 및 개선 사항

  • 에어마일 계정의 필드 길이 제한을 극복하기 위해 base26 인코딩을 사용함
  • 여러 필드를 사용하여 대역폭을 증가시킴

결론

  • PySkyWiFi를 사용하여 블로그 홈페이지를 curl로 로드하는 데 성공했음
  • 이 프로젝트는 가장 생산적이면서도 비생산적인 비행이었음

GN⁺의 정리

  • PySkyWiFi는 기내 와이파이 비용을 절감하기 위한 창의적인 방법을 제시함
  • 에어마일 계정의 허점을 이용하여 인터넷에 접근하는 방식이 흥미로움
  • 이 프로젝트는 네트워크 프로토콜과 통신의 기본 원리를 이해하는 데 도움이 됨
  • 비슷한 기능을 가진 프로젝트로는 Tor와 같은 프록시 서비스가 있음
Hacker News 의견
  • 몇 년 전, 파트너가 Google Voice를 사용해 문자 메시지를 보냈음. Gmail 인박스에서 메시지를 확인하고 답장할 수 있어 편리했음

    • 파트너는 휴대폰을 좋아하지 않았지만, 무제한 3G 데이터가 있는 "Kindle Keyboard" 모델을 가지고 다녔음
    • Kindle의 간단한 웹 브라우저를 통해 Gmail 인터페이스를 로드할 수 있었음
    • 유일한 문제는 수신 문자 알림이었음
    • 홈 서버에서 웹 브라우저를 자동화하여 Amazon 계정에서 Kindle의 장치 이름을 업데이트하도록 설정했음
    • 장치 이름을 "My Kindle (x)"로 업데이트하여 읽지 않은 Google Voice 문자 수를 표시했음
    • 이 방법은 몇 년 동안 잘 작동했음
  • 이탈리아에서 그리스로 가는 20시간 페리에서 유료 위성을 통한 인터넷을 사용하지 않으려고 했음

    • 결제 시스템을 위해 stripe.com에 접근할 수 있었음
    • stripe.com의 모든 콘텐츠에 접근할 수 있었고, 이를 통해 reddit을 탐색할 수 있었음
    • HTTP 헤더를 변경하여 reddit.com에 연결했음
    • TLS 오류를 무시하고 로그인할 수 있었음
  • 몇 주 전, 아이들을 몰에 있는 수업에 데려갔을 때 무료 와이파이를 사용하려 했음

    • 노트북으로 로그인했지만 인터넷 연결이 없었음
    • Cisco 모뎀의 진단 도구를 통해 문제를 확인했음
    • 구글링을 통해 기본 관리자 계정 정보를 찾았고, 이를 통해 모뎀에 접속했음
    • 인터넷 버튼을 켜고 15초 후에 연결됨
    • 모뎀의 비밀번호를 변경했음
  • 최근에 비행기에서 글로벌 DNS가 결제 없이도 잘 작동하는 것을 확인했음

    • 일반적인 iodine 터널이 작동할 것 같음
  • 비행기에서 항상 피곤하고 아무것도 할 수 없다는 의견

    • 노트북이나 책을 꺼내는 것도 피곤함
    • 소음이 많고 소음 제거 헤드폰이 없어 집중하기 어려움
    • 공항의 건강에 좋지 않은 음식도 문제임
    • 무거운 배낭 때문에 땀이 남
  • 비행기에서 헤드폰을 충전하지 않아 노트북 스피커로 음악을 틀었던 경험

    • 주변 사람들이 불편해했을 것이라는 의견
  • Google이 제공했던 문자 메시지를 통한 정보 제공 서비스에 대한 추억

    • 날씨, 주식 정보 등을 문자로 받을 수 있었음
    • 스마트폰이 나오기 전 유용했음
  • TCP-over-shared-editable-fields라는 개념이 흥미롭다는 의견

    • SOCKS 프록시로 사용할 수 있는 도구를 상상해봄
  • 쓸모없는 소프트웨어를 작성하는 것이 재미있고 유익하다는 의견

    • 더 많은 이런 프로젝트를 만들어야 한다고 생각함
  • 몇 년 전 대학에서 10시 이후 LAN 네트워크를 차단했던 경험

    • IPv6를 이용한 간단한 P2P 채팅 애플리케이션을 만들어 해결했음
    • 친구들과 IPv6 주소를 공유해야 했지만 잘 작동했음