Fondasi · Fase 1
Dasar Python untuk Keamanan Siber: Variabel, Kondisi, Loop, Fungsi, Modul, dan File
Belajar dasar Python lewat satu proyek nyata: menganalisis log login dan menghitung percobaan login gagal per alamat IP. Mencakup variabel dan tipe data, kondisi, loop, fungsi, modul bawaan yang berguna untuk keamanan, serta membaca dan menulis file.

Selamat datang di modul scripting! Sejauh ini kamu memakai alat buatan orang lain: perintah Linux, Wireshark, dan berbagai perintah jaringan. Sekarang kamu mulai membuat alat sendiri.
Bahasa yang kita pakai adalah Python. Python populer di dunia keamanan siber karena mudah dibaca, sudah terpasang di hampir semua Linux, dan punya banyak pustaka siap pakai. Analis SOC memakainya untuk mengolah log, pentester untuk mengotomatiskan pengujian, dan peneliti malware untuk membongkar file mencurigakan.
Supaya tidak sekadar menghafal sintaks, artikel ini memakai satu proyek kecil dari awal sampai akhir: membuat skrip yang membaca log login dan menghitung percobaan login gagal untuk setiap alamat IP. Setiap konsep yang dipelajari akan dipakai di proyek itu.
Menyiapkan Python
Di sebagian besar distro Linux, Python 3 sudah terpasang. Kalau belum, pasang dengan sudo apt install python3, seperti yang sudah kamu pelajari di artikel Package Manager di Linux. Pengguna Windows dan macOS bisa mengunduhnya dari python.org.
python3 --version # cek versi Python yang terpasang
python3 # masuk mode interaktif, keluar dengan exit()
python3 skrip.py # menjalankan file skrip
Tulis kode di editor teks apa saja, misalnya nano di terminal atau Visual Studio Code, lalu simpan dengan akhiran .py.
1. Variabel dan tipe data
Variabel adalah wadah bernama untuk menyimpan nilai. Kamu tidak perlu menyebutkan tipenya, karena Python mengenalinya sendiri dari nilainya.

nama = "budi"
port = 443
aktif = True
print(f"Pengguna {nama} terhubung ke port {port}")
# Pengguna budi terhubung ke port 443
Huruf f sebelum tanda kutip membuat f-string, cara termudah menyisipkan isi variabel ke dalam teks dengan tanda kurung kurawal.
Dua tipe data yang paling sering dipakai untuk mengolah data keamanan adalah list dan dictionary:
ports = [22, 80, 443]
print(ports[0]) # 22, indeks dimulai dari 0
ports.append(8080) # tambah isi
print(len(ports)) # 4
akun = {"budi": 3, "sari": 0}
print(akun["budi"]) # 3
akun["admin"] = 7 # tambah pasangan baru
List cocok untuk menyimpan sekumpulan data berurutan, seperti daftar port atau daftar alamat IP. Dictionary cocok untuk mencatat pasangan data, seperti nama akun dan jumlah login gagalnya.
2. Kondisi: if, elif, else
Kondisi membuat program bisa mengambil keputusan.

