|
| 1 | +--- |
| 2 | +layout: article.njk |
| 3 | +title: "Dasar Cybersecurity dengan Python: Scanning Port Sederhana" |
| 4 | +date: 2026-01-03 |
| 5 | +category: SECURITY |
| 6 | +image: /img/logos/logo-belajarpython-square.png |
| 7 | +permalink: /2026/01/dasar-cybersecurity-python-port-scanning/ |
| 8 | +--- |
| 9 | + |
| 10 | +Python tidak hanya populer untuk Data Science dan Web Development, tetapi juga merupakan bahasa yang sangat *powerful* di dunia **Cybersecurity** dan **Ethical Hacking**. Salah satu teknik dasar dalam keamanan jaringan yang wajib diketahui adalah **Port Scanning**. |
| 11 | + |
| 12 | +Dalam artikel ini, kita akan belajar cara membuat *Port Scanner* sederhana menggunakan Python. Alat ini berguna untuk memeriksa port mana saja yang terbuka pada sebuah server atau komputer target. |
| 13 | + |
| 14 | +## Apa itu Port Scanning? |
| 15 | + |
| 16 | +Port scanning adalah proses memeriksa port pada alamat IP tertentu untuk mengetahui layanan apa yang sedang berjalan. |
| 17 | +* **Administrator Jaringan** menggunakannya untuk memastikan keamanan dan menutup port yang tidak perlu. |
| 18 | +* **Penyerang (Hacker)** menggunakannya untuk mencari celah masuk (vulnerability) pada sistem target. |
| 19 | + |
| 20 | +> **Peringatan Keras:** Gunakan ilmu ini hanya untuk tujuan edukasi, riset keamanan, atau pada jaringan milik Anda sendiri. Melakukan scanning pada jaringan orang lain tanpa izin adalah tindakan ilegal. |
| 21 | +
|
| 22 | +## Persiapan |
| 23 | + |
| 24 | +Kita tidak perlu menginstall library tambahan karena kita akan menggunakan library bawaan Python bernama `socket`. Library ini menyediakan antarmuka untuk komunikasi jaringan tingkat rendah. |
| 25 | + |
| 26 | +## Membuat Port Scanner Sederhana |
| 27 | + |
| 28 | +Buatlah file baru bernama `port_scanner.py` dan tulis kode berikut: |
| 29 | + |
| 30 | +```python |
| 31 | +import socket |
| 32 | +import sys |
| 33 | +from datetime import datetime |
| 34 | + |
| 35 | +# Mendefinisikan target |
| 36 | +# Bisa menggunakan IP (misal: 127.0.0.1) atau domain (misal: scanme.nmap.org) |
| 37 | +target_input = "127.0.0.1" |
| 38 | + |
| 39 | +# Menerjemahkan hostname ke IPv4 |
| 40 | +try: |
| 41 | + target = socket.gethostbyname(target_input) |
| 42 | +except socket.gaierror: |
| 43 | + print("Hostname tidak dapat diselesaikan.") |
| 44 | + sys.exit() |
| 45 | + |
| 46 | +print("-" * 50) |
| 47 | +print(f"Sedang memindai target: {target}") |
| 48 | +print(f"Waktu mulai: {datetime.now()}") |
| 49 | +print("-" * 50) |
| 50 | + |
| 51 | +try: |
| 52 | + # Melakukan scan pada port 1 sampai 100 (bisa diubah range-nya) |
| 53 | + for port in range(1, 101): |
| 54 | + # Membuat socket object |
| 55 | + # AF_INET: IPv4 |
| 56 | + # SOCK_STREAM: TCP |
| 57 | + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| 58 | + |
| 59 | + # Set timeout agar tidak menunggu terlalu lama jika port tertutup |
| 60 | + s.settimeout(0.5) |
| 61 | + |
| 62 | + # Mencoba koneksi ke port |
| 63 | + # connect_ex mengembalikan 0 jika berhasil, dan error code jika gagal |
| 64 | + result = s.connect_ex((target, port)) |
| 65 | + |
| 66 | + if result == 0: |
| 67 | + print(f"Port {port}: TERBUKA") |
| 68 | + |
| 69 | + # Menutup koneksi |
| 70 | + s.close() |
| 71 | + |
| 72 | +except KeyboardInterrupt: |
| 73 | + print("\nScan dihentikan oleh pengguna.") |
| 74 | + sys.exit() |
| 75 | +except socket.error: |
| 76 | + print("\nTidak dapat terhubung ke server.") |
| 77 | + sys.exit() |
| 78 | + |
| 79 | +print("-" * 50) |
| 80 | +print("Scan selesai.") |
| 81 | +``` |
| 82 | + |
| 83 | +## Penjelasan Kode |
| 84 | + |
| 85 | +1. **Import Module**: |
| 86 | + * `socket`: Inti dari komunikasi jaringan. |
| 87 | + * `sys`: Untuk menangani input sistem dan exit. |
| 88 | + * `datetime`: Untuk mencatat waktu scan. |
| 89 | + |
| 90 | +2. **Menentukan Target**: |
| 91 | + * `socket.gethostbyname()` mengubah nama domain menjadi alamat IP yang bisa dipahami komputer. |
| 92 | + |
| 93 | +3. **Looping Port**: |
| 94 | + * Kita menggunakan `range(1, 101)` untuk memindai port 1 hingga 100. Anda bisa memperluasnya hingga 65535 (total port TCP), namun akan memakan waktu lebih lama. |
| 95 | + |
| 96 | +4. **Socket Object**: |
| 97 | + * `socket.AF_INET` menentukan kita menggunakan IPv4. |
| 98 | + * `socket.SOCK_STREAM` menentukan kita menggunakan protokol TCP. |
| 99 | + |
| 100 | +5. **Koneksi**: |
| 101 | + * `s.connect_ex((target, port))` adalah metode yang mencoba melakukan koneksi. Berbeda dengan `connect()` yang akan *raise error* jika gagal, `connect_ex()` mengembalikan angka. Angka **0** berarti sukses (port terbuka). |
| 102 | + |
| 103 | +6. **Error Handling**: |
| 104 | + * `KeyboardInterrupt`: Menangani jika pengguna menekan `Ctrl+C` untuk menghentikan program. |
| 105 | + * `socket.error`: Menangani jika terjadi masalah koneksi umum. |
| 106 | + |
| 107 | +## Mengapa Port Terbuka Berbahaya? |
| 108 | + |
| 109 | +Port yang terbuka ibarat pintu rumah yang tidak terkunci. Jika di balik port tersebut berjalan layanan yang memiliki celah keamanan (bug) atau konfigurasi yang lemah (misal password default), penyerang bisa masuk dan mengambil alih sistem. |
| 110 | + |
| 111 | +Sebagai praktisi keamanan siber, tugas Anda adalah menemukan port-port ini dan memastikan layanan yang berjalan di belakangnya aman, atau menutupnya jika tidak diperlukan. |
| 112 | + |
| 113 | +## Langkah Selanjutnya |
| 114 | + |
| 115 | +Ini adalah teknik *Reconnaissance* (pengumpulan informasi) yang sangat dasar. Untuk pengembangan lebih lanjut, Anda bisa mempelajari: |
| 116 | +* **Nmap**: Tools scanning paling populer di dunia (bisa dijalankan lewat Python dengan `python-nmap`). |
| 117 | +* **Banner Grabbing**: Mengambil informasi versi aplikasi yang berjalan di port tertentu. |
| 118 | +* **Multithreading**: Mempercepat proses scanning dengan menjalankan banyak scan sekaligus. |
0 commit comments