VirusTotal API V3 Python Requests: Panduan & Contoh Kode

Mengakses VirusTotal API v3 menggunakan modul requests pada Python memerlukan penyertaan header kunci API (x-apikey) pada setiap permintaan HTTP ke endpoint resmi https://www.virustotal.com/api/v3/. Integrasi ini memungkinkan pengembang melakukan otomatisasi pemindaian file, pengecekan URL, hingga analisis laporan domain secara terprogram tanpa menggunakan antarmuka web.

Persiapan Awal dan Instalasi Pustaka

Sebelum menjalankan skrip Python, pastikan Anda telah memiliki kunci API aktif dari akun VirusTotal serta menginstal pustaka requests melalui manajer paket pip. Jalankan perintah berikut di terminal:

pip install requests

Simpan kunci API Anda dengan aman, sebaiknya menggunakan variabel lingkungan (environment variables) untuk menghindari kebocoran kredensial pada repository publik.

Tabel Endpoint Utama VirusTotal API V3

Fungsi Analisis Metode HTTP Endpoint URL API V3
Pindai URL POST https://www.virustotal.com/api/v3/urls
Laporan Analisis URL/File GET https://www.virustotal.com/api/v3/analyses/{id}
Unggah & Pindai File POST https://www.virustotal.com/api/v3/files
Laporan Hash File GET https://www.virustotal.com/api/v3/files/{id}
Analisis Domain GET https://www.virustotal.com/api/v3/domains/{domain}

Contoh Kode Python: Memeriksa Laporan File Berdasarkan Hash

Berikut adalah contoh implementasi nyata menggunakan pustaka requests untuk memeriksa laporan keamanan suatu file menggunakan nilai SHA-256, MD5, atau SHA-1:

import requests

def check_file_report(file_hash, api_key):
    url = f"https://www.virustotal.com/api/v3/files/{file_hash}"
    headers = {
        "accept": "application/json",
        "x-apikey": api_key
    }
    
    try:
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            result = response.json()
            stats = result['data']['attributes']['last_analysis_stats']
            print(f"Hasil Analisis untuk Hash: {file_hash}")
            print(f"- Berbahaya (Malicious): {stats.get('malicious', 0)}")
            print(f"- Mencurigakan (Suspicious): {stats.get('suspicious', 0)}")
            print(f"- Bersih (Harmless): {stats.get('harmless', 0)}")
        elif response.status_code == 404:
            print("File tidak ditemukan di database VirusTotal.")
        else:
            print(f"Gagal mengambil data. Status code: {response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"Terjadi kesalahan koneksi: {e}")

# Contoh Penggunaan
if __name__ == "__main__":
    API_KEY = "MASUKKAN_API_KEY_ANDA_DI_SINI"
    SAMPLE_HASH = "44d88612fea8a8f36de82e1278abb02f"
    check_file_report(SAMPLE_HASH, API_KEY)

Contoh Kode Python: Mengirim dan Memindai URL

Jika Anda ingin mengirimkan URL baru untuk dianalisis oleh mesin pemindai VirusTotal, gunakan metode POST ke endpoint urls:

import requests

def scan_url(target_url, api_key):
    endpoint = "https://www.virustotal.com/api/v3/urls"
    headers = {
        "accept": "application/json",
        "x-apikey": api_key,
        "content-type": "application/x-www-form-urlencoded"
    }
    data = {
        "url": target_url
    }
    
    response = requests.post(endpoint, data=data, headers=headers)
    if response.status_code == 200:
        json_response = response.json()
        analysis_id = json_response['data']['id']
        print(āĻĢ"URL berhasil dikirim. Analysis ID: {analysis_id}")
        return analysis_id
    else:
        print(f"Gagal mengirim URL. Status: {response.status_code}, Pesan: {response.text}")
        return None

# Contoh Penggunaan
if __name__ == "__main__":
    API_KEY = "MASUKKAN_API_KEY_ANDA_DI_SINI"
    TARGET = "http://example.com"
    scan_url(TARGET, API_KEY)

Tips Troubleshooting Lapangan

1. HTTP 403 Forbidden: Biasanya disebabkan oleh kunci API yang salah, tidak aktif, atau Anda melebihi batasan kuota permintaan (rate limit) untuk akun gratis (standar 4 permintaan per menit).

2. HTTP 429 Too Many Requests: Beri jeda waktu (time.sleep()) di antara panggilan beruntun jika Anda melakukan pemindaian massal menggunakan skrip otomatisasi.