gagal = 4
if gagal >= 5:
print("BLOKIR")
elif gagal >= 3:
print("WASPADA")
else:
print("AMAN")
# WASPADA
| Operator | Arti | Contoh |
|---|---|---|
==, != | Sama dengan, tidak sama dengan | status == "GAGAL" |
>, <, >=, <= | Perbandingan angka | gagal >= 5 |
and, or, not | Menggabungkan kondisi | port == 22 and aktif |
in | Apakah ada di dalam | "admin" in akun |
3. Loop: mengulang tanpa capek
Bayangkan harus memeriksa 10.000 baris log satu per satu. Dengan loop, kamu cukup menulis langkahnya sekali, lalu Python mengulanginya untuk setiap data.
ports = [22, 80, 443, 8080]
for p in ports:
print("Memeriksa port", p)
akun = {"budi": 3, "sari": 0, "admin": 7}
for nama, gagal in akun.items():
if gagal >= 5:
print(nama, "perlu diblokir")
# admin perlu diblokir
Selain for, ada juga while yang mengulang selama sebuah kondisi masih benar. Untuk mengolah data seperti log dan daftar, for jauh lebih sering dipakai.
4. Fungsi: membungkus langkah agar bisa dipakai ulang
Fungsi adalah sekumpulan langkah yang diberi nama. Kamu mendefinisikannya sekali dengan def, lalu memanggilnya kapan saja.
def nama_layanan(port):
"""Mengembalikan nama layanan untuk port yang umum."""
daftar = {22: "SSH", 80: "HTTP", 443: "HTTPS"}
return daftar.get(port, "tidak dikenal")
print(nama_layanan(22)) # SSH
print(nama_layanan(3389)) # tidak dikenal
Teks di antara tiga tanda kutip di baris pertama fungsi disebut docstring, penjelasan singkat tentang apa yang dilakukan fungsi itu. Biasakan menulisnya, karena kode yang kamu tulis hari ini akan dibaca lagi oleh dirimu sendiri berbulan-bulan kemudian.
5. Modul: memakai alat yang sudah jadi
Python datang dengan ratusan modul bawaan (standard library) yang tinggal dipakai dengan import. Kamu sebenarnya sudah memakai salah satunya, ipaddress, di artikel Subnetting dan CIDR.
import ipaddress
import hashlib
print(ipaddress.ip_address("192.168.1.23").is_private) # True
print(hashlib.sha256(b"halo").hexdigest())
# a4e63bcacf6c172ad84f9f4523c8f1acaf33676fa76d3258c67b7e7bbf16d777
| Modul | Kegunaan |
|---|---|
os, pathlib | Mengelola file dan folder |
sys | Membaca argumen dari terminal, menghentikan program |
ipaddress | Mengolah alamat IP dan subnet |
hashlib | Menghitung hash seperti SHA-256, misalnya untuk mengecek keaslian file |
collections | Struktur data tambahan, seperti Counter untuk menghitung |
datetime | Mengolah tanggal dan waktu, misalnya cap waktu di log |
socket | Komunikasi jaringan, dasar pembuatan port scanner |
re | Mencari pola teks (regex), dibahas di materi berikutnya |
Selain modul bawaan, ada ribuan pustaka buatan komunitas yang dipasang dengan pip, seperti requests yang akan dibahas di materi setelahnya.
6. File I/O: membaca dan menulis file
Hampir semua pekerjaan keamanan berhubungan dengan file: log, daftar alamat IP, hasil pemindaian, atau laporan. File I/O (input/output) adalah cara Python membaca dan menulis file.
# membaca file baris demi baris
with open("login.log", "r", encoding="utf-8") as f:
for baris in f:
print(baris.strip())
# menulis file baru (isi lama akan tertimpa)
with open("catatan.txt", "w", encoding="utf-8") as f:
f.write("Pemeriksaan selesai\n")
# menambah di akhir file tanpa menghapus isinya
with open("catatan.txt", "a", encoding="utf-8") as f:
f.write("Baris tambahan\n")
| Mode | Arti | Kalau file belum ada |
|---|---|---|
"r" | Membaca (read) | Error FileNotFoundError |
"w" | Menulis (write), isi lama dihapus | Dibuat baru |
"a" | Menambah di akhir (append) | Dibuat baru |
Kata kunci with memastikan file otomatis ditutup setelah selesai dipakai, bahkan kalau terjadi error di tengah jalan. Biasakan selalu memakainya.
Proyek: menghitung login gagal per alamat IP
Sekarang kita gabungkan semuanya. Di artikel Navigasi Terminal Linux, kamu memakai grep untuk mencari login gagal. grep bisa menemukan barisnya, tapi tidak bisa langsung memberi tahu alamat IP mana yang paling banyak gagal dan perlu ditindak. Inilah saatnya Python bekerja.

