Cara Cek IP dalam Subnet dengan Python

Cara paling andal dan direkomendasikan untuk memeriksa apakah sebuah alamat IP berada di dalam suatu subnet (CIDR) menggunakan Python adalah dengan memanfaatkan modul bawaan standar ipaddress. Modul ini tersedia secara native sejak Python 3.3, sehingga tidak memerlukan instalasi pustaka tambahan eksternal untuk skenario standar jaringan.

Pemeriksaan atau pengecekan kepemilikan IP di dalam rentang jaringan subnet sangat penting dalam bidang administrasi sistem, keamanan siber, pemfilteran akses firewall, serta manajemen infrastruktur cloud.

Metode 1: Menggunakan Modul Bawaan ipaddress (Rekomendasi Utama)

Modul ipaddress menyediakan objek kelas ip_network dan ip_address. Anda cukup menggunakan operator keanggotaan in untuk menguji apakah suatu alamat IP tercakup di dalam objek jaringan subnet tersebut.

import ipaddress

# Mendefinisikan subnet dalam format CIDR
subnet = ipaddress.ip_network('192.168.1.0/24')

# Alamat IP yang ingin dicek
ip_target_1 = ipaddress.ip_address('192.168.1.50')
ip_target_2 = ipaddress.ip_address('10.0.0.5')

# Pengecekan menggunakan operator 'in'
print(ip_target_1 in subnet)  # Output: True
print(ip_target_2 in subnet)  # Output: False

Jika input variabel berupa string biasa (bukan objek IP yang telah di-parsing), Anda dapat membandingkannya langsung dengan melakukan parsing otomatis atau menggunakan penanganan pengecualian (exception handling) untuk mencegah error format string yang tidak valid.

import ipaddress

def is_ip_in_subnet(ip_str, subnet_str):
    try:
        net = ipaddress.ip_network(subnet_str, strict=False)
        ip = ipaddress.ip_address(ip_str)
        return ip in net
    except ValueError as e:
        print(f"Format IP atau Subnet tidak valid: {e}")
        return False

# Contoh Penggunaan
print(is_ip_in_subnet('192.168.1.100', '192.168.1.0/24')) # True
print(is_ip_in_subnet('172.16.5.5', '172.16.0.0/16'))     # True
print(is_ip_in_subnet('8.8.8.8', '192.168.1.0/24'))         # False

Metode 2: Menggunakan Pustaka Eksternal netaddr

Untuk kebutuhan pemrosesan jaringan tingkat lanjut yang melibatkan manipulasi rentang IP yang kompleks atau performa tinggi pada data berukuran masif, pustaka pihak ketiga netaddr sering diandalkan oleh para network engineer.

Instalasi pustaka dilakukan melalui terminal:

pip install netaddr

Contoh implementasi kodenya:

from netaddr import IPAddress, IPNetwork

# Cek apakah IP berada di dalam network
if IPAddress('192.168.1.45') in IPNetwork('192.168.1.0/24'):
    print("IP berada di dalam subnet")
else:
    print("IP diluar subnet")

Tabel Perbandingan Metode Pengecekan IP Subnet

Pustaka (Library) Tipe Modul Instalasi Tambahan Kelebihan Utama
ipaddress Built-in (Bawaan Python) Tidak Perlu (Ready-to-use) Standar resmi Python, ringan, aman untuk mayoritas kasus.
netaddr Pihak Ketiga (Third-party) pip install netaddr Sangat cepat untuk operasi set besar dan manipulasi MAC/IP kompleks.

Troubleshooting Lapangan

Kesalahan paling sering terjadi saat melakukan pengecekan subnet di Python adalah:

  • ValueError: Terjadi jika string alamat IP menyertakan spasi tersembunyi atau format subnet CIDR salah (misal menuliskan 192.168.1.1/24 pada fungsi ip_network tanpa parameter strict=False padahal bit host aktif). Gunakan argumen strict=False untuk mengabaikan bit host yang tidak nol pada definisi network.
  • Tipe Data String vs Objek: Pastikan membandingkan objek dengan tipe yang kompatibel atau gunakan fungsi parsing kelas ip_address() terlebih dahulu.