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.