Исключение ReadTimeout при запросе к VirusTotal APIPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Исключение ReadTimeout при запросе к VirusTotal API

Сообщение Anonymous »

Я обнаружил исключение ReadTimeout при попытке доступа к API VirusTotal с помощью библиотеки запросов в Python. Интересно, что я могу без проблем получить доступ к VirusTotal через браузер (Chrome), но в Edge получаю сообщение об ошибке тайм-аута. Вот результат трассировки, который я получил:

Код: Выделить всё

Traceback (most recent call last):
...
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='www.virustotal.com', port=443): Read timed out.  (read timeout=None)
Фрагмент кода:
Вот упрощенная версия кода, вызывающего проблему:

Код: Выделить всё

import requests

def get_ip_report_vt(ip):
url = f"https://www.virustotal.com/api/v3/ip_addresses/{ip}"
headers = {
"x-apikey": "YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
return response.json()

# Process IP list
def process_ip_list(input_csv_file, output_csv_file):
ip = "8.8.8.8"  # Example IP
vt_score, vt_country, vt_organization = get_ip_report_vt(ip)
# Further processing...

process_ip_list("input.csv", "output.csv")
Вот более подробный скрипт:

Код: Выделить всё

import requests
import csv
import time

# API keys for VirusTotal and AbuseIPDB
VIRUSTOTAL_API_KEYS = [
'YOUR_VIRUSTOTAL_API_KEY'  # Replace with your actual API key
]

ABUSEIPDB_API_KEYS = [
'YOUR_ABUSEIPDB_API_KEY'  # Replace with your actual API key
]

# Round-robin index counters
vt_key_index = 0
abuseipdb_key_index = 0

# Function to get the next API key
def get_next_api_key(api_keys, index):
key = api_keys[index % len(api_keys)]
index += 1
return key, index

# Function to query VirusTotal for IP report
def get_ip_report_vt(ip):
global vt_key_index
api_key, vt_key_index = get_next_api_key(VIRUSTOTAL_API_KEYS, vt_key_index)

url = f"https://www.virustotal.com/api/v3/ip_addresses/{ip}"
headers = {"x-apikey": api_key}

try:
response = requests.get(url, headers=headers)
response.raise_for_status()  # Raises an error for HTTP codes 4xx/5xx
data = response.json()
return data['data']['attributes']['reputation'], data['data']['attributes']['country']
except requests.exceptions.RequestException as e:
print(f"VirusTotal Error for IP {ip}: {e}")
return None, None

# Function to query AbuseIPDB for IP report
def get_ip_report_abuseipdb(ip):
global abuseipdb_key_index
api_key, abuseipdb_key_index = get_next_api_key(ABUSEIPDB_API_KEYS, abuseipdb_key_index)

url = "https://api.abuseipdb.com/api/v2/check"
headers = {'Key': api_key, 'Accept': 'application/json'}
params = {'ipAddress': ip}

try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
return data['data']['abuseConfidenceScore'], data['data']['countryCode']
except requests.exceptions.RequestException as e:
print(f"AbuseIPDB Error for IP {ip}: {e}")
return None, None

# Main function to process IPs
def process_ip_list(input_csv, output_csv):
with open(input_csv, 'r') as infile, open(output_csv, 'w', newline='') as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile)
writer.writerow(['IP', 'VT Score', 'VT Country', 'AbuseIPDB Score', 'AbuseIPDB Country'])

next(reader)  # Skip header
for row in reader:
ip = row[0]
vt_score, vt_country = get_ip_report_vt(ip)
abuse_score, abuse_country = get_ip_report_abuseipdb(ip)
writer.writerow([ip, vt_score, vt_country, abuse_score, abuse_country])
time.sleep(1)  # Respect rate limits

# Example usage
process_ip_list('ip_list.csv', 'ip_report_list.csv')
Предпринятые действия по устранению неполадок:
  • Проверьте ключ API: проверено, что мой ключ API действителен и активен. >
  • Проблемы с сетью:
  • Я пробовал получить доступ к VirusTotal в разных браузерах, и он отлично работает Chrome, но не Edge, который показывает ERR_TIMED_OUT.
  • Я выполнил пинг-тест, но в результате получилось сообщение «Тайм-аут запроса истек».
  • Изменен DNS настройки Google DNS (8.8.8.8 и 8.8.4.4), что позволило Edge получить доступ к VirusTotal, но я по-прежнему сталкиваюсь с той же проблемой тайм-аута в своем коде.
< ol start="3">
[*]Брандмауэр/Прокси: отключите настройки брандмауэра и прокси, и проблема останется.

Дополнительный контекст:
  • Раньше иногда это работало, а иногда нет. А теперь он просто перестал работать.
  • API ABUSEIPDB работал, когда я писал код только для ABUSEIPDB.
  • раньше он переходил на 100 IP, тогда останавливается и показывает ошибку, иногда через некоторое время это работает. но сейчас это просто не сработает. Я использовал ключ различия, потому что у меня закончился запрос 500, и он не сработал.
Есть ли у кого-нибудь предложения по решению этой проблемы, связанной с сетью, или устранению неполадок? дальше?

Подробнее здесь: https://stackoverflow.com/questions/791 ... stotal-api
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Исключение ReadTimeout при запросе к VirusTotal API
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Исключение ReadTimeout при запросе к VirusTotal API
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Исключение ReadTimeout при запросе к VirusTotal API
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Stream.ReadTimeout» вызвал исключение типа «System.InvalidOperationException».
    Anonymous » » в форуме C#
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Stream.readtimeout 'бросил исключение типа' System.invalidoperationException '
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»