डीएनएस रिज़ॉल्वर

DNS रिज़ॉल्वर मॉड्यूल DNS अवरोधन और कॉन्फ़िगरेशन अद्यतन हमलों के लिए उपयोगकर्ता सुरक्षा प्रदान करता है और DNS रिज़ॉल्यूशन के लिए बेहतर नेटवर्क प्रदर्शन प्रदान करता है। मॉड्यूल में वह कोड होता है जो DNS स्टब रिज़ॉल्वर को लागू करता है, जो www.google.com जैसे नामों को 2001:db8::1 जैसे आईपी पते में अनुवादित करता है। DNS स्टब रिज़ॉल्वर जावा एपीआई तत्वों जैसे InetAddress#getAllByName और Network#getAllByName , साथ ही मूल नेटवर्किंग फ़ंक्शंस का समर्थन करता है, और DNS क्वेरीज़ भेजने और प्राप्त करने और परिणामों को कैशिंग करने का कार्यान्वित करता है।

एंड्रॉइड 10 में बदलाव

एंड्रॉइड 9 और उससे पहले के संस्करण चलाने वाले उपकरणों पर, डीएनएस रिज़ॉल्वर कोड बायोनिक और netd में फैला हुआ है। सिस्टम-वाइड कैशिंग की अनुमति देने के लिए DNS लुकअप को netd डेमॉन में केंद्रीकृत किया जाता है, जबकि ऐप्स बायोनिक में फ़ंक्शंस (जैसे getaddrinfo ) को कॉल करते हैं। क्वेरी को UNIX सॉकेट से /dev/socket/dnsproxyd पर netd डेमॉन पर भेजा जाता है, जो अनुरोध को पार्स करता है और DNS लुकअप जारी करने के लिए getaddrinfo फिर से कॉल करता है, फिर परिणामों को कैश करता है ताकि अन्य ऐप्स उनका उपयोग कर सकें। DNS रिज़ॉल्वर कार्यान्वयन अधिकतर bionic/libc/dns/ और आंशिक रूप से system/netd/server/dns में समाहित था।

एंड्रॉइड 10 DNS रिज़ॉल्वर कोड को system/netd/resolv, इसे C++ में परिवर्तित करता है, फिर कोड को आधुनिक बनाता है और रिफ़ैक्टर करता है। बायोनिक में कोड ऐप संगतता कारणों से मौजूद है, लेकिन अब सिस्टम द्वारा इसे कॉल नहीं किया जाता है। ये स्रोत पथ रिफैक्टरिंग से प्रभावित होते हैं:

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

प्रारूप और निर्भरताएँ

DNS रिज़ॉल्वर मॉड्यूल (`com.android.resolv`) एक APEX फ़ाइल के रूप में वितरित किया जाता है और गतिशील रूप से netd द्वारा लिंक किया जाता है; हालाँकि, netd एक निर्भरता नहीं है क्योंकि मॉड्यूल सीधे स्थानीय सॉकेट /dev/socket/dnsproxyd पर कार्य करता है। रिज़ॉल्वर कॉन्फ़िगरेशन के लिए बाइंडर एंडपॉइंट को netd से रिज़ॉल्वर में ले जाया गया था, जिसका अर्थ है कि सिस्टम सेवा netd से गुजरे बिना सीधे रिज़ॉल्वर मॉड्यूल में कॉल कर सकती है।

DNS रिज़ॉल्वर मॉड्यूल libc (बायोनिक) पर निर्भर करता है और इसकी निर्भरता को स्थिर रूप से जोड़ता है; किसी अन्य पुस्तकालय की आवश्यकता नहीं है.

एमडीएनएस .स्थानीय संकल्प

नवंबर 2021 से शुरू होकर, एंड्रॉइड रिज़ॉल्वर mDNS .local रिज़ॉल्यूशन का समर्थन करता है, जो मानक DNS क्वेरीज़ को आँख बंद करके 224.0.0.251:5353 या [FF02::FB]:5353 पर भेजने के लिए RFC 6762 में "5.1 वन-शॉट मल्टीकास्ट DNS क्वेरीज़" लागू करता है। mDNS रिज़ॉल्यूशन को *.local पर समाप्त होने वाले होस्टनाम के साथ getaddrinfo() कॉल करके पारदर्शी रूप से समर्थित किया जाता है।

mDNS .स्थानीय रिज़ॉल्यूशन पते प्राप्त करने के लिए getaddrinfo() की मौजूदा कार्यक्षमता को बढ़ाता है। यदि कोई डिवाइस mDNS .स्थानीय रिज़ॉल्यूशन का समर्थन करता है, तो getaddrinfo() API mDNS क्वेरीज़ को 224.0.0.251:5353 या [FF02::FB]:5353 पर भेजता है और स्थानीय पते लौटाता है। यदि कोई डिवाइस mDNS .स्थानीय रिज़ॉल्यूशन का समर्थन नहीं करता है, तो getaddrinfo() API विधि DNS सर्वर पर एक DNS क्वेरी भेजती है।

कोड AOSP में है, जो packages/modules/DnsResolver में स्थित है। उपयोगकर्ता पते प्राप्त करने के लिए अपना वर्तमान mDNS डिज़ाइन रख सकते हैं, या इसके बजाय getaddrinfo() का उपयोग कर सकते हैं। इस सुविधा का व्यवहार mDNS मल्टीकास्ट पते पर भेजी जाने वाली नियमित DNS क्वेरी की तरह है। इस सुविधा का सिस्टम स्वास्थ्य पर कोई प्रभाव नहीं पड़ता है.

उपयोगकर्ता कमांड adb shell ping6 HOSTNAME .local उपयोग कर सकते हैं, जहां HOSTNAME LAN पर लक्ष्य डिवाइस का होस्टनाम है, उदाहरण के लिए, adb shell ping6 ipad.local

वीपीएन और मोबाइल डेटा कनेक्शन को .स्थानीय रिज़ॉल्यूशन से बाहर रखा गया है।