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/24pada fungsiip_networktanpa parameterstrict=Falsepadahal bit host aktif). Gunakan argumenstrict=Falseuntuk 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.