Membuat Python script untuk VirusTotal API memungkinkan Anda melakukan otomatisasi pemindaian file, hash, atau URL langsung ke database ancaman global milik VirusTotal. Panduan ini menggunakan endpoint VirusTotal API v3 resmi dengan pustaka requests Python.
Sebelum menjalankan skrip, pastikan Anda telah mendaftar akun gratis di VirusTotal untuk mendapatkan kunci API (API Key) personal Anda yang memiliki batasan standar 4 permintaan per menit.
Persiapan dan Instalasi Pustaka
VirusTotal API v3 berbasis RESTful HTTP. Anda memerlukan pustaka requests untuk mengirimkan data dan parameter. Instal pustaka melalui terminal atau command prompt:
pip install requests
Contoh Python Script untuk Cek File Hash
Skrip berikut digunakan untuk memeriksa status laporan analisis keamanan berdasarkan nilai hash (SHA-256, SHA-1, atau MD5) dari sebuah file tanpa harus mengunggah file fisiknya.
import requests
import json
API_KEY = "MASUKKAN_API_KEY_ANDA_DISINI"
FILE_HASH = "44d88612fea8a8f36de82e1278abb02f"
def check_hash(file_hash):
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:
result = response.json()
stats = result['data']['attributes']['last_analysis_stats']
print("Hasil Analisis Hash:")
print(json.dumps(stats, indent=4))
elif response.status_code == 404:
print("Hash tidak ditemukan di database VirusTotal.")
else:
print(f"Error: {response.status_code}")
if __name__ == "__main__":
check_hash(FILE_HASH)
Contoh Python Script untuk Scan URL
Untuk memindai tautan atau URL secara otomatis melalui VirusTotal API v3, proses dibagi menjadi dua tahap: mengirimkan URL untuk dianalisis, lalu mengambil hasil laporan berdasarkan ID analisis yang diberikan.
import requests
import time
API_KEY = "MASUKKAN_API_KEY_ANDA_DISINI"
TARGET_URL = "https://www.example.com"
def scan_url(target_url):
url = "https://www.virustotal.com/api/v3/urls"
headers = {
"accept": "application/json",
"x-apikey": API_KEY,
"content-type": "application/x-www-form-urlencoded"
}
data = f"url={target_url}"
response = requests.post(url, headers=headers, data=data)
if response.status_code == 200:
result = response.json()
analysis_id = result['data']['id']
print(f"URL berhasil dikirim. Analysis ID: {analysis_id}")
get_analysis_report(analysis_id)
else:
print(f"Gagal mengirim URL: {response.status_code}")
def get_analysis_id(analysis_id):
url = f"https://www.virustotal.com/api/v3/analyses/{analysis_id}"
headers = {
"accept": "application/json",
"x-apikey": API_KEY
}
time.sleep(5) # Jeda waktu untuk pemrosesan server
response = requests.get(url, headers=headers)
if response.status_code == 200:
stats = response.json()['data']['attributes']['stats']
print("Hasil Pemindaian URL:", stats)
if __name__ == "__main__":
scan_url(TARGET_URL)
Tabel Parameter Endpoint VirusTotal API v3
| Fungsi | Metode HTTP | Endpoint URL | Keterangan |
|---|---|---|---|
| Cek Hash File | GET | /api/v3/files/{id} | Mengambil laporan analisis berdasarkan MD5/SHA1/SHA256. |
| Unggah File | POST | /api/v3/files | Mengunggah file fisik maks 32MB untuk dianalisis. |
| Kirim URL | POST | /api/v3/urls | Mendaftarkan URL untuk dipindai oleh mesin antivirus. |
| Cek Laporan Analisis | GET | /api/v3/analyses/{id} | Mengambil status antrean atau hasil akhir analisis ID. |
Troubleshooting Kendala Umum
- Error 401 (Unauthorized): Periksa kembali string API key Anda di header
x-apikey. Pastikan tidak ada spasi tersembunyi. - Error 429 (Too Many Requests): Akun gratis (Public API) dibatasi maksimal 4 permintaan per menit dan 500 permintaan per hari. Tambahkan fungsi
time.sleep()jika melakukan pemindaian massal.