- Strange Loop’tan dönüşte St. Louis-Oakland direkt uçuşunda 8 dolarlık internet ödemesi başarısız olunca, uçak içi WiFi’ye bağlıyken internet olmadan erişilebilen veriler incelendi
- Southwest WiFi portalının ağ isteklerinde tekrar tekrar başarılı olan
current.json endpoint’i bulundu; bu yanıtın uçuş durumu sayfasının temel verisi olduğu görülüyor
- Bu endpoint, çerez veya header olmadan da
curl ile çağrılabiliyordu ve irtifa, koordinatlar, tahmini varış zamanı, yer hızı, kalan mesafe, uçuş ilerleme yüzdesi, uydu bağlantı durumu gibi bilgileri döndürüyordu
- Toplanan verilerle irtifa, ETA ve yer hızı görselleştirildi; alçalma bölümü hariç tutulduğunda irtifa yalnızca yaklaşık 20-30 fit seviyesinde dalgalanıyordu
- Özellikle pratik bir keşif olmasa da, uçak içi WiFi portalının açığa sunduğu uçuş durumu JSON’u ile uçuş sırasında veri toplama ve analiz yapılabiliyor
Ödeme hatasından başlayan uçak içi WiFi keşfi
- Strange Loop’tan dönüşte St. Louis-Oakland direkt uçuşunda Southwest’in uçak içi WiFi portalı üzerinden 8 dolarlık internet erişimi satın alınmaya çalışıldı, ancak hiçbir ödeme yöntemi kabul edilmedi
- Web sayfası yardımcı olacak bir hata mesajı göstermedi; tarayıcının ağ geliştirici araçları ile başarısız istek incelendi
- Başarısız isteğin kendisinde ipucu bulmak zordu, ancak tekrar tekrar başarılı olan
current.json isteği dikkat çekti
current.jsonın döndürdüğü uçuş durumu verileri
current.json yanıtı, uçak içi WiFi portalının uçuş durumu sayfasını çalıştıran veri gibi görünüyor
- Örnek yanıtta şu değerler yer alıyordu
sat_commlink_portal.status: conn_ok
satcomm_status.commlink: active
satcomm_status.linkparams: not-stale
pcent_flt_complete: uçuş ilerleme oranı gibi görünen değer
altVal: mevcut irtifa
lat, lon: mevcut koordinatlar
dtzone: varış noktasının saat dilimi
within_us: uçuşun ABD içinde olup olmadığı
etad: varış noktasına tahmini varış zamanı
gspdVal: mevcut yer hızı
ttgc: kalan süre gibi görünen değer
dist_remain: kalan mesafe
actime24: bir saat dilimindeki mevcut saat
Tarayıcı isteğini curl ile yeniden üretmek
- Tarayıcının “Copy as cURL” özelliğiyle endpoint çağrısı komutu hızlıca elde edildi
- Bu özellik Firefox ve Chromium tabanlı tarayıcılarda bulunur; tarayıcının gönderdiği isteği aynı header’larla yeniden üretmek için yararlıdır
- Deney sonucunda istekte yer alan çerez veya header’ların zorunlu olmadığı görüldü; aşağıdaki gibi basit bir
curl çağrısıyla veri alınabiliyordu
curl 'https://getconnected.southwestwifi.com/current.json'
- Ardından her 30 saniyede bir veriyi alıp log dosyasına biriktiren bir döngü çalıştırıldı
watch -n 30 "curl https://getconnected.southwestwifi.com/current.json | jq -c >> flight-logs"
Yanıt alanlarında kalan sorular
- Alanların çoğu sezgiseldi, ancak bazı değerlerin anlamı net değildi
sat_commlink_portal.status ile satcomm_status.commlink arasındaki fark
pcent_flt_complete değerinin mesafeye mi, tahmini süreye mi dayandığı
altVal, etad, gspdVal değerlerinin uçuş sırasında ne kadar dalgalandığı
actime24 içindeki acnin ne anlama geldiği
actime24, uçağın konumundaki mevcut saat değil de varış noktasının mevcut saati gibi göründüğünden, acyi “aircraft” olarak yorumlamak zor
Uçuş sırasında toplanan verilerin görselleştirilmesi
- Toplanan verilerle irtifa, ETA ve yer hızı değişimleri görselleştirildi
-
İrtifa değişimi
- Başta irtifa verisinde ne kadar gürültü olduğunu görmek amaçlandı
- Genel aralık büyük olduğu için gürültüyü görmek zordu; alçalma bölümü çıkarıldıktan sonra irtifa dalgalanmasının yaklaşık 20-30 fit seviyesinde olduğu görüldü
- Bu düzeydeki kararlılık beklenenden yüksekti, ancak normal aralık veya veri doğruluğu bilinmiyordu
-
ETA değişimi
- ETA’nın makul ölçüde kararlı olması bekleniyordu; ilk kalkıştan sonra düzgün bir uçuşta gerçekten de kararlıydı
- Hava durumu nedeniyle inişin geciktiği bir durumda ETA’nın yavaş yavaş mı uzayacağı, yoksa son kısımda keskin biçimde mi artacağı hâlâ bir soru
-
Yer hızı değişimi
- Yer hızı da beklendiği gibi kararlıydı
- Başta hız birimi MPH olarak gösterildi, ancak HN okurları bu değerin büyük olasılıkla knots olduğunu belirtti
- Uçuşun başından itibaren veri toplanamadığı için, seyir hızına yaklaşma bölümündeki eğri görülemedi
Sonuç
- Toplanan verilerde özellikle yararlı veya şaşırtıcı bir nokta yoktu
- İnternet erişimi olmadan da uçak içi WiFi portalının açığa sunduğu uçuş durumu JSON’u kullanılarak uçuş sırasında veri toplanıp analiz edilebiliyor
1 yorum
Hacker News yorumları
Oğlum 9-10 yaşlarındayken uçakta telefonundan internet kullandığını gördüm; internet ücreti hiç ödemediğim için nasıl kullandığını sordum.
Okuldan bir arkadaşının öğrettiğini, Wi-Fi ayarlarındaki DHCP tarafından atanmış IP adresi rakamlarını değiştirince olduğunu söyledi. O dönemde American Airlines yalnızca ücretli kullanıcıların IP’lerine izin veriyor gibiydi; biri 192.168 aralığındaki bir IP’yi tahmin edip kendini onun yerine koyarsa ek kimlik doğrulama olmadan bağlantıyı alabiliyordu.
Yapmamasını söyledim ama denemeye cesaret etmesiyle biraz gurur duydum.
Önce
nmap -sPile tüm subnet’e ping sweep yapıp ARP önbelleğini işe yarar IP/MAC adresleriyle doldurur, sonra tek tek IP ve MAC adresini değiştirerek güvenlik duvarını aşan kombinasyonu bulurdum.Wayport’ta (şimdiki AT&T WiFi) NOC mühendisi olarak çalışmış olmam, yapıyı anlamama yardımcı olmuştu.
Çünkü başka birinin o anda kullanıyor olma ihtimali ve bağlantının kopma ihtimali daha düşüktü.
Çocukken yaptığım başka küçük bir hack daha vardı: Havayollarının uçak içi filmler için özel kulaklık sattığı veya kiraladığı dönemde, port yan yana iki delikten, fiş de iki tüpten oluşuyordu.
Uçağa binmeden önce terminaldeki fast food restoranından birkaç pipet, mümkünse bükülebilen pipet alıp birbirine ekleyerek uzun bir pipet yapar, bir ucunu porta takıp diğer ucunu kulağıma dayadığımda ücretsiz film sesini dinleyebiliyordum.
O dönemde ödeme yapmamış kullanıcılar için yalnızca yaygın portları (80, 443, 53 vb.) engelliyorlar gibiydi; daha sonra bu açık kapatıldı.
Açık Wi-Fi güvenliği durumu aslında epey üzücü ve havayollarının bundan daha iyi bir şeyi kolayca nasıl yapabileceğini de pek bilmiyorum.
Cihaz destekliyorsa Opportunistic Wireless Encryption [1] kullanıp kimlik doğrulamayı belirli bir MAC adresine değil belirli bir OWE oturumuna bağlamak mümkün olabilir; ama OWE oturumunun ne kadar kararlı olduğunu bilmiyorum.
Erişim noktası her değiştiğinde yeniden giriş yapmak gerekirse bu çok rahatsız edici olurdu.
Ücretli Wi-Fi ya da ücretsiz Wi-Fi güvenliğinin hâlâ çözülmüş bir sorun olmaması üzücü; ödeme, 3DS, parola sıfırlama e-postası gibi seçili trafiği geçirmek zorunda olan kırılgan captive portal’lar gibi özel geçici çözümlere hâlâ ihtiyaç var.
İstemcinin o anda bağlı mı, sınırlı mı, ödeme/kimlik doğrulama mı gerekiyor anlayabileceği standart bir endpoint ve API olsa da iyi olurdu; ayrıca bir kimlik doğrulama token’ı alıp aynı oturumda doğal biçimde yeniden bağlanabilse güzel olurdu.
Hotspot 2.0 ve WPA-EAP (WPA Enterprise) var, ancak bunlar sırasıyla operatörlerin işlettiği hotspot ağlarına ve kurumsal ortamlara daha uygun; “web portalı üzerinden ödeme” kullanımı için pek örtüşmüyorlar.
[1] https://en.wikipedia.org/wiki/Opportunistic_Wireless_Encrypt...
Ayarı bunlardan birinin MAC adresine değiştirirseniz, asıl kullanıcı işi bittikten sonra o bağlantıyı tek başınıza kullanabiliyordunuz.
İş seyahatlerinde Wi-Fi ücreti ödemeyi reddederdim; havaalanları ve kafelerin hâlâ ücretli erişim aldığı zamanlarda epey işe yarıyordu.
Artık neredeyse gerek kalmadı, ama hâlâ bağlantı ücreti olan yerlerde yardımcı olabilir.
“Bu verilere göre uçağın irtifası yalnızca 20–30 feet kadar dalgalanmış. Beklediğimden daha stabil!”
Otopilotlar çok başarılıdır ve barometrik irtifayı temel alarak servo kontrolü yapar.
Modern uçaklardaki birçok barometrik irtifa enkoderi, örneğin transponder’ın SSR radarı veya ADS-B üzerinden raporladığı irtifayı sağlayan cihazlar, 25 feet kodlama çözünürlüğüne sahiptir.
Burada görünenin de büyük olasılıkla o 25 feet çözünürlük olduğu söylenebilir; 10 feet çözünürlüklü enkoderler de var ama 25 feet çok yaygındır.
https://globe.adsbexchange.com/ haritasında bir uçağa tıklayıp soldaki kenar çubuğunu en alta kadar kaydırırsanız “Accuracy” bölümünü görebilirsiniz.
ADS-B Exchange dikey konum doğruluğu olan Rc/v’yi göstermiyor, ancak diğer değerleri gösteriyor.
Ayrıntılar için https://mode-s.org/decode/content/ads-b/7-uncertainty.html sayfasına bakın.
Seyir sırasında bir yolcu uçağının elbette otopilot kullanacağını varsayarım.
Eskiden uçuş takibi desteği alırken yaklaşık 100 feet alçalınca kontrolörün iyi olup olmadığımı sormasına ve bu kadar ayrıntılı izlediklerini görmeme şaşırmıştım.
Su üzerindeki bölüme girmeden önce can yeleğini giymeyi unutmuştum; onu giyerken de henüz uçuş dersi almamış olan eşime kumandaları devretmiştim.
Daha sonra eşim de lisans aldı ve hava trafik kontrol takibinin araya girecek kadar hassas olması ilginçti.
Barometrik irtifa ile GPS farklı şeyler; ayrıca barometrik altimetreyi farklı bir AWOS referansına göre yeniden ayarlayınca farkın belirgin biçimde sıçrayıp sıçramadığını da merak ediyorum.
Büyük uçaklarda nasıl yapıldığını bilmiyorum ama küçük uçaklarda altimetreyi yerel hava durumuna göre ayarlamak gerekir.
Meteoroloji istasyonu kendi irtifasındaki basıncı ölçüp “deniz seviyesine göre düzeltilmiş” değeri telsizle bildirir; bu değer altimetreye girilerek yerel hava değişimlerine bağlı barometrik irtifa okumaları düzeltilir.
Bir saat uçup aynı yere geri dönseniz bile altimetre ayarı birkaç milibar değişmiş olabilir.
Uçaklar arasındaki dikey ayırma standardı 2000 feet iken 2000’lerin başında 1000 feet’e düşürüldü.
Örneğin bir pilot 3000 feet’e giderse tam olarak 3000 feet’te olur; başka bir pilot da çarpışma rotasında 3000 feet isterse çarpışma kesinleşebilir.
İrtifa daha az hassas olsaydı bunun yakın geçiş olayı olarak kalma ihtimali daha yüksek olurdu.
Çözümün muhtemelen yuvarlak sayılardan kaçınıp 2950 feet, 3050 feet gibi değerler kullanmak olduğunu hatırlıyorum.
Ayrıntılarda yanılıyor olabilirim ama bu sorunun ciddi biçimde değerlendirildiğinden oldukça eminim.
Birkaç ay önce aynı şeyi keşfedip bu API’yi kullanan bir CLI uçuş takipçisi yaptım.
Birkaç havayolunda denedim; hepsi aynı uçak içi internet sağlayıcısını kullandığı için neredeyse kusursuz çalıştı.
[1]: https://github.com/NalinPlad/OuterFlightTracker
Benzer bir şey yapmak istiyordum ama uçuş sırasında internete bakmadan bir TUI yapacak kadar deneyimim yoktu.
Yine de bunun zaten yapılmış olmasına sevindim.
Delta uçuşlarında aynı veriyi alma yöntemi şöyle
İlginç bir parça da var
jq’nun string interpolation özelliğini kullanınca daha da basitleştirilebilirWi-Fi portal arayüzünde de görülebilen bir bilgi ama JSON yığını olarak görmek ayrı bir his veriyor Mobilde olduğum için JSON biçimlendirmesini mazur görün
planeIdya datailNumberyerine daha genelvehicleIdkullanmayı seçmeleri ilginçDelta’nın operasyon ekipmanları arasında buna uyan API’ye sahip başka türler var mı merak ediyorum
Başka iç sistemleri bilen birinin
flightIdüzerinden sistem yapısını ne kadar çıkarabileceğini de merak ediyorumDışarıdan bakınca bilinen verilerden oluşturulmuş bileşik bir anahtardan fazlası değil gibi görünüyor ama yine de ilginç
"airspeed": nullİnsanı huzursuzca pencereden dışarı baktırıyor
Ücretsiz iMessage ya da WhatsApp’a izin verilen bağlantıyı kullanarak rastgele veri gönderen bir proxy yapsa biri, görmek isterdim
Eve bir WhatsApp relay’i kurup uçaktan mesaj alıp göndermek gibi
En temel hâliyle, URL’yi evdeki WhatsApp’a gönderince evde web sayfasını yükleyip HTML’i WhatsApp yanıtı olarak geri göndererek render etmek mümkün olabilir
Ne kadar şeyi çalıştırmanın mümkün olacağını merak ediyorum
Görünüşe göre WhatsApp üzerinden TCP relay’i yapan biri zaten var, harika
Abonelik ücretini ödeyip Wi-Fi ağı da açarsınız
Uçağın SSID’si “Foo” ise adını “Foo discounted” koyup captive portal’da gaziler, yaşlılar, çocuklar gibi çeşitli “indirimler” seçtirirsiniz
Hangisi seçilirse seçilsin ödeme sayfasında 2 dolar alırsınız
Hizmet maliyetini çıkardıktan sonra sonraki ziyaretçilere “tüm indirimler tükendi, Foo’yu kullanın” gösterirsiniz
Böylece ben ücretsiz internet kullanırım, router/portal kullanıcıları da 2 dolarlık internet kullanmış olur
Yukarı yönlü bant genişliği kesin berbat olacaktır, bu yüzden tüm verileri tek bağlantım üzerinden çoklamak da kolay olur
RPi gibi bir cihaza koymak gerekir ama güvenlik kontrolünden geçmesi için müzik çalar gibi bitmiş bir ürün görünümünde olmalı; ayrıca masayı kaldırmak gerektiğinde ya da tuvalete gidince de çalışmaya devam edebilmeli
Uçakta kötü niyetli Wi-Fi bağlantılarını kesen bir WIPS ya da WIDS bulunma olasılığı çok düşük görünüyor
Zaten LAN partisi yasak değil, değil mi
Muhtemelen iMessage ya da push bildirimleri için izin listesine aldıkları hedefler buna kadar uzanıyordu
Birkaç gün sonra dönüş uçuşundan önce çoktan kapatılmıştı
Sanırım hacker günlerim geride kaldı
Iodine(https://github.com/yarrick/iodine) gibi bir DNS tüneliyle de benzer bir şey yapmak büyük ihtimalle mümkün
Southwest aynı veriyi daha güzel bir ekranda gösteriyor
Wi‑Fi ücreti ödemeseniz de uçuş takibi, mevcut irtifa, tahmini varış saati, haritadaki konum gibi pek çok bilgiyi görebiliyorsunuz
Muhtemelen yazarın işleme programını yaptığı veriyle aynı veriyi kullanıyor; özünde ücretsiz ziyaret edilebilen bir site varmış gibi
Bu veriyi görselleştiren güzel bir durum sayfasını ücretsiz görebiliyorsunuz
Yine de veriyi kazımamın iki nedeni vardı
Birincisi, durum sayfası yalnızca mevcut değeri gösterdiği için tüm uçuş verisini görmek istedim
İkincisi, eğlenceliydi
Bu yazının ruhu hoşuma gitti
Yazar bu bilgiyi Git scraping ile de toplayabilirmiş gibi görünüyor
https://simonwillison.net/2020/Oct/9/git-scraping/
Pencereden fotoğraf çekip o JSON çıktısındaki GPS koordinatlarını görüntüye bağlayabileceğimi düşündüm
Oldukça kullanışlı görünüyor
ABD’de sivil GPS cihazlarının, ITAR askeri ürün ihracat kısıtlamaları nedeniyle 60.000 feet irtifanın ve 1.000 knot hızın üzerinde çalışması yasaktır
Uçak verisiyle ADS-B verisini karşılaştırmak isterseniz, bu özgün yazı yazarının uçuşu gibi görünüyor
https://www.flightaware.com/live/flight/SWA2340/history/2023...
İyi fikir; bunu düşünememiş olmam üzücü
İlginç bir hikâye
Ama şu
timebiçimi kimsenin gözüne batmıyor muGarip bir seçim gibi görünüyor; saat dilimi ofseti olan ISO 8601 gibi daha standart bir şey beklerdim
"time": "Sun Sep 24 22:02:19 2023"Bu sistemi tasarlayan kişi, sunucuda zamanı uçuşun konumuna göre görünen yerelleştirilmiş bir gösterime dönüştürüp istemci tarafı mantık olmadan doğrudan web arayüzüne koymak istemiş gibi
ctime’ın kullandığı varsayılan biçime benziyorAlttaki backend hakkında bir ipucu olabilir
https://cplusplus.com/reference/ctime/ctime/