- Регистрация
 - 20.08.2025
 
- Сообщения
 - 74
 
- Реакции
 - 19
 
Вдохновлен Заметка - Автоматическая проверка сайта на Virustotal с отправкой на почту .
Окрыленный идеей решил нагенерить модификацию скрипта и вот, что у DeepSeek получилось, так как у меня хватило сил и ума только промпт написать.
	
	
	
		
	
	
	
		
Запуск в режиме демона (для постоянного мониторинга):
				
			Окрыленный идеей решил нагенерить модификацию скрипта и вот, что у DeepSeek получилось, так как у меня хватило сил и ума только промпт написать.
		Bash:
	
	#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# === Настройки ===
VT_API_KEY="your_virustotal_api_key"
TELEGRAM_BOT_TOKEN="your_telegram_bot_token"
TELEGRAM_CHAT_ID="your_telegram_chat_id"
URL_TO_CHECK="https://yourwebsite.com"
EMAIL_TO="[email protected]"
TMP_FILE="/tmp/vt_scan_result.txt"
# === Настройки расписания ===
SCAN_SCHEDULE="0 9 * * *"  # Каждый день в 9:00 (формат cron)
# SCAN_SCHEDULE="0 */6 * * *"  # Каждые 6 часов
# SCAN_SCHEDULE="0 * * * *"    # Каждый час
SCAN_INTERVAL=86400         # Интервал в секундах (86400 = 1 день)
# === Функция отправки сообщения в Telegram ===
send_telegram_message() {
    local message="$1"
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
        -d chat_id="${TELEGRAM_CHAT_ID}" \
        -d text="$message" \
        -d parse_mode="HTML" > /dev/null
}
# === Функция отправки email ===
send_email() {
    local subject="$1"
    local body_file="$2"
    mail -s "$subject" "$EMAIL_TO" < "$body_file"
}
# === Функция выполнения сканирования ===
perform_scan() {
    # === Отправляем URL на скан ===
    SCAN_ID=$(curl -s -X POST "https://www.virustotal.com/api/v3/urls" \
        -H "x-apikey: $VT_API_KEY" \
        --data-urlencode "url=$URL_TO_CHECK" | jq -r '.data.id')
    # Проверка: успешно ли отправили
    if [ -z "$SCAN_ID" ] || [ "$SCAN_ID" = "null" ]; then
        error_msg="Ошибка: не удалось отправить URL $URL_TO_CHECK на проверку VirusTotal"
        echo "$error_msg" > "$TMP_FILE"
        send_email "VirusTotal scan error" "$TMP_FILE"
        send_telegram_message "<b>VirusTotal Error</b>%0A${error_msg}"
        return 1
    fi
    # === Ждём завершения анализа ===
    sleep 15
    # === Получаем результат ===
    REPORT=$(curl -s -X GET "https://www.virustotal.com/api/v3/analyses/$SCAN_ID" \
        -H "x-apikey: $VT_API_KEY")
    # === Парсим и формируем сообщение ===
    URL_ENCODED=$(echo -n "$URL_TO_CHECK" | base64 | tr '+/' '-_' | tr -d '=')
    REPORT_URL="https://www.virustotal.com/gui/url/$URL_ENCODED"
    # Формируем полный отчет для email
    echo "Отчёт VirusTotal для $URL_TO_CHECK" > "$TMP_FILE"
    echo "Ссылка на анализ: $REPORT_URL" >> "$TMP_FILE"
    echo >> "$TMP_FILE"
    echo "$REPORT" | jq -r '.data.attributes.stats | to_entries[] | "\(.key): \(.value)"' >> "$TMP_FILE"
    # Формируем краткое сообщение для Telegram
    STATS=$(echo "$REPORT" | jq -r '.data.attributes.stats')
    MALICIOUS=$(echo "$STATS" | jq -r '.malicious')
    SUSPICIOUS=$(echo "$STATS" | jq -r '.suspicious')
    UNDETECTED=$(echo "$STATS" | jq -r '.undetected')
    HARMLESS=$(echo "$STATS" | jq -r '.harmless')
    TELEGRAM_MSG="<b>VirusTotal Scan Report</b>%0A%0A
<b>URL:</b> ${URL_TO_CHECK}%0A
<b>Malicious:</b> ${MALICIOUS}%0A
<b>Suspicious:</b> ${SUSPICIOUS}%0A
<b>Undetected:</b> ${UNDETECTED}%0A
<b>Harmless:</b> ${HARMLESS}%0A
<b>Full report:</b> ${REPORT_URL}"
    # === Отправляем уведомления ===
    send_email "VirusTotal URL Scan Report: $URL_TO_CHECK" "$TMP_FILE"
    send_telegram_message "$TELEGRAM_MSG"
    # === Очистка временного файла ===
    rm -f "$TMP_FILE"
}
# === Функция расчета времени до следующего сканирования ===
calculate_sleep_time() {
    if [[ "$SCAN_SCHEDULE" =~ ^[0-9*\/,-]+[[:space:]]+[0-9*\/,-]+[[:space:]]+[0-9*\/,-]+[[:space:]]+[0-9*\/,-]+[[:space:]]+[0-9*\/,-]+$ ]]; then
        # Формат cron - вычисляем время до следующего выполнения
        local current_epoch=$(date +%s)
        local next_run=$(date -d "$(echo "$SCAN_SCHEDULE" | awk '{print $2" "$1" * * *"}' | xargs -I {} date -d "{}" +"%Y-%m-%d %H:%M:%S" 2>/dev/null)" +%s 2>/dev/null)
     
        if [ -n "$next_run" ] && [ "$next_run" -gt "$current_epoch" ]; then
            echo $((next_run - current_epoch))
        else
            echo "$SCAN_INTERVAL"
        fi
    else
        # Простой интервал в секундах
        echo "$SCAN_INTERVAL"
    fi
}
# === Основной цикл ===
if [ "$1" = "--once" ]; then
    # Однократное выполнение
    perform_scan
