3.4
IP, ASN, dan Pemindaian Port
Halaman ini menutup sisi jaringan dari recon: mengubah daftar hostname menjadi alamat IP, memetakan IP ke organisasi dan blok route milik sebuah ASN, lalu memindai port pada host yang benar-benar milik target. Semua perintah di bawah bekerja pada berkas HOSTS.txt dan file.txt yang formatnya didefinisikan di Placeholder dan Konvensi Penulisan One-liner.
Alur dari host ke IP, rentang ASN, dan port terbuka
graph LR
HOSTS["HOSTS.txt"] --> DIG["dig a HOST +short"]
DIG --> IP["alamat IP"]
IP --> RADB["whois -h whois.radb.net IP"]
RADB --> ORIGIN["baris origin: ASxxxx"]
ORIGIN --> ROUTE["blok route CIDR"]
IP --> WHOIS["whois IP"]
WHOIS --> ORG["CIDR + Organization"]
FILE["file.txt"] --> GREP["grep -E -o regex IPv4"]
GREP --> IPLIST["daftar IP"]
ROUTE --> SCAN["naabu -rate 40000 -verify"]
IPLIST --> SCAN
SCAN --> PROBE["httprobe"]
PROBE --> OPEN["port terbuka yang melayani HTTP"]
style HOSTS fill:#336791,color:#fff
style FILE fill:#336791,color:#fff
style ORIGIN fill:#8b5cf6,color:#fff
style ROUTE fill:#8b5cf6,color:#fff
style ORG fill:#8b5cf6,color:#fff
style IPLIST fill:#8b5cf6,color:#fff
style DIG fill:#f59e0b,color:#000
style RADB fill:#f59e0b,color:#000
style SCAN fill:#f59e0b,color:#000
style PROBE fill:#2d7d46,color:#fff
style OPEN fill:#2d7d46,color:#fff
%% fig: Dari host ke IP, ASN, dan port terbuka
%% desc: Daftar hostname diresolusi menjadi IP, IP dipetakan ke origin ASN dan blok route, lalu hasilnya dipakai untuk memindai port sebelum diuji dengan httprobe.Rentang CIDR dan organisasi dari daftar target
Perintah ini melakukan loop atas setiap baris HOSTS.txt, meresolusi hostname lewat dig a $HOST +short, lalu memanggil whois untuk setiap IP yang kembali. Baris whois disaring dengan grep -e "CIDR\|Organization", spasinya dirapatkan oleh tr -s " ", dan paste - - menempelkan dua baris hasil saring menjadi satu baris pasangan CIDR dan organisasi. Sisa duplikat dibuang oleh uniq di akhir loop. README.md:106-1121
Keluaran per hostname kira-kira berupa satu hingga beberapa pasangan CIDR dan Organization, yang bisa langsung dipakai untuk mempersempit ruang pemindaian pada tahap berikutnya.
⚠️
dig ahanya meminta record A. Host yang hanya punya record AAAA tidak menghasilkan IP di sini, sehingga rentang CIDR-nya tidak pernah terlihat.
Rentang IP yang dialokasikan untuk sebuah ASN
Satu IP tidak cukup untuk menggambarkan aset jaringan sebuah organisasi, karena satu organisasi biasanya menguasai beberapa blok route sekaligus. Perintah ini mengambil nomor ASN dari whois di server RADB, lalu menanyakan seluruh blok yang berasal dari ASN tersebut. README.md:224-2292
- Tahap pertama,
whois -h whois.radb.net IP | grep origin: | awk '{print $NF}' | head -1mengambil satu nilaiorigin:pertama, yaitu ASN pemilik IP. - Tahap kedua,
whois -h whois.radb.net -i origin -T route <ASN>meminta semua objekroutemilik ASN itu;grep -w "route:" | awk '{print $NF}'menyisakan blok CIDR-nya saja. sort -nmengurutkan hasil secara numerik berdasarkan awalan teks blok, bukan berdasarkan ukuran blok.
Nilai IP pada perintah ini adalah alamat tunggal, bukan berkas. Untuk memasok banyak IP sekaligus, jalankan perintah yang sama di dalam loop atas HOSTS.txt seperti pada pola dig dan whois di bagian sebelumnya.
Ekstraksi IP dari berkas
Bila daftar IP sudah tersebar di dalam berkas teks campuran, grep -E -o dengan regex oktet lengkap mengambil setiap kemunculan IPv4 tanpa peduli konteks barisnya. README.md:231-2363
Regex tersebut menyusun satu oktet dari tiga alternatif, yaitu 25[0-5], 2[0-4][0-9], dan [01]?[0-9][0-9]?, lalu mengulanginya empat kali dengan titik sebagai pemisah. Opsi -o mencetak hanya bagian yang cocok, sehingga satu baris panjang bisa menghasilkan beberapa IP. Pola ini tidak memvalidasi nomor port atau suffix CIDR yang menempel pada IP.
Arah sebaliknya, dari daftar IP kembali ke hostname, ditangani oleh python3 hosthunter.py HOSTS.txt > OUT.txt yang membaca berkas berisi IP. README.md:386-3914 Pembahasan reverse lookup itu ada di Enumerasi Subdomain dan Deteksi Takeover.
Pemindaian port tanpa host di belakang CloudFlare
Memindai port pada hostname yang dilayani CloudFlare hanya akan mengenai edge milik CloudFlare, bukan server aslinya. Pipeline ini menyaring host semacam itu sebelum pemindaian dimulai. README.md:238-2435
graph LR
SUB["subfinder -silent -d HOST"] --> RES["filter-resolved"]
RES --> CF["cf-check"]
CF -->|lolos| SORT["sort -u"]
CF -->|di belakang CloudFlare| DROP["dibuang dari daftar"]
SORT --> NAABU["naabu -rate 40000 -silent -verify"]
NAABU --> HT["httprobe"]
style SUB fill:#f59e0b,color:#000
style CF fill:#f59e0b,color:#000
style NAABU fill:#f59e0b,color:#000
style SORT fill:#8b5cf6,color:#fff
style HT fill:#2d7d46,color:#fff
style DROP fill:#dc2626,color:#fff
%% fig: Penyaringan host sebelum pemindaian port
%% desc: Subdomain yang sudah diresolusi dibuang bila berada di belakang CloudFlare, sisanya diurutkan lalu dipindai dengan naabu dan diuji dengan httprobe.filter-resolved hanya meloloskan subdomain yang benar-benar punya IP, cf-check membuang yang mengarah ke CloudFlare, dan naabu memindai port dengan -rate 40000, -silent, serta -verify untuk memastikan port benar-benar terbuka. Tahap terakhir, httprobe, menyisakan port yang melayani protokol HTTP saja. Host yang sudah lolos penyaringan di sini bisa langsung masuk ke tahap Pemetaan URL, Berkas JavaScript, dan Endpoint.
⚠️
-rate 40000adalah nilai yang sangat agresif. Jangan jalankan pipeline ini di luar cakupan program bug bounty yang mengizinkan pemindaian aktif, dan turunkan nilainya bila target punya aturan pembatasan laju.
Mengubah keluaran nmap menjadi target untuk HTTPX
Bila pemindaian port dilakukan dengan nmap, hasilnya bisa langsung disambungkan ke httpx tanpa menyalin manual. Perintah nmap -v0 HOST -oX /dev/stdout menuliskan laporan XML ke stdout, jc --xml -p mengubah XML itu menjadi JSON, dan jq -r membentuk string IP:port dari .nmaprun.host, .address["@addr"], serta setiap .ports.port[]["@portid"]. README.md:400-4056
Ekspresi jq tersebut mengambil alamat host sekali, lalu mengulang setiap port yang tercatat. httpx --silent di ujung pipeline menerima aliran IP:port itu dan melaporkan mana yang benar-benar merespons sebagai layanan HTTP.
Ringkasan perintah per tahap
| Tahap | Masukan | Keluaran | Perintah kunci |
|---|---|---|---|
| CIDR dan organisasi | HOSTS.txt | pasangan CIDR dan Organization per IP | dig a +short, whois, paste - - |
| Blok route milik ASN | satu alamat IP | daftar blok CIDR dari origin: | whois -i origin -T route, sort -n |
| Ekstraksi IP | file.txt | setiap kemunculan IPv4 | grep -E -o |
| Pemindaian port | hostname tervalidasi | port terbuka yang melayani HTTP | filter-resolved, cf-check, naabu -rate 40000 -verify, httprobe |
| Parser nmap | host untuk nmap | aliran IP:port untuk httpx | nmap -oX, jc --xml -p, jq -r, httpx --silent |
Baris tabel di atas bertumpu pada README.md:106-1121, README.md:224-2292, README.md:231-236, README.md:238-243, dan README.md:400-405. Setelah port terbuka dan host yang bukan CloudFlare terkumpul, langkah berikutnya adalah menyusun pipeline penuh seperti yang dijelaskan di Alur Pipeline dan Toolchain.