Программа Python для поиска типа IP-адреса с помощью Regex

Опубликовано: 30 Ноября, 2021

Предварительное условие: Python Regex

Учитывая IP-адрес в качестве входных данных, напишите программу Python, чтобы определить тип IP-адреса, то есть IPv4 или IPv6 . Если ни один из них не задан, выведите ни один из них.

Что такое IP-адрес (Интернет-протокол)?

Каждый компьютер, подключенный к Интернету, идентифицируется уникальной строкой из четырех частей, известной как его IP-адрес. IPv4 и IPv6 - это Интернет-протокол версии 4 и Интернет-протокола версии 6, IP-версия 6 - это новая версия Интернет-протокола, которая намного лучше IP версии 4 с точки зрения сложности и эффективности.

  • IPv4 был основной версией, введенной в действие для производства в рамках ARPANET в 1983 году. Адреса IP версии 4 представляют собой 32-битные целые числа, которые будут выражены в шестнадцатеричной системе счисления.
  • Протокол IPv6 был разработан Инженерной группой Интернета (IETF) для решения проблемы исчерпания IP v4. IP v6 - это 128-битный адрес с адресным пространством 2 128 , что намного больше, чем IPv4. В IPv6 мы используем представление Colon-Hexa. Есть 8 групп, каждая из которых представляет 2 байта.

Примеры:

 Ввод: 192.0.2.126
Выход: IPv4

Ввод: 3001: 0da8: 75a3: 0000: 0000: 8a2e: 0370: 7334
Выход: IPv6

Ввод: 36.12.08.20.52
Выход: Ни то, ни другое

Подход:

  • В качестве входных данных возьмите IP-адрес.
  • Теперь проверьте, похож ли этот IP-адрес на адреса типа IPv4, используя регулярное выражение.
  • Если да, то выведите «IPv4», иначе проверьте, похож ли этот IP-адрес на адреса типа IPv6, используя регулярное выражение.
  • Если да, то выведите «IPv6».
  • Если адрес не похож ни на один из вышеперечисленных типов, мы напечатаем «Ни то, ни другое».

Ниже представлена реализация описанного выше подхода:

Python3

# Python program to find the type of Ip address
  
# re module provides support 
# for regular expressions
import re
  
# Make a regular expression 
# for validating an Ipv4
ipv4 = """^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?).( 
            25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?).( 
            25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?).( 
            25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$"""
  
# Make a regular expression 
# for validating an Ipv6
ipv6 = """(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|
        ([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:)
        {1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1
        ,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}
        :){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{
        1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA
        -F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a
        -fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0
        -9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,
        4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}
        :){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9
        ]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0
        -9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]
        |1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]
        |1{0,1}[0-9]){0,1}[0-9]))"""
  
# Define a function for finding 
# the type of Ip addess 
def find(Ip):  
    
    # pass the regular expression 
    # and the string in search() method
    if re.search(ipv4, Ip):
        print("IPv4")
    elif re.search(ipv6, Ip):
        print("IPv6")
    else:
        print("Neither")
  
# Driver Code  
if __name__ == "__main__" :  
        
    # Enter the Ip address 
    Ip = "192.0.2.126"
        
    # calling run function  
    find(Ip) 
    
    Ip = "3001:0da8:75a3:0000:0000:8a2e:0370:7334"
    find(Ip) 
    
    Ip = "36.12.08.20.52"
    find(Ip)

Выход:

 IPv4
IPv6
Ни один

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.