else
    # Режим демона с планировщиком
    send_telegram_message "<b>VirusTotal Monitor</b>%0AЗапуск мониторинга URL: $URL_TO_CHECK"
 
    while true; do
        perform_scan
        SLEEP_TIME=$(calculate_sleep_time)
        echo "Следующее сканирование через $SLEEP_TIME секунд"
        sleep "$SLEEP_TIME"
    done
fi
	Основные улучшения (Часть 1):
- Добавлена поддержка Telegram
 
- Функция send_telegram_message для отправки сообщений через Telegram Bot API 16
 - Поддержка HTML-разметки для лучшего форматирования
 - Разделение уведомлений
 
- Подробный отчет отправляется по email
 - Краткая сводка отправляется в Telegram
 - Улучшенная обработка ошибок
 
- Ошибки теперь отправляются и в Telegram, и на email
 - Форматирование сообщений
 
- Для Telegram используется краткий формат с ключевой статистикой
 - Для email сохраняется полный отчет
 - Безопасность
 
- Добавлена очистка временного файла
 
Настройка Telegram бота:
- Создайте бота через @BotFather и получите токен 6
 - Получите chat ID через запрос к getUpdates 6
 - Вставьте полученные значения в переменные TELEGRAM_BOT_TOKEN и TELEGRAM_CHAT_ID
 
Требования:
- Установленные утилиты: curl, jq, mail
 - Доступ к API VirusTotal и Telegram Bot API
 
Основные улучшения(Часть 2):
- Гибкое планирование сканирования
 
- Поддержка формата cron через переменную SCAN_SCHEDULE
 - Альтернативная настройка через интервал в секундах SCAN_INTERVAL
 - Примеры настроек в комментариях
 - Два режима работы
 
- Демон-режим (по умолчанию) - непрерывная работа по расписанию
 - Однократный режим (с параметром --once) - для ручного запуска
 - Умный расчет времени
 
- Функция calculate_sleep_time определяет время до следующего сканирования
 - Поддержка как cron-формата, так и простых интервалов
 - Уведомление о запуске мониторинга
 
- Отправка сообщения в Telegram при старте мониторинга
 - Логирование
 
- Вывод информации о времени следующего сканирования
 
Использование:
Настройка расписания (выберите один из вариантов):
		Bash:
	
	# Вариант 1: Использование cron-формата
SCAN_SCHEDULE="0 9 * * *"  # Каждый день в 9:00
# Вариант 2: Использование интервала в секундах
SCAN_INTERVAL=21600  # Каждые 6 часов
	Запуск в режиме демона (для постоянного мониторинга):
Однократный запуск (для тестирования):./virus_total_monitor.sh
Добавление в crontab (альтернативный вариант):./virus_total_monitor.sh --once
# Добавьте эту строку в crontab (crontab -e)
0 9 * * * /path/to/virus_total_monitor.sh --once
Примеры настроек расписания:
- Ежедневно в 9:00: SCAN_SCHEDULE="0 9 * * *"
 - Каждый час: SCAN_SCHEDULE="0 * * * *"
 - Каждые 6 часов: SCAN_INTERVAL=21600
 - Два раза в день (9:00 и 21:00): SCAN_SCHEDULE="0 9,21 * * *"
 
			
				Последнее редактирование: 
			
		
	
								
								
									
	
								
							
							
	