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.