কম্পিউটার

পাইথনে আইপি ঠিকানা যাচাই করুন


ধরুন আমাদের একটি স্ট্রিং আছে; প্রদত্ত ইনপুটটি একটি বৈধ IPv4 ঠিকানা বা IPv6 ঠিকানা বা কোনটিই আমাদের পরীক্ষা করতে হবে৷

IPv4 ঠিকানাগুলি ডটেড-ডেসিমেল নোটেশনে ক্যানোনিলিভাবে উপস্থাপিত হয়, যেটিতে চারটি দশমিক সংখ্যা থাকে, প্রতিটি 0 থেকে 255 পর্যন্ত থাকে, বিন্দু ("।"), উদাহরণস্বরূপ, 192.168.254.1; এছাড়াও, IPv4 ঠিকানায় অগ্রণী শূন্যগুলি অবৈধ৷ উদাহরণস্বরূপ, 192.168.254.01 ঠিকানাটি অবৈধ৷

IPv6 ঠিকানাগুলিকে চারটি হেক্সাডেসিমেল সংখ্যার আটটি গ্রুপ হিসাবে উপস্থাপন করা হয়, প্রতিটি গ্রুপ 16 বিট প্রতিনিধিত্ব করে। গোষ্ঠীগুলি কোলন (":") দ্বারা বিভক্ত। উদাহরণস্বরূপ, ধরুন ঠিকানাটি 2001:0db8:85a3:0000:0000:8a2e:0370:7334 একটি বৈধ ঠিকানা। এছাড়াও, আমরা চারটি হেক্সাডেসিমেল সংখ্যার মধ্যে কিছু অগ্রণী শূন্য এবং বড় হাতের ঠিকানায় কিছু লো-কেস অক্ষর বাদ দিতে পারি, তাই 2001:db8:85a3:0:0:8A2E:0370:7334 এই ঠিকানাটিও বৈধ

যাইহোক, আমরা সরলতা অনুসরণ করার জন্য পরপর দুটি কোলন (::) ব্যবহার করে একটি শূন্য মানের একটি ধারাবাহিক গ্রুপকে একটি খালি গ্রুপ দিয়ে প্রতিস্থাপন করি না। সুতরাং উদাহরণস্বরূপ, 2001:0db8:85a3::8A2E:0370:7334 একটি অবৈধ IPv6 ঠিকানা। এছাড়াও, IPv6-এ অতিরিক্ত অগ্রণী শূন্যগুলিও অবৈধ। ঠিকানা 02001:0db8:85a3:0000:0000:8a2e:0370:7334 অবৈধ।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি পদ্ধতি সংজ্ঞায়িত করুন checkv4(x), এটি পরীক্ষা করবে x 0 থেকে 255 রেঞ্জের মধ্যে আছে কিনা, তারপর সত্য, অন্যথায় মিথ্যা

  • একটি পদ্ধতি সংজ্ঞায়িত করুন checkv6(x), এটি নিম্নরূপ কাজ করবে -

    • যদি x> 4 এর আকার হয়, তাহলে মিথ্যা ফেরত দিন

    • যদি x>=0 এবং x[0]-এর সমতুল্য দশমিক '-' না হয়, তাহলে সত্য ফেরত দিন, অন্যথায় মিথ্যা

  • মূল পদ্ধতি থেকে

  • যদি ইনপুটে তিনটি বিন্দু থাকে এবং প্রতিটি অংশের জন্য I checkv4(i) সত্য হয়, তাহলে “IPv4”

  • যদি ইনপুটটিতে সাতটি কোলন থাকে এবং প্রতিটি অংশের জন্য I checkv6(i) সত্য হয়, তাহলে “IPv6”

উদাহরণ (পাইথন)

আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -

class Solution(object):
   def validIPAddress(self, IP):
      """
      :type IP: str
      :rtype: str
      """
      def isIPv4(s):
         try: return str(int(s)) == s and 0 <= int(s) <= 255
         except: return False
      def isIPv6(s):
         if len(s) > 4:
            return False
         try : return int(s, 16) >= 0 and s[0] != '-'
         except:
            return False
      if IP.count(".") == 3 and all(isIPv4(i) for i in IP.split(".")):
         return "IPv4"
      if IP.count(":") == 7 and all(isIPv6(i) for i in IP.split(":")):
         return "IPv6"
      return "Neither"
ob = Solution()
print(ob.validIPAddress("172.16.254.1"))

ইনপুট

"172.16.254.1"

আউটপুট

"IPv4"

  1. পাইথনে রিটার্ন স্টেটমেন্ট

  2. পাইথনে একটি ফাংশন সংজ্ঞায়িত করা

  3. পাইথনে একটি আইপি ঠিকানা ডিফ্যাং করা

  4. পাইথনে একাধিক মান ফেরত দিচ্ছেন?