LAN'daki cihazlara INTERNET
iznine sahip tüm uygulamalar erişebilir.
Bu, uygulamaların yerel cihazlara bağlanmasını kolaylaştırır ancak kullanıcının parmak izini oluşturma ve konum için proxy olma gibi gizlilik sorunlarına da yol açar.
Yerel Ağ Korumaları projesi, yerel ağa erişimi yeni bir çalışma zamanında izinle sınırlayarak kullanıcının gizliliğini korumayı amaçlar.
Etki
Android 16'da bu izin isteğe bağlı bir özelliktir. Yani yalnızca bu izni etkinleştiren uygulamalar etkilenir. Etkinleştirmenin amacı, uygulama geliştiricilerin uygulamalarının hangi bölümlerinin örtülü yerel ağ erişimine bağlı olduğunu anlayarak gelecekteki bir Android sürümünde bu bölümleri izin korumasına hazırlamalarını sağlamaktır.
Aşağıdakileri kullanarak kullanıcının yerel ağına erişen uygulamalar etkilenecektir:
- Yerel ağ adreslerinde ham soketlerin doğrudan veya kitaplık kullanımı (ör. mDNS veya SSDP hizmet keşfi protokolü)
- Yerel ağa erişen çerçeve düzeyinde sınıfların kullanılması (ör. NsdManager)
Etki Ayrıntıları
Yerel ağ adresine gelen ve giden trafik için yerel ağ erişimi izni gerekir. Aşağıdaki tabloda sık karşılaşılan bazı durumlar listelenmiştir:
Uygulama Düşük Seviye Ağ İşlemi | Yerel Ağ İzni Gerekiyor |
---|---|
Giden TCP bağlantısı oluşturma | evet |
Gelen TCP bağlantısını kabul etme | evet |
UDP tekil yayın, çoklu yayın, yayın gönderme | evet |
Gelen UDP tekil yayın, çoklu yayın, anons alma | evet |
Bu kısıtlamalar ağ yığınının derinliklerine uygulandığından tüm ağ API'leri için geçerlidir. Platformda veya yönetilen kodda oluşturulan soketler, Cronet ve OkHttp gibi ağ kitaplıkları ve bunların üzerine uygulanan tüm API'ler buna dahildir. Yerel ağdaki hizmetleri (ör. .local son eki olan hizmetler) çözmeye çalışmak için yerel ağ izni gerekir.
Önceki kurallara istisnalar:
- Bir cihazın DNS sunucusu yerel bir ağdaysa bu sunucuya / bu sunucudan gelen trafik (53 numaralı bağlantı noktasında) için yerel ağ erişimi izni gerekmez.
- Uygulama içi seçici olarak Çıkış Değiştirici'yi kullanan uygulamaların yerel ağ izinlerine ihtiyacı yoktur (daha sonraki bir sürümde daha fazla bilgi sağlanacaktır).
Rehberlik
Yerel ağ kısıtlamalarını etkinleştirmek için aşağıdakileri yapın:
- Cihazınızı Android 16 Beta 3 veya sonraki bir sürüm içeren bir derlemeye flaşlayın
- Test edilecek uygulamayı yükleme
adb kullanarak Appcompat yapılandırmasını etkinleştirme veya devre dışı bırakma
adb shell am compat enable RESTRICT_LOCAL_NETWORK <package_name>
Cihazı yeniden başlatın
Artık uygulamanızın yerel ağa erişimi kısıtlanmış durumdadır ve yerel ağa erişme girişimleri soket hatalarına neden olur. Uygulama işleminizin dışında yerel ağ işlemleri gerçekleştiren API'leri (ör. NsdManager) kullanıyorsanız bu API'ler etkinleştirme sırasında etkilenmez.
Erişimi geri yüklemek için uygulamanıza NEARBY_WIFI_DEVICES
izni vermeniz gerekir.
- Uygulamanın manifest dosyasında
NEARBY_WIFI_DEVICES
iznini beyan ettiğinden emin olun. - Ayarlar > Uygulamalar > [Uygulama Adı] > İzinler > Yakındaki cihazlar > İzin ver'e gidin.
Artık uygulamanızın yerel ağa erişimi geri yüklenecektir ve tüm senaryolarınız, uygulamayı etkinleştirmeden önceki gibi çalışacaktır. Uygulamanın ağ trafiği bu durumdan nasıl etkilenir?
İzin | Giden LAN İsteği | Giden/Gelen İnternet İsteği | Gelen LAN İsteği |
---|---|---|---|
Verildi | Works | Works | Works |
İzin Verilmedi | Başarısızlar | Works | Başarısızlar |
Appcompat yapılandırmasını devre dışı bırakmak için aşağıdaki komutu kullanın
adb shell am compat disable RESTRICT_LOCAL_NETWORK <package_name>
Hatalar
Bu kısıtlamalardan kaynaklanan hatalar, yerel bir ağ adresine send
veya send
varyantı çağrıldığında çağıran sokete döndürülür.
Örnek hatalar:
sendto failed: EPERM (Operation not permitted)
sendto failed: ECONNABORTED (Operation not permitted)
Hatalar
Aşağıdakiler için hata ve geri bildirim gönderin:
- LAN erişiminde tutarsızlıklar (belirli bir erişimin "yerel ağ" erişimi olarak kabul edilmemesi gerektiğini düşünüyorsanız)
- LAN erişiminin engellenmesi gereken ancak engellenmediği hatalar
- LAN erişiminin engellenmesi gerekmeyen ancak engellenen hatalar
Aşağıdakiler bu değişiklikten etkilenmeyecektir:
- İnternet erişimi
- Mobil Ağ