Cyber RoadmapINDONESIA

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.

Enam tipe data dasar Python: str, int, float, bool, list, dan dict, masing-masing dengan contoh
Enam tipe data dasar Python: str, int, float, bool, list, dan dict, masing-masing dengan contoh
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.

Diagram alur if, elif, dan else yang menentukan status BLOKIR, WASPADA, atau AMAN berdasarkan jumlah login gagal
Diagram alur if, elif, dan else yang menentukan status BLOKIR, WASPADA, atau AMAN berdasarkan jumlah login gagal
gagal = 4
if gagal >= 5:
    print("BLOKIR")
elif gagal >= 3:
    print("WASPADA")
else:
    print("AMAN")
# WASPADA
Operator yang sering dipakai dalam kondisi
OperatorArtiContoh
==, !=Sama dengan, tidak sama denganstatus == "GAGAL"
>, <, >=, <=Perbandingan angkagagal >= 5
and, or, notMenggabungkan kondisiport == 22 and aktif
inApakah 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 bawaan yang berguna untuk keamanan siber
ModulKegunaan
os, pathlibMengelola file dan folder
sysMembaca argumen dari terminal, menghentikan program
ipaddressMengolah alamat IP dan subnet
hashlibMenghitung hash seperti SHA-256, misalnya untuk mengecek keaslian file
collectionsStruktur data tambahan, seperti Counter untuk menghitung
datetimeMengolah tanggal dan waktu, misalnya cap waktu di log
socketKomunikasi jaringan, dasar pembuatan port scanner
reMencari 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 membuka file
ModeArtiKalau file belum ada
"r"Membaca (read)Error FileNotFoundError
"w"Menulis (write), isi lama dihapusDibuat 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.

Lima langkah proyek: membaca file log, memeriksa tiap baris dengan loop, mengambil yang gagal dengan kondisi, menghitung per IP dengan modul Counter, dan menulis laporan dengan fungsi
Lima langkah proyek: membaca file log, memeriksa tiap baris dengan loop, mengambil yang gagal dengan kondisi, menghitung per IP dengan modul Counter, dan menulis laporan dengan fungsi

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:

  • try dan except menangkap 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.
  • Counter adalah dictionary khusus untuk menghitung. Fungsi most_common() mengurutkan hasilnya dari yang terbanyak.
  • sys.argv membaca 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-import dan 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 sudo kalau 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, dan else membuat program mengambil keputusan. Kondisi diperiksa dari atas ke bawah.
  • for mengulang langkah untuk setiap data, misalnya setiap baris log.
  • Fungsi (def) membungkus langkah agar rapi dan bisa dipakai ulang.
  • Modul (import) memberi alat siap pakai seperti ipaddress, hashlib, dan collections.
  • 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.

Bermanfaat? Dukung konten berikutnya

Semua materi di sini gratis. Dukunganmu dipakai untuk membeli alat lab untuk praktik, eksplorasi, dan riset konten keamanan siber berikutnya.

Traktir di Trakteer ↗
Sampul course Cyber Security Fundamental

Pelajari lebih dalam

Cyber Security Fundamental di WPU Course

Lihat course ↗

Materi terkait di roadmap

Artikel lainnya

Artikel ini bersifat edukatif. Praktikkan teknik ofensif hanya di lingkungan yang kamu miliki izinnya. Baca Disclaimer.