DNS解析器

DNS 解析器模塊為 DNS 攔截和配置更新攻擊提供用戶保護,並改進 DNS 解析的網絡性能。該模塊包含的代碼,實現了DNS存根解析器,翻譯的名字,如www.google.com到IP地址,如2001:DB8 :: 1。該DNS存根解析備份的Java API元素,如InetAddress類#getAllByName網絡#getAllByName ,以及本地聯網功能發送和接收DNS查詢和緩存結果,並實現。

Android 10 中的變化

在運行Android 9和更低的設備,DNS解析的代碼是跨仿生和蔓延netd 。 DNS查找集中在netd守護進程,以允許整個系統的高速緩存,而應用程序調用函數(如getaddrinfo在仿生)。該查詢發送過UNIX套接字/dev/socket/dnsproxydnetd守護進程,它解析請求並調用getaddrinfo再次發出DNS查找,然後緩存結果,以便其他應用程序可以使用它們。該DNS解析器實現大部分是包含在bionic/libc/dns/和部分system/netd/server/dns

機器人10移動DNS解析器代碼到system/netd/resolv,將其轉換為C ++,然後現代化,和refactors的代碼。由於應用程序兼容性原因,Bionic 中的代碼繼續存在,但不再被系統調用。這些源路徑受重構影響:

  • bionic/libc/dns
  • system/netd/client
  • system/netd/server/dns
  • system/netd/server/DnsProxyListener.*
  • system/netd/resolv

格式和依賴

DNS解析器模塊被遞送作為APEX文件和動態連接由netd ;然而, netd不是依賴作為模塊提供本地套接字/dev/socket/dnsproxyd直接。活頁夾端點解析器配置從移動netd的解析器,這意味著系統服務可以直接調用解析器模塊,而無需通過去netd

DNS解析器模塊依賴於libc (仿生)和靜態鏈接它的依賴;不需要其他庫。