DNS Çözümleyici

DNS Çözümleyici modülü, DNS müdahalesi için kullanıcı koruması sağlar ve yapılandırma güncellemesi saldırılarının yanı sıra DNS için iyileştirilmiş ağ performansı belirler. Modül, DNS saplamayı uygulayan kodu içerir. çözümleyici; www.google.com gibi adları IP'ye çevirir 2001:db8::1 gibi adreslere de sahiptir. DNS saplama çözümleyicisi geri alındı Şunun gibi Java API öğeleri: InetAddress#getAllByName ve Network#getAllByName ve yerel ağ iletişimi işlevleri içerir ve gönderme ve DNS sorguları alınıyor ve sonuçlar önbelleğe alınıyor.

Android 10'daki değişiklikler

Android 9 ve önceki sürümleri çalıştıran cihazlarda DNS çözümleyici kodu Biyonik ve netd. DNS aramaları Sistem genelinde önbelleğe almaya izin vermek için netd arka plan programı, uygulamalar ise fonksiyonlarını (ör. getaddrinfo) çağıran bir fonksiyondur. Sorgu gönderildi bir UNIX soketi üzerinden /dev/socket/dnsproxyd İsteği ve çağrıyı ayrıştıran netd arka plan programı getaddrinfo tekrar DNS aramaları yapar, ardından sonuçları önbelleğe alır Böylece diğer uygulamalar bunları kullanabilir. DNS çözümleyici uygulaması çoğunlukla bionic/libc/dns/ içinde ve kısmen şurada yer alıyor: system/netd/server/dns.

Android 10, DNS çözümleyici kodunu system/netd/resolv, bunu C++ biçimine dönüştürür, ardından modernleştirir ve kodu yeniden düzenler. Bionic'teki kod, uygulama için var olmaya devam ediyor çalışır, ancak artık sistem tarafından çağrılmaz. Bu kaynaklar Yollar yeniden düzenlemeden etkilenir:

  • bionic/libc/dns
  • system/netd/client
  • system/netd/server/dns
  • system/netd/server/DnsProxyListener
  • system/netd/server/ResolverController
  • system/netd/resolv

Biçim ve bağımlılıklar

DNS Çözümleyici modülü ("com.android.resolv") APEX dosyası oluşturur ve netd; ancak netd bir değil modül yerel yuvaya hizmet verdiğinden bağımlılık Doğrudan /dev/socket/dnsproxyd. çözümleyici yapılandırması netd konumundan çözümleyiciye taşındı. Yani sistem hizmeti, doğrudan çözümleyici modülüne çağrı yapabilir. hem de netd üzerinden oynayabilirsiniz.

DNS Çözümleyici modülü libc (Bionic) ve ve bağımlılıklarını statik olarak bağlar; başka kitaplık gerekmez.

mDNS .local çözümleme

Kasım 2021'den itibaren Android çözümleyicisi, "5.1 Tek seferlik çoklu yayın DNS Sorguları" standart DNS sorgularını gizli bir şekilde 224.0.0.251:5353 veya [FF02::FB]:5353. mDNS çözümlemesi şeffaf olarak desteklenir *.local ile biten ana makine adına sahip getaddrinfo() numaralı telefonu arayarak.

mDNS .local çözümlemesi, getaddrinfo() hizmetinin mevcut işlevlerini geliştirir adreslerini almak için. Cihaz, mDNS .local çözünürlüğünü destekliyorsa getaddrinfo() API, mDNS sorgularını 224.0.0.251:5353 veya [FF02::FB]:5353'e gönderir yerel adresleri döndürür. Cihaz mDNS .local'u desteklemiyorsa getaddrinfo() API yöntemi, DNS'e bir DNS sorgusu gönderir sunucu.

Bu kod, packages/modules/DnsResolver konumundaki AOSP'de yer alır. Kullanıcılar, adresleri almak için mevcut mDNS tasarımını kullanın veya bunun yerine getaddrinfo() kullanın. Kullanıcının davranışı bu özellik, mDNS çoklu yayın adreslerine gönderilen normal bir DNS sorgusu gibidir. Bu özellikte yok sistem sağlığı üzerindeki etkisi.

Kullanıcılar adb shell ping6 HOSTNAME.local komutunu kullanabilir, Burada HOSTNAME, LAN üzerindeki bir hedef cihazın ana makine adıdır. Örneğin, adb shell ping6 ipad.local.

VPN ve mobil veri bağlantıları .local çözünürlüğünden hariç tutulur.