IP Adresi (İnternet Protokolü), bir ağda adres atama kabiliyeti sağlayan temel bir ağ kavramıdır. Ağa bağlı cihazlar arasında paket alışverişi yapmak için kullandıkları adrestir. Python ipadress modülü, IP adresini IPV4 ve IPV6 tipine göre doğrulamak ve kategorilere ayırmak için yaygın olarak kullanılmaktadır.

Python IP Adres İşlemleri - Öğren-Doğrula-Değiştir

IP Adresi (İnternet Protokolü), bir ağda adres atama kabiliyeti sağlayan temel bir ağ kavramıdır. Ağa bağlı cihazlar arasında paket alışverişi yapmak için kullandıkları adrestir. Python ipadress modülü, IP adresini IPV4 ve IPV6 tipine göre doğrulamak ve kategorilere ayırmak için yaygın olarak kullanılmaktadır.

İp  adresi doğrulama ve kategorilere ayırma dışında python ile İnternet Protokolü (IP) adresi sınıfını kullanarak ip adresimizi manipüle edebiliriz. ipadress modülü python kurulumu ile gömülü olarak gelen bir kütüphanedir. 

ipadress modülü, IPv4 ve IPv6 protokolleri üzerinde düzenleme ve çalıştırma yeteneğini sağlar. Ipadress modülündeki işlevler ve sınıflar, IP adresleriyle ilgili çeşitli cihazların aynı alt ağda olup olmadığının kontrol edilmesi de dahil olmak üzere basit işleri kolaylaştırır.

Kütüphanemizi projemize dahil ederek başlayabiliriz. İlk kullandığımız method ip_address methodudur. ip_adress metodu parametre olarak ip değerini almaktadır. Argüman olarak iletilen IP adresine bağlı olarak bir IPv4Adresi veya IPv6Adresi nesnesi döndürür. 232 den küçük tam sayıları sonuç olarak döndürüyorsa IPv4 olduğu kabul edilir. ipv4 adresi 32 bitlik kodlama yapısına sahiptir. Günümüzde 32 bitlik ip adresleri yetersiz kalmaktadır.  IPv6 ile yaklaşık olarak 2128 adet IP adresi üretilmiştir. İp adresleri 232  den büyük ise ipV6 olduğu kabul edilir. İpv6 kodlama yapısı ipv4 göre biraz daha karmaşıktır.

IPv6 adresleri aşağıdaki gibidir.

1999:6:13:0:0:1962:2:15 → kısaltmalı → 1999:6:13::1962:2:15

0:0:0:0:0:0:0:1 → kısaltmalı → ::1

0:0:0:0:0:0:0:0 → kısaltmalı → ::

IPv6 teknolojisinde adresler sekiz oktetten oluşup onaltılık tabanda gösterilmektedir. Aşağıdaki örnekte ipv4 ve ipv6 yapısı gösterilmiştir.

# -*- coding: utf-8 -*-
"""
Created on Sat Mar 23 09:02:23 2019

@author: Ertuğrul
"""
#Python 3.7
import ipaddress

print(ipaddress.ip_address('192.168.0.10'))  
#OUTPUT: IPv4Address 192:168.0.10 şeklinde sonuç döndürür. 

print(ipaddress.ip_address('2001:db8::'))

#OUTPUT: IPv6Address 2001:db8:: şeklinde sonuç döndürür. 

 

Aşağıdaki kodu çalıştırdığınızda ipv6 kodlama yapısına aykırı olduğu için kinci ip adresi hata verecektir.

import ipaddress

print (ipaddress.ip_address(u'FFFF:9999:2:FDE:257:0:2FAE:112D'))
#Output:  ffff:9999:2:fde:257:0:2fae:112d

#invalid IPV6 address
print (ipaddress.ip_address(u'FFFF:10000:2:FDE:257:0:2FAE:112D'))
# Output ValueError: 'FFFF:10000:2:FDE:257:0:2FAE:112D' does not appear to be an IPv4 or IPv6 address

İp üzerinde ters isim kaydı yapılıp yapılmadığı reverse_pointer kullanılarak kontrol edilebilir.

import ipaddress

print (ipaddress.ip_address(u'192.168.0.255').reverse_pointer)

print (ipaddress.ip_network(u'192.168.0.0/28'))

