DNS সমাধানকারী মডিউল DNS ইন্টারসেপশন এবং কনফিগারেশন আপডেট আক্রমণ এবং DNS রেজোলিউশনের জন্য উন্নত নেটওয়ার্ক কর্মক্ষমতার জন্য ব্যবহারকারীর সুরক্ষা প্রদান করে। মডিউলটিতে এমন কোড রয়েছে যা DNS স্টাব সমাধানকারীকে প্রয়োগ করে, যা www.google.com- এর মতো নামগুলিকে IP ঠিকানায় অনুবাদ করে যেমন 2001:db8::1 । DNS স্টাব রেজোলিভার জাভা API উপাদানগুলিকে সমর্থন করে যেমন InetAddress#getAllByName এবং Network#getAllByName , সেইসাথে নেটিভ নেটওয়ার্কিং ফাংশনগুলি , এবং DNS কোয়েরি পাঠানো ও গ্রহণ করা এবং ফলাফল ক্যাশে করা।
Android 10 এ পরিবর্তন
অ্যান্ড্রয়েড 9 এবং তার নিচের সংস্করণে চলমান ডিভাইসগুলিতে, ডিএনএস সমাধানকারী কোডটি Bionic এবং netd
জুড়ে ছড়িয়ে রয়েছে। ডিএনএস লুকআপগুলিকে netd
ডিমনে কেন্দ্রীভূত করা হয় যাতে সিস্টেম-ওয়াইড ক্যাশে করার অনুমতি দেওয়া হয়, যখন অ্যাপগুলি বায়োনিক-এ ফাংশনগুলি (যেমন getaddrinfo
) কল করে। ক্যোয়ারীটি একটি UNIX সকেটের মাধ্যমে /dev/socket/dnsproxyd
এ netd
ডেমনে পাঠানো হয়, যা অনুরোধটি পার্স করে এবং DNS লুকআপ ইস্যু করার জন্য আবার getaddrinfo
কল করে, তারপর ফলাফলগুলি ক্যাশে করে যাতে অন্যান্য অ্যাপগুলি সেগুলি ব্যবহার করতে পারে। DNS সমাধানকারী বাস্তবায়ন বেশিরভাগই bionic/libc/dns/
এবং আংশিকভাবে system/netd/server/dns
এ ছিল।
অ্যান্ড্রয়েড 10 ডিএনএস রিসোভার কোডটিকে 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
(বায়োনিক) এর উপর নির্ভর করে এবং স্থিতিশীলভাবে এর নির্ভরতাকে সংযুক্ত করে; অন্য কোন লাইব্রেরি প্রয়োজন নেই।
mDNS .স্থানীয় রেজোলিউশন
নভেম্বর 2021 থেকে, অ্যান্ড্রয়েড সমাধানকারী mDNS .local রেজোলিউশন সমর্থন করে, যা RFC 6762-এ "5.1 ওয়ান-শট মাল্টিকাস্ট ডিএনএস কোয়েরি" প্রয়োগ করে 224.0.0.251:5353 বা [FF02::FB]:5353-এ অন্ধভাবে স্ট্যান্ডার্ড DNS কোয়েরি পাঠাতে। mDNS রেজোলিউশন স্বচ্ছভাবে getaddrinfo()
কে কল করে সমর্থিত একটি হোস্টনাম যার শেষ *.local
।
mDNS .local রেজোলিউশন ঠিকানা পেতে getaddrinfo()
এর বিদ্যমান কার্যকারিতা বৃদ্ধি করে। যদি একটি ডিভাইস mDNS .local রেজোলিউশন সমর্থন করে, তাহলে getaddrinfo()
API 224.0.0.251:5353 বা [FF02::FB]:5353 এ mDNS প্রশ্ন পাঠায় এবং স্থানীয় ঠিকানাগুলি ফেরত দেয়। যদি কোনো ডিভাইস mDNS .local রেজোলিউশন সমর্থন না করে, তাহলে getaddrinfo()
API পদ্ধতি DNS সার্ভারে একটি DNS ক্যোয়ারী পাঠায়।
কোডটি AOSP-এ রয়েছে, packages/modules/DnsResolver
এ অবস্থিত। ব্যবহারকারীরা ঠিকানা পেতে তাদের বর্তমান mDNS ডিজাইন রাখতে পারেন, অথবা পরিবর্তে getaddrinfo()
ব্যবহার করতে পারেন। এই বৈশিষ্ট্যের আচরণ mDNS মাল্টিকাস্ট ঠিকানায় পাঠানো একটি নিয়মিত DNS প্রশ্নের মতো। এই বৈশিষ্ট্যটি সিস্টেমের স্বাস্থ্যের উপর কোন প্রভাব ফেলে না।
ব্যবহারকারীরা adb shell ping6 HOSTNAME .local
কমান্ড ব্যবহার করতে পারেন, যেখানে HOSTNAME হল LAN-এ একটি লক্ষ্য ডিভাইসের হোস্টনাম, উদাহরণস্বরূপ, adb shell ping6 ipad.local
।
VPN এবং মোবাইল ডেটা সংযোগগুলি .local রেজোলিউশন থেকে বাদ দেওয়া হয়েছে৷