Buat file bernama login.log berisi contoh log berikut. Formatnya sengaja dibuat sederhana: tanggal, jam, status, nama pengguna, dan alamat IP.
2026-11-05 08:01:12 GAGAL budi 203.0.113.7
2026-11-05 08:01:15 GAGAL budi 203.0.113.7
2026-11-05 08:02:40 BERHASIL sari 198.51.100.4
2026-11-05 08:03:01 GAGAL admin 203.0.113.7
2026-11-05 08:03:05 GAGAL admin 203.0.113.7
2026-11-05 08:03:09 GAGAL root 203.0.113.7
2026-11-05 08:05:22 GAGAL sari 198.51.100.4
2026-11-05 08:06:30 GAGAL budi 192.0.2.50
2026-11-05 08:06:35 GAGAL budi 192.0.2.50
2026-11-05 08:06:40 GAGAL budi 192.0.2.50
2026-11-05 08:07:02 BERHASIL budi 192.0.2.50
Lalu buat file cek_login.py di folder yang sama:
# cek_login.py - menghitung percobaan login gagal per alamat IP
import sys
from collections import Counter
from datetime import datetime
BATAS_BLOKIR = 5
BATAS_WASPADA = 3
def baca_log(nama_file):
"""Membaca file log dan mengembalikan daftar baris."""
try:
with open(nama_file, "r", encoding="utf-8") as f:
return f.read().splitlines()
except FileNotFoundError:
print(f"File {nama_file} tidak ditemukan.")
sys.exit(1)
def hitung_gagal(baris_log):
"""Menghitung jumlah login gagal untuk setiap alamat IP."""
hitungan = Counter()
for baris in baris_log:
bagian = baris.split()
if len(bagian) != 5:
continue # lewati baris yang formatnya tidak sesuai
status, ip = bagian[2], bagian[4]
if status == "GAGAL":
hitungan[ip] += 1
return hitungan
def status_ip(jumlah):
"""Menentukan status berdasarkan jumlah login gagal."""
if jumlah >= BATAS_BLOKIR:
return "BLOKIR"
elif jumlah >= BATAS_WASPADA:
return "WASPADA"
else:
return "AMAN"
def simpan_laporan(hitungan, nama_file):
"""Menulis laporan ke file teks."""
with open(nama_file, "w", encoding="utf-8") as f:
f.write(f"Laporan dibuat: {datetime.now():%Y-%m-%d %H:%M}\n")
for ip, jumlah in hitungan.most_common():
f.write(f"{ip:<15} {jumlah:>3} kali {status_ip(jumlah)}\n")
if __name__ == "__main__":
file_log = sys.argv[1] if len(sys.argv) > 1 else "login.log"
hasil = hitung_gagal(baca_log(file_log))
for ip, jumlah in hasil.most_common():
print(f"{ip:<15} {jumlah:>3} kali {status_ip(jumlah)}")
simpan_laporan(hasil, "laporan.txt")
print("Laporan disimpan ke laporan.txt")
Beberapa hal baru di skrip ini:
trydanexceptmenangkap error, sehingga kalau file tidak ditemukan, program menampilkan pesan yang jelas, bukan pesan error yang membingungkan.split()memecah satu baris menjadi beberapa bagian berdasarkan spasi. Bagian ke-2 adalah status dan bagian ke-4 adalah alamat IP, karena indeks dimulai dari 0.Counteradalah dictionary khusus untuk menghitung. Fungsimost_common()mengurutkan hasilnya dari yang terbanyak.sys.argvmembaca nama file dari terminal, sehingga skrip bisa dipakai untuk file log lain:python3 cek_login.py log-lain.log.if __name__ == "__main__":menandai bagian yang dijalankan saat skrip dipanggil langsung. Berkat ini, fungsi-fungsi di dalamnya bisa di-importdan dipakai ulang di skrip lain.
Kebiasaan aman saat menulis skrip
- Jangan menulis password atau kunci API langsung di dalam kode. Simpan di variabel lingkungan atau file konfigurasi terpisah yang tidak ikut dibagikan.
- Jangan percaya data dari luar begitu saja. Baris log, isian pengguna, atau data dari internet bisa berisi format yang tidak terduga. Itulah kenapa skrip di atas memeriksa jumlah bagian setiap baris sebelum memakainya.
- Jalankan skrip dengan hak seminimal mungkin. Jangan biasakan menjalankan skrip dengan
sudokalau tidak benar-benar perlu. - Baca dulu skrip buatan orang lain sebelum menjalankannya, terutama yang diunduh dari internet.
Kenapa ini penting untuk keamanan siber
Pekerjaan keamanan penuh dengan tugas berulang: membaca ribuan baris log, mengecek ratusan alamat IP, atau membandingkan hash banyak file. Mengerjakannya secara manual lambat dan rawan salah. Dengan Python, tugas yang memakan waktu berjam-jam bisa selesai dalam hitungan detik, dan hasilnya selalu konsisten. Banyak alat keamanan terkenal juga ditulis dengan Python, sehingga memahami dasarnya membantumu membaca, memodifikasi, dan memeriksa alat-alat itu.
Ringkasan
- Variabel menyimpan nilai dengan tipe seperti str, int, float, bool, list, dan dict.
if,elif, danelsemembuat program mengambil keputusan. Kondisi diperiksa dari atas ke bawah.formengulang langkah untuk setiap data, misalnya setiap baris log.- Fungsi (
def) membungkus langkah agar rapi dan bisa dipakai ulang. - Modul (
import) memberi alat siap pakai sepertiipaddress,hashlib, dancollections. with open(...)membaca dan menulis file dengan aman.
Tonton dan baca juga
Materi berikutnya membahas pengolahan teks lebih dalam: manipulasi string dan regex dasar untuk mengurai log yang formatnya lebih rumit, seperti log asli dari server Linux. Buka di roadmap untuk melanjutkan.