ইন্টারনেট প্রোটোকল বর্তমানে ভার্সন ৪ থেকে ভার্সন ৬-এ স্থানান্তরিত হচ্ছে। এটি আবশ্যক কারণ ভার্সন ৪ ইন্টারনেটের সাথে সরাসরি কানেকশন সম্পন্ন যত بصورة বৃদ্ধি পাচ্ছে তত গুলো ঠিকানা হ্যান্ডেল করার জন্য পর্যাপ্ত ঠিকানা প্রদান করে না।
একটি IPv4 ঠিকানা ৩২ বিট আকারের, চারটি আট বিটের গ্রুপে রিপ্রেজেন্ট করা হয় যাকে "octets" বলা হয়। এটি একটি "dotted decimal" ফরম্যাট যেখানে প্রতিটি আট-বিট octet-এ ০ থেকে ২৫৫ পর্যন্ত ডেসিম্যাল ভ্যালু থাকতে পারে।
উদাহরণ: 192.168.1.1
CIDR নোটেশনসহ IPv4 ঠিকানা: 192.168.1.1/24 যেখানে ২৪ মানে প্রথম তিনটি octet নেটওয়ার্ক আইডেন্টিফাই করে এবং শেষ octet নোড আইডেন্টিফাই করে।
একটি IPv6 ঠিকানা ১২৮ বিট লং। এটি হেক্সাডেসিমেল নোটেশন ব্যবহার করে। IPv6 ঠিকানার প্রতিটি পজিশন চার বিট রিপ্রেজেন্ট করে যার মান ০ থেকে f। ১২৮ বিট ৮টি গ্রুপে ভাগ করা হয়ে থাকে যেখানে প্রতিটি গ্রুপ ১৬ বিট এবং কোলন দিয়ে সেপারেট করা থাকে।
উদাহরণ: 2001:db8:abcd:100::1/64
সকল IPv6 ঠিকানা CIDR নোটেশন ব্যবহার করে নির্ণয় করে যে কতগুলো লিডিং বিট নেটওয়ার্ক আইডেন্টিফিকেশনের জন্য ব্যবহৃত হবে এবং বাকি হোস্ট/ইন্টারফেস আইডেন্টিফিকেশনের জন্য।
পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে ipaddress মডিউল রয়েছে যা IPv4 এবং IPv6 ঠিকানা এবং নেটওয়ার্ক তৈরি, ম্যানিপুলেট এবং অপারেট করার ক্ষমতা প্রদান করে।
মডিউলটি নিচের ফ্যাক্টরি ফাংশনগুলো প্রদান করে IP ঠিকানা, নেটওয়ার্ক এবং ইন্টারফেস সুবিধাজনকভাবে তৈরি করার জন্য:
ip_address()
আর্গুমেন্ট হিসেবে পাস করা IP ঠিকানার ওপর নির্ভর করে IPv4Address বা IPv6Address অবজেক্ট রিটার্ন করে। IPv4 বা IPv6 উভয় ঠিকানাই সরবরাহ করা যেতে পারে।
>>> import ipaddress
>>> ipaddress.ip_address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.ip_address('2001:ab7::')
IPv6Address('2001:ab7::')
ip_network()
আর্গুমেন্ট হিসেবে পাস করা IP ঠিকানার ওপর নির্ভর করে IPv4Network বা IPv6Network অবজেক্ট রিটার্ন করে।
>>> ipaddress.ip_network('192.168.100.0/24')
IPv4Network('192.168.100.0/24')
>>> ipaddress.ip_network('2001:db8:abcd:100::/64')
IPv6Network('2001:db8:abcd:100::/64')
ip_interface()
আর্গুমেন্ট হিসেবে পাস করা IP ঠিকানার ওপর নির্ভর করে IPv4Interface বা IPv6Interface অবজেক্ট রিটার্ন করে।
>>> ipaddress.ip_interface('192.168.100.10/24')
IPv4Interface('192.168.100.10/24')
>>> ipaddress.ip_interface('2001:db8:abcd:100::1/64')
IPv6Interface('2001:db8:abcd:100::1/64')
ipaddress মডিউল নিচের ক্লাসগুলো ডিফাইন করে:
IPv4Address(address)
এই কনস্ট্রাক্টর একটি IPv4 ঠিকানা অবজেক্ট রিটার্ন করে।
বৈধ IPv4 ঠিকানা নিচের মাধ্যমে আইডেন্টিফাই করা হয়:
ডেসিমেল-ডট নোটেশন একটি স্ট্রিং, যাতে চারটি ডেসিমেল ইন্টিজার রয়েছে ০-২৫৫ ইনক্লूसিভ রেঞ্জে, ডট দিয়ে সেপারেটেড (যেমন 192.168.0.1)।
একটি ইন্টিজার যার বাইনারি সমতুল্য ৩২ বিট।
একটি ইন্টিজার যা ৪ দৈর্ঘ্যের বাইটস অবজেক্টে প্যাক করা হয়েছে (most significant octet first)।
>>> ipaddress.IPv4Address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.IPv4Address(3162581505)
IPv4Address('188.129.42.1')
>>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
IPv4Address('192.168.0.1')
IPv6Address()
একটি IPv6 ঠিকানা কনস্ট্রাক্ট করুন।
বৈধ IPv6 ঠিকানা নিচের মতো গঠিত:
আটটি গ্রুপে চারটি হেক্সাডেসিমেল ডিজিট থাকা একটি স্ট্রিং, প্রতিটি গ্রুপ ১৬ বিট রিপ্রেজেন্ট করে। গ্রুপগুলো কোলন দিয়ে সেপারেটেড।
১২৮ বিটে ফিট হওয়া একটি ইন্টিজার।
১৬ দৈর্ঘ্যের বাইটস অবজেক্টে প্যাক করা একটি ইন্টিজার, বিগ-এন্ডিয়ান।
>>> ipaddress.IPv6Address('2001:db8::1000')
IPv6Address('2001:db8::1000')
>>> ipaddress.IPv6Address("::abc:7:def")
IPv6Address('::abc:7:def')
Version
উপযুক্ত ভার্সন নম্বর রিটার্ন করে।
>>> add = ipaddress.IPv4Address('192.168.0.1')
>>> add.version
4
>>> ip = ipaddress.IPv6Address('2001:db8::1000')
>>> ip.version
6