Memahami Konsep Analysis ID pada VirusTotal
VirusTotal menggunakan Analysis ID untuk melacak status pemindaian (scan) file atau URL yang baru saja diunggah atau dikirimkan melalui API-nya. Ketika Anda mengirimkan sampel untuk dianalisis, sistem tidak selalu langsung memberikan hasil akhir karena proses antrean dan pemindaian oleh puluhan mesin antivirus membutuhkan waktu beberapa detik hingga menit. Oleh karena itu, server mengembalikan string unik berupa Analysis ID yang dapat Anda gunakan untuk memeriksa status eksekusi secara berkala.
Format Analysis ID umumnya berupa kombinasi string panjang atau gabungan hash SHA-256 dengan timestamp, tergantung apakah permintaan dilakukan melalui v2 atau v3 API. Endpoint resmi untuk memeriksa status ini menggunakan protokol REST API v3 dengan metode GET pada URL https://www.virustotal.com/api/v3/analyses/{id}.
Status Nilai Respons Analisis
Saat Anda melakukan kueri terhadap Analysis ID tertentu, VirusTotal API v3 akan mengembalikan dokumen JSON yang memuat atribut status di dalam objek attributes. Mengetahui status ini penting sebelum Anda membaca data deteksi mesin antivirus.
| Status Nilai | Arti & Kondisi Sistem | Tindakan yang Diperlukan |
|---|---|---|
queued |
File atau URL berada dalam antrean pemindaian server. | Tunggu beberapa detik lalu lakukan permintaan ulang (polling). |
in-progress |
Mesin antivirus sedang memindai sampel saat ini. | Lanjutkan polling dengan jeda waktu (delay) 5 hingga 10 detik. |
completed |
Analisis telah selesai sepenuhnya oleh seluruh mesin. | Baca hasil statistik (malicious, harmless, suspicious, undetected). |
Langkah Teknis Pengecekan via API v3
Untuk mengecek status secara otomatis menggunakan skrip, Anda membutuhkan kunci API (API Key) aktif dari akun terdaftar di VirusTotal. Batas permintaan (rate limit) untuk akun gratis (public API) adalah 4 permintaan per menit.
Contoh Kode Python untuk Cek Status ID
Berikut adalah cuplikan kode nyata menggunakan pustaka requests untuk memeriksa status analisis berdasarkan ID:
import requests
import time
url = "https://www.virustotal.com/api/v3/analyses/u-xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
headers = {
"accept": "application/json",
"x-apikey": "MASUKKAN_API_KEY_ANDA_DISINI"
}
while True:
response = requests.get(url, headers=headers)
data = response.json()
if response.status_code == 200:
status = data["data"]["attributes"]["status"]
print(f"Status saat ini: {status}")
if status == "completed":
stats = data["data"]["attributes"]["stats"]
print("Hasil Analisis:", stats)
break
else:
print(f"Error: {data}")
break
time.sleep(10)
Tips Mengatasi Kendala Rate Limit dan Error
Dalam penerapan di lapangan, pengembang sering menemui kendala ketika melakukan pengecekan status menggunakan Analysis ID. Berikut adalah beberapa solusi praktis:
- HTTP 429 (Too Many Requests): Terjadi karena melampaui batas kuota 4 request per menit pada akun gratis. Tambahkan fungsi jeda waktu (sleep) minimal 15 detik di dalam loop skrip Anda.
- HTTP 404 (Not Found): Analysis ID tidak valid atau sudah kedaluwarsa dari sistem penyimpanan sementara VirusTotal. Pastikan ID disalin secara utuh tanpa ada karakter spasi di awal atau akhir.
- Simpan Hash File: Jika Anda menguji file, simpan nilai SHA-256 dari file tersebut. Anda dapat langsung melakukan kueri riwayat file menggunakan hash tanpa harus mengunggah ulang atau mengandalkan Analysis ID sementara.