Parsing Respon API VirusTotal Python

Parsing respon VirusTotal API menggunakan Python memerlukan pemahaman terhadap struktur data JSON yang dikembalikan oleh endpoint v3, khususnya untuk analisis file, URL, atau domain. Format respon standar VirusTotal menggunakan pembungkus data dengan atribut spesifik seperti attributes dan last_analysis_stats.

Untuk mengekstrak data seperti jumlah deteksi mesin antivirus (malicious, harmless, suspicious), Anda harus mengakses dictionary bersarang dengan aman menggunakan metode .get() guna menghindari error KeyError saat menghadapi respon tidak lengkap.

Contoh Kode Parser Respon VirusTotal v3

Berikut adalah implementasi skrip Python menggunakan pustaka requests untuk mengambil data laporan file hash (SHA-256) dan memparsing hasil statistiknya:

import requests

def parse_virustotal_report(file_hash, api_key):
    url = f"https://www.virustotal.com/api/v3/files/{file_hash}"
    headers = {
        "accept": "application/json",
        "x-apikey": api_key
    }

    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        data = response.json()
        attributes = data.get("data", {}).get("attributes", {})
        stats = attributes.get("last_analysis_stats", {})
        file_info = {
            "sha256": attributes.get("sha256"),
            "harmless": stats.get("harmless", 0),
            "malicious": stats.get("malicious", 0),
            "suspicious": stats.get("suspicious", 0),
            "undetected": stats.get("undetected", 0),
            "type_description": attributes.get("type_description")
        }
        return file_info
    elif response.status_code == 404:
        return {"error": "Hash tidak ditemukan di database VirusTotal."}
    else:
        return {"error": f"Gagal mengambil data, status code: {response.status_code}"}

# Contoh Penggunaan
# api_key = "API_KEY_ANDA"
# hasil = parse_virustotal_report("4e292d3521d102e1de0f9b3cf2dd61fc37c762514de13a3a41b2c4c8d5573429", api_key)
# print(hasil)

Struktur Data Respon VirusTotal API v3

Memahami hierarki JSON sangat penting sebelum membuat fungsi parser lanjutan. Tabel berikut merinci jalur kunci (key path) utama dalam objek JSON VirusTotal.

Key Path JSONTipe DataDeskripsi Keterangan
data.idStringHash unik file (SHA-256 / MD5) atau ID objek URL.
data.typeStringJenis entitas yang dianalisis (contoh: file, url).
data.attributes.last_analysis_statsDictionaryRingkasan hasil deteksi dari seluruh vendor antivirus.
data.attributes.last_analysis_resultsDictionaryDetail hasil deteksi per vendor (Vendor A: clean, Vendor B: malicious).
data.attributes.meaningful_nameStringNama file yang paling sering dilaporkan atau terdeteksi.

Langkah-Langkah Penanganan Error (Troubleshooting)

  1. Rate Limiting (HTTP 429): Akun VirusTotal gratis dibatasi hingga 4 permintaan per menit. Tambahkan fungsi time.sleep(15) di antara iterasi pemanggilan API jika melakukan pemindaian massal.
  2. KeyError pada Respon Kosong: Selalu gunakan fungsi dict.get() alih-alih akses langsung menggunakan kurung siku ([]) untuk mencegah kegagalan skrip saat kunci tertentu tidak ada dalam payload.
  3. Validasi Hash: Pastikan string hash yang dikirimkan memiliki panjang yang valid (MD5: 32 karakter, SHA-1: 40 karakter, SHA-256: 64 karakter).