SiberdincSiberdinc Siber Güvenlik, Ağ Güvenliği, Cyber Security

Python’da IP Adresi Nasıl Doğrulanır?

IP Adreslerinin sisteme eklenmeden önce doğrulanması gerekir, doğru olmayan bir değer sistem üzerinde istenmeyen sonuçlara neden olabilir.

IP adreslerini bir kaç yöntem ile doğrulayabiliriz. İstediğiniz yöntemi kullanabilirsiniz.

import re


def is_valid_ipv4(ip):
    """Validates IPv4 addresses.
    """
    pattern = re.compile(r"""
        ^
        (?:
          # Dotted variants:
          (?:
            # Decimal 1-255 (no leading 0's)
            [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}
          |
            0x0*[0-9a-f]{1,2}  # Hexadecimal 0x0 - 0xFF (possible leading 0's)
          |
            0+[1-3]?[0-7]{0,2} # Octal 0 - 0377 (possible leading 0's)
          )
          (?:                  # Repeat 0-3 times, separated by a dot
            \.
            (?:
              [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2}
            |
              0x0*[0-9a-f]{1,2}
            |
              0+[1-3]?[0-7]{0,2}
            )
          ){0,3}
        |
          0x0*[0-9a-f]{1,8}    # Hexadecimal notation, 0x0 - 0xffffffff
        |
          0+[0-3]?[0-7]{0,10}  # Octal notation, 0 - 037777777777
        |
          # Decimal notation, 1-4294967295:
          429496729[0-5]|42949672[0-8]\d|4294967[01]\d\d|429496[0-6]\d{3}|
          42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}|
          4[01]\d{8}|[1-3]\d{0,9}|[4-9]\d{0,8}
        )
        $
    """, re.VERBOSE | re.IGNORECASE)
    return pattern.match(ip) is not None


def is_valid_ipv6(ip):
    """Validates IPv6 addresses.
    """
    pattern = re.compile(r"""
        ^
        \s*                         # Leading whitespace
        (?!.*::.*::)                # Only a single whildcard allowed
        (?:(?!:)|:(?=:))            # Colon iff it would be part of a wildcard
        (?:                         # Repeat 6 times:
            [0-9a-f]{0,4}           #   A group of at most four hexadecimal digits
            (?:(?<=::)|(?<!::):)    #   Colon unless preceeded by wildcard
        ){6}                        #
        (?:                         # Either
            [0-9a-f]{0,4}           #   Another group
            (?:(?<=::)|(?<!::):)    #   Colon unless preceeded by wildcard
            [0-9a-f]{0,4}           #   Last group
            (?: (?<=::)             #   Colon iff preceeded by exacly one colon
             |  (?<!:)              #
             |  (?<=:) (?<!::) :    #
             )                      # OR
         |                          #   A v4 address with NO leading zeros 
            (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d)
            (?: \.
                (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d)
            ){3}
        )
        \s*                         # Trailing whitespace
        $
    """, re.VERBOSE | re.IGNORECASE | re.DOTALL)
    return pattern.match(ip) is not Non

Python içerisinde gelen ipaddress kütüphanesinden faydalanmak

import ipaddress


def is_ip(ip):
    try:
        ipaddress.ip_address(ip)
    except Exception:
        return False
    return True


Socket kütüphanesinden faydalanmak

import socket


def is_ip(ip):
    try:
        socket.inet_aton(ip)
    except Exception:
        return False
    return True


Kaynak: mertcangokgoz.com

Erdinç Tandoğan

Merhaba. Ben Erdinç Tandoğan. Siber Güvenlik Yüksek Lisans mezunuyum. Blog sitemde hem kendimi geliştirmek hemde Türkçe kaynakların çoğalması adına paylaşımlar yapmaktayım. Linkedin profilimden tarafıma ulaşabilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

@Siberdinc on Instagram
Bu hata mesajını yalnızca WordPress yöneticileri görebilir

Hata: 1 kimliğine sahip hiçbir akış bulunamadı.

Bir akış oluşturmak için lütfen Instagram Akışı ayarlar sayfasına gidin.

Kapatmak için ESC tuşuna basın