Program do rozpoznawania nazw DNS

Moduł rozpoznawania nazw DNS zapewnia ochronę użytkowników przed przechwytywaniem DNS ataki i aktualizacje konfiguracji oraz poprawiły wydajność sieci dla DNS rozwiązań. Moduł zawiera kod implementujący atrapę DNS. resolver, który tłumaczy nazwy takie jak www.google.pl na IP takich jak 2001:db8::1. Program do rozpoznawania wersji DNS sięga wstecz Elementy interfejsu API Java, takie jak InetAddress#getAllByName i Network#getAllByName, a także natywnych funkcji sieci oraz implementuje wysyłanie i odbieranie zapytań DNS i zapisywanie wyników w pamięci podręcznej.

Zmiany w Androidzie 10

Na urządzeniach z Androidem 9 lub starszym kod resolvera DNS jest rozłożony Bionic i netd. Wyszukiwanie DNS jest scentralizowane demon netd umożliwiający buforowanie w całym systemie, podczas gdy aplikacje funkcji wywoływania (takich jak getaddrinfo) w Bionic. Zapytanie zostanie wysłane przez gniazdo UNIX do /dev/socket/dnsproxyd demona netd, który analizuje żądanie i wywołuje żądanie. getaddrinfo jeszcze raz, aby przeprowadzić wyszukiwania DNS, a następnie zapisze wyniki w pamięci podręcznej aby inne aplikacje mogły z nich korzystać. Implementacja resolvera DNS polegała głównie na zawarte w bionic/libc/dns/ i częściowo w system/netd/server/dns

Android 10 przenosi kod resolvera DNS do system/netd/resolv, konwertuje na C++, a następnie modernizuje refaktoryzuje kod. Kod aplikacji Bionic nadal istnieje. związane ze zgodnością, ale nie jest już wywoływany przez system. Te źródła na ścieżki wpływa refaktoryzacja:

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

Format i zależności

Moduł rozpoznawania nazw DNS (`com.android.resolv`) jest dostarczany jako APEX i jest dynamicznie połączony przez netd; jednak netd nie jest gdy moduł obsługuje gniazdo lokalne bezpośrednio /dev/socket/dnsproxyd. Punkt końcowy Binder dla konfiguracja resolvera została przeniesiona z netd do resolvera, co oznacza, że usługa systemowa może wywoływać bezpośrednio do modułu resolvera bez przejazdu przez netd.

Moduł rozpoznawania nazw DNS korzysta z usług libc (Bionic) i statycznie łączy zależności; nie są wymagane żadne inne biblioteki.

Rozpoznawanie plików mDNS w formacie lokalnym

Od listopada 2021 r. resolver na Androida obsługuje rozpoznawanie plików mDNS z rozszerzeniem .local, które implementuje „5.1 One-Shot Multicast DNS Zapytania” (5.1 Zapytania DNS typu One-Shot) w RFC 6762, aby ślepo wysyłać standardowe zapytania DNS do 224.0.0.251:5353 lub [FF02::FB]:5353. Rozpoznawanie nazw mDNS jest w przejrzysty sposób obsługiwane Wywołując funkcję getaddrinfo() z nazwą hosta kończącą się na *.local.

Rozdzielczość mDNS zwiększa obecne funkcje getaddrinfo() aby uzyskać adresy. Jeśli urządzenie obsługuje rozpoznawanie plików mDNS z rozszerzeniem .local, Interfejs API getaddrinfo() wysyła zapytania mDNS na numer 224.0.0.251:5353 lub [FF02::FB]:5353 i zwraca adresy lokalne. Jeśli urządzenie nie obsługuje pliku mDNS .local rozpoznawanie, metoda interfejsu API getaddrinfo() wyśle zapytanie DNS do systemu DNS serwera.

Kod jest w AOSP w regionie packages/modules/DnsResolver. Użytkownicy mogą zachować aktualnego projektu mDNS, aby uzyskać adresy, lub użyj zamiast tego funkcji getaddrinfo(). Działanie funkcji Ta funkcja przypomina zwykłe zapytanie DNS wysyłane na adresy transmisji grupowej mDNS. Ta funkcja nie ma wpływ na stan systemu.

Użytkownicy mogą użyć polecenia adb shell ping6 HOSTNAME.local, gdzie HOSTNAME to nazwa hosta urządzenia docelowego w sieci LAN, na przykład adb shell ping6 ipad.local

Połączenia VPN i mobilnej transmisji danych nie są obsługiwane w rozdzielczości z rozszerzeniem .local.