#Output: 255.0.168.192.in-addr.arpa
#        192.168.0.0/28

İp adresleri karşılaştırma işlemleri koşul parametreleri ile gerçekleştirilebilmektedir.


print (ipaddress.IPv4Address(u'192.168.0.10') > ipaddress.IPv4Address(u'192.168.0.1'))  #Output: True
print (ipaddress.IPv4Address(u'192.168.0.10') == ipaddress.IPv4Address(u'192.168.0.1')) #Output: False
print (ipaddress.IPv4Address(u'192.168.0.10') != ipaddress.IPv4Address(u'192.168.0.1')) #Output: True

İp adresinin alt ağ maskesini (Subnet Mask), yayın adresini (Brodcast adress) gibi bir çok özelliğini bulabiliriz. Aşağıdaki kodda ipv6 ve ipv4 için örnekle gösterilmiştir.

for n in NETWORKS:
    net = ipaddress.ip_network(n)
    print('{!r}'.format(net))
    print('     is private:', net.is_private)
    print('      broadcast:', net.broadcast_address)
    print('     compressed:', net.compressed)
    print('   with netmask:', net.with_netmask)
    print('  with hostmask:', net.with_hostmask)
    print('  num addresses:', net.num_addresses)
    print()

#Output:
"""IPv4Network('10.9.0.0/24')
     is private: True
      broadcast: 10.9.0.255
     compressed: 10.9.0.0/24
   with netmask: 10.9.0.0/255.255.255.0
  with hostmask: 10.9.0.0/0.0.0.255
  num addresses: 256

IPv6Network('fdfd:87b5:b475:5e3e::/64')
     is private: True
      broadcast: fdfd:87b5:b475:5e3e:ffff:ffff:ffff:ffff
     compressed: fdfd:87b5:b475:5e3e::/64
   with netmask: fdfd:87b5:b475:5e3e::/ffff:ffff:ffff:ffff::
  with hostmask: fdfd:87b5:b475:5e3e::/::ffff:ffff:ffff:ffff
  num addresses: 18446744073709551616 """

 

İp adreslerini versiyonu, pravite mı olup olmadığını geçerli bir ip ' ye sahip olup olmadığı ile ilgili bir kaç örnek ile gösterelim;

import binascii
import ipaddress


ADDRESSES = [
    '10.2.10.6',
    'fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa',
]

for ip in ADDRESSES:
    addr = ipaddress.ip_address(ip)
    print('{!r}'.format(addr))
    print('   IP version:', addr.version)
    print('   is private:', addr.is_private)
    print('  packed form:', binascii.hexlify(addr.packed))
    print('      integer:', int(addr))
    print()

#Output
    
"""
IPv4Address('10.2.10.6')
   IP version: 4
   is private: True
  packed form: b'0a020a06'
      integer: 167905798

IPv6Address('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa')
   IP version: 6
   is private: True
  packed form: b'fdfd87b5b4755e3eb1bce121a8eb14aa'
      integer: 337611086560236126439725644408160982186
"""
import ipaddress


NETWORKS = [
    ipaddress.ip_network('10.9.0.0/24'),
    ipaddress.ip_network('fdfd:87b5:b475:5e3e::/64'),
]

ADDRESSES = [
    ipaddress.ip_address('10.9.0.6'),
    ipaddress.ip_address('10.7.0.31'),
    ipaddress.ip_address(
        'fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa'
    ),
    ipaddress.ip_address('fe80::3840:c439:b25e:63b0'),
]


for ip in ADDRESSES:
    for net in NETWORKS:
        if ip in net:
            print('{}\nis on {}'.format(ip, net))
            break
    else:
        print('{}\nis not on a known network'.format(ip))
    print()

#Output:
"""
10.9.0.6
is on 10.9.0.0/24

10.7.0.31
is not on a known network

fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa
is on fdfd:87b5:b475:5e3e::/64

fe80::3840:c439:b25e:63b0
is not on a known network

"""

 

Python ile ip adresi ve network konusuna örnekler ile değinmeye çalıştık. İp adress kütüphanesi ile birçok işlem gerçekleştirilebilir. Bu konuda daha detaylı bir bilgiye erişmek için resmi dökümandan yararlanabilirsiniz.

Bu Gönderiyi Paylaş

İçerik Hakkında Yorum Yapın

www.000webhost.com