Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая_работа.docx
Скачиваний:
2
Добавлен:
12.03.2026
Размер:
2.29 Mб
Скачать

Список использованных источников

1. Климентьев К.. Компьютерные вирусы и антивирусы. Взгляд программиста, ДМК Пресс, 656 стр., 2015г.

2. Холмогоров В., PRO Вирусы, ООО «Страта», Санкт-Петербург, 2015г.

3. Черпаков И., Основы программирования. Учебник и практикум, Юрайт, 220 стр., 2016г.

4. Н.И. Парфилова, А. Н. Пылькин, Б.Г. Трусов, Программирование. Основы алгоритмизации и программирования. Учебник, 2014г., 240 стр.

5. Основы Python. // Яндекс Образование URL: https://education.yandex.ru/handbook/python (дата обращения: 24.10.2025).

Приложения

Приложение А

Листинг программы

import os

import platform

import subprocess

import requests

import time

from datetime import datetime

# Глобальные переменные для хранения результатов

results = {}

check_times = {}

def print_header():

print("=" * 70)

print("КОМПЛЕКСНАЯ ПРОВЕРКА БЕЗОПАСНОСТИ ПК")

print("=" * 70)

print()

def print_menu():

print("ГЛАВНОЕ МЕНЮ:")

print("1. Проверить интернет-соединение")

print("2. Проверить наличие установленного ПО")

print("3. Проверить работоспособность межсетевого экрана")

print("4. Проверить работоспособность антивируса")

print("5. Выполнить все проверки")

print("6. Показать подробный отчет")

print("7. Сохранить отчет в файл")

print("0. Выход")

print()

# Модуль проверки наличия подключения к Интернету

def check_internet_connection():

global results, check_times

print("\nПРОВЕРКА ИНТЕРНЕТ-СОЕДИНЕНИЯ\n")

start_time = time.time()

# Способ 1: Ping Google DNS

print("1. Проверка ping 8.8.8.8...")

try:

result = subprocess.run(

["ping", "-n", "4", "8.8.8.8"], capture_output=True, text=True, timeout=15

)

if result.returncode == 0:

print("Ping успешен")

ping_status = "Доступен"

else:

print("Ping не удался")

ping_status = "Не доступен"

except:

print("Ошибка выполнения ping")

ping_status = "Ошибка"

# Способ 2: HTTP запрос

print("2. Проверка HTTP соединения...")

try:

response = requests.get("http://www.google.com", timeout=10)

if response.status_code == 200:

print("HTTP соединение установлено")

http_status = "Доступен"

else:

print("HTTP код:", response.status_code)

http_status = "Ограничен"

except requests.exceptions.RequestException as e:

print(f"HTTP ошибка: {e}")

http_status = "Не доступен"

# Итоговый статус

if ping_status == "Доступен" and http_status == "Доступен":

internet_status = "ПОДКЛЮЧЕН"

elif ping_status == "Не доступен" and http_status == "Не доступен":

internet_status = "НЕ ПОДКЛЮЧЕН"

else:

internet_status = "ЧАСТИЧНО ПОДКЛЮЧЕН"

results["internet"] = {

"status": internet_status,

"ping": ping_status,

"http": http_status,

}

check_times["internet"] = time.time() - start_time

print(f"\nИТОГ: Интернет-соединение: {internet_status}")

print(f"Время проверки: {check_times['internet']:.2f} сек")

input("\nНажмите Enter для продолжения...")

# Модуль проверки наличия установленного межсетевого экрана и антивируса

def check_installed_software():

global results, check_times

print("\nПРОВЕРКА УСТАНОВЛЕННОГО ПО\n")

start_time = time.time()

found_antivirus = []

found_firewalls = []

# Список антивирусов и их путей

antivirus_paths = {

"Windows Defender": [

"C:\\Program Files\\Windows Defender",

"C:\\ProgramData\\Microsoft\\Windows Defender",

],

"Kaspersky": [

"C:\\Program Files (x86)\\Kaspersky Lab",

"C:\\Program Files\\Kaspersky Lab",

],

"Avast": [

"C:\\Program Files (x86)\\AVAST Software\\Avast",

"C:\\Program Files\\AVAST Software\\Avast",

],

"Dr.Web": ["C:\\Program Files (x86)\\DrWeb", "C:\\Program Files\\DrWeb"],

}

# Список файрволов и их пути

firewall_paths = {

"Windows Firewall": ["C:\\Windows\\System32\\wf.msc"],

"Comodo": ["C:\\Program Files\\Comodo"],

}

print("Поиск антивирусного ПО...")

for av_name, paths in antivirus_paths.items():

for path in paths:

if os.path.exists(path):

found_antivirus.append(av_name)

print(f"Найден: {av_name}")

break

print("\nПоиск межсетевых экранов...")

for fw_name, paths in firewall_paths.items():

for path in paths:

if os.path.exists(path):

found_firewalls.append(fw_name)

print(f"Найден: {fw_name}")

break

results["software"] = {

"antivirus": found_antivirus if found_antivirus else ["Не обнаружено"],

"firewalls": found_firewalls if found_firewalls else ["Не обнаружено"],

}

check_times["software"] = time.time() - start_time

print(f"\nРЕЗУЛЬТАТЫ ПОИСКА ПО:")

print(

f"Антивирусы: {', '.join(found_antivirus) if found_antivirus else 'Не найдены'}"

)

print(

f"Файрволы: {', '.join(found_firewalls) if found_firewalls else 'Не найдены'}"

)

print(f"Время проверки: {check_times['software']:.2f} сек")

input("\nНажмите Enter для продолжения...")

# Модуль проверки работоспособности межсетевого экрана

def check_firewall_functionality():

global results, check_times

print("\nПРОВЕРКА РАБОТОСПОСОБНОСТИ МЕЖСЕТЕВОГО ЭКРАНА\n")

start_time = time.time()

test_results = []

# Тестовые ресурсы, которые ДОЛЖНЫ быть заблокированы фаерволом

# Используем нестандартные порты и подозрительные адреса

blocked_tests = [

("http://malware.testing.google.test", 80), # Тестовый вредоносный домен

("http://test.eicar.org", 80), # Адрес связанный с антивирусным тестированием

]

print("Попытка подключения к ресурсам, которые должны быть заблокированы...")

blocked_count = 0

total_tests = len(blocked_tests)

for i, (host, port) in enumerate(blocked_tests, 1):

print(f"{i}. Попытка подключения к {host}:{port}...")

# Попытка HTTP подключения

try:

response = requests.get(host, timeout=8)

# Если дошли до сюда - подключение УСПЕШНО, значит фаервол НЕ РАБОТАЕТ

test_results.append(

(

f"{host}:{port}",

"ДОСТУПЕН",

"Файрвол не блокирует запрещенный ресурс",

)

)

print("Доступен (фаервол не работает!)")

except requests.exceptions.RequestException:

# Если подключение не удалось - фаервол РАБОТАЕТ КОРРЕКТНО

test_results.append(

(f"{host}:{port}", "ЗАБЛОКИРОВАН", "Файрвол блокирует подключение")

)

print("Заблокирован (фаервол работает)")

blocked_count += 1

# Проверка нормального ресурса для сравнения

print("\nПроверка не опасного ресурса (для сравнения)...")

try:

response = requests.get("http://www.google.com", timeout=5)

test_results.append(("google.com:80", "ДОСТУПЕН", "Не опасный ресурс доступен"))

print("Не опасный ресурс доступен")

except:

test_results.append(

(

"google.com:80",

"ЗАБЛОКИРОВАН",

"Файрвол блокирует даже нормальные ресурсы",

)

)

print("Нормальный ресурс заблокирован")

# Анализ результатов согласно заданию

if blocked_count == total_tests:

firewall_status = "АКТИВЕН И РАБОТАЕТ"

status_description = "Файрвол корректно блокирует запрещенные подключения"

elif blocked_count == 0:

firewall_status = "НЕ РАБОТАЕТ"

status_description = "Файрвол не блокирует запрещенные подключения"

else:

firewall_status = "ЧАСТИЧНО РАБОТАЕТ"

status_description = "Файрвол блокирует не все запрещенные подключения"

results["firewall"] = {

"status": firewall_status,

"tests": test_results,

"blocked_count": blocked_count,

"total_tests": total_tests,

"description": status_description,

}

check_times["firewall"] = time.time() - start_time

print(f"\nСТАТУС ФАЙРВОЛА: {firewall_status}")

print(f"Заблокировано подключений: {blocked_count}/{total_tests}")

print(f"{status_description}")

print(f"Время проверки: {check_times['firewall']:.2f} сек")

input("\nНажмите Enter для продолжения...")

# Модуль проверки работоспособности антивирусного ПО с помощью EICAR теста

def check_antivirus_functionality():

global results, check_times

print("\nПРОВЕРКА РАБОТОСПОСОБНОСТИ АНТИВИРУСА\n")

print("Используется EICAR тестовый файл (безопасный для системы)")

start_time = time.time()

# EICAR test string

eicar_test_string = (

"X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"

)

test_files = [

os.path.join(os.getenv("TEMP"), "eicar_test.com"),

os.path.join(os.getcwd(), "eicar_test.com"),

]

test_results = []

for file_path in test_files:

print(f"\nТестирование в: {file_path}")

try:

# Создание тестового файла

with open(file_path, "w") as f:

f.write(eicar_test_string)

print("Тестовый файл создан")

# Ожидание реакции антивируса

print("Ожидание реакции антивируса...", end="")

for i in range(10):

print(".", end="", flush=True)

time.sleep(1)

if not os.path.exists(file_path):

print("\nАнтивирус среагировал и удалил файл!")

test_results.append(("УДАЛЕН", "Антивирус активен!"))

break

else:

# Проверяем статус файла после ожидания

if os.path.exists(file_path):

# Пытаемся прочитать файл

try:

with open(file_path, "r") as f:

content = f.read()

if content == eicar_test_string:

test_results.append(("НЕ ТРОНУТ", "Антивирус не работает"))

print("\nАнтивирус не отреагировал")

else:

test_results.append(

("ИЗМЕНЕН", "Антивирус сработал частично")

)

print("\nФайл был изменен")

except PermissionError:

test_results.append(

("ЗАБЛОКИРОВАН", "Антивирус заблокировал файл!")

)

print("\nФайл заблокирован антивирусом")

# Очистка

try:

os.remove(file_path)

except:

pass

else:

test_results.append(("УДАЛЕН", "Антивирус активен!"))

print("\nАнтивирус среагировал")

except Exception as e:

print(f"\nОшибка: {e}")

test_results.append(("ОШИБКА", f"{e}"))

# Анализ результатов

working_tests = sum(1 for result in test_results if "!" in result[1])

total_tests = len(test_results)

if working_tests == total_tests:

antivirus_status = "АКТИВЕН И РАБОТАЕТ"

elif working_tests == 0:

antivirus_status = "НЕ РАБОТАЕТ"

else:

antivirus_status = "ЧАСТИЧНО РАБОТАЕТ"

results["antivirus"] = {

"status": antivirus_status,

"tests": test_results,

"working_tests": working_tests,

"total_tests": total_tests,

}

check_times["antivirus"] = time.time() - start_time

print(f"\nСТАТУС АНТИВИРУСА: {antivirus_status}")

print(f"Успешных тестов: {working_tests}/{total_tests}")

print(f"Время проверки: {check_times['antivirus']:.2f} сек")

input("\nНажмите Enter для продолжения...")

# Выполнение всех проверок последовательно

def run_all_checks():

print("ЗАПУСК ПОЛНОЙ ПРОВЕРКИ БЕЗОПАСНОСТИ")

checks = [

("Проверка интернет-соединения", check_internet_connection),

("Поиск установленного ПО", check_installed_software),

("Проверка файрвола", check_firewall_functionality),

("Проверка антивируса", check_antivirus_functionality),

]

for check_name, check_func in checks:

print(f"\n>>> Выполняется: {check_name}")

try:

check_func()

print(f"{check_name} завершена")

except Exception as e:

print(f"Ошибка при выполнении {check_name}: {e}")

time.sleep(1)

show_detailed_report()

# Вывод подробного отчета

def show_detailed_report():

global results

print("ПОДРОБНЫЙ ОТЧЕТ О БЕЗОПАСНОСТИ")

if not results:

print("Проверки еще не выполнялись")

return

total_score = 0

max_score = 10

# Интернет-соединение

if "internet" in results:

internet = results["internet"]

print(f"\n1. ИНТЕРНЕТ-СОЕДИНЕНИЕ: {internet['status']}")

print(f" - Ping: {internet['ping']}")

print(f" - HTTP: {internet['http']}")

if "ПОДКЛЮЧЕН" in internet["status"]:

total_score += 2

# Установленное ПО

if "software" in results:

software = results["software"]

print(f"\n2. УСТАНОВЛЕННОЕ ПО:")

print(f" - Антивирусы: {', '.join(software['antivirus'])}")

print(f" - Файрволы: {', '.join(software['firewalls'])}")

if software["antivirus"][0] != "Не обнаружено":

total_score += 2

if software["firewalls"][0] != "Не обнаружено":

total_score += 2

# Файрвол

if "firewall" in results:

firewall = results["firewall"]

print(f"\n3. МЕЖСЕТЕВОЙ ЭКРАН: {firewall['status']}")

if "РАБОТАЕТ" in firewall["status"]:

total_score += 2

elif "ЧАСТИЧНО" in firewall["status"]:

total_score += 1

# Антивирус

if "antivirus" in results:

antivirus = results["antivirus"]

print(f"\n4. АНТИВИРУС: {antivirus['status']}")

print(f"Тесты: {antivirus['working_tests']}/{antivirus['total_tests']}")

if "РАБОТАЕТ" in antivirus["status"]:

total_score += 2

elif "ЧАСТИЧНО" in antivirus["status"]:

total_score += 1

# Итоговая оценка

print(f"\n" + "=" * 70)

print("ИТОГОВАЯ ОЦЕНКА БЕЗОПАСНОСТИ")

print(f"ОЦЕНКА: {total_score}/{max_score} баллов")

if total_score >= 8:

print("УРОВЕНЬ БЕЗОПАСНОСТИ: ВЫСОКИЙ")

elif total_score >= 5:

print("УРОВЕНЬ БЕЗОПАСНОСТИ: СРЕДНИЙ")

else:

print("УРОВЕНЬ БЕЗОПАСНОСТИ: НИЗКИЙ")

print("Рекомендуется установить антивирус и включить файрвол!")

input("\nНажмите Enter для возврата в меню...")

# Сохранение отчета в файл

def save_report_to_file():

global results

if not results:

print("Нет данных для сохранения. Сначала выполните проверки.")

return

filename = f"security_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"

try:

with open(filename, "w", encoding="utf-8") as f:

f.write("ОТЧЕТ О ПРОВЕРКЕ БЕЗОПАСНОСТИ ПК\n")

f.write(f"Дата проверки: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")

f.write(f"Система: {platform.system()} {platform.release()}\n\n")

for check_name, check_data in results.items():

if check_name == "internet":

f.write("ИНТЕРНЕТ-СОЕДИНЕНИЕ:\n")

f.write(f"Статус: {check_data['status']}\n")

f.write(f"Ping: {check_data['ping']}\n")

f.write(f"HTTP: {check_data['http']}\n")

elif check_name == "software":

f.write("УСТАНОВЛЕННОЕ ПО:\n")

f.write(f"Антивирусы: {', '.join(check_data['antivirus'])}\n")

f.write(f"Файрволы: {', '.join(check_data['firewalls'])}\n\n")

elif check_name == "firewall":

f.write("МЕЖСЕТЕВОЙ ЭКРАН:\n")

f.write(f"Статус: {check_data['status']}\n")

elif check_name == "antivirus":

f.write("АНТИВИРУС:\n")

f.write(f"Статус: {check_data['status']}\n")

f.write(

f"Успешных тестов: {check_data['working_tests']}/{check_data['total_tests']}\n\n"

)

# Расчет оценки

total_score = 0

if "internet" in results and "ПОДКЛЮЧЕН" in results["internet"]["status"]:

total_score += 2

if "software" in results:

if results["software"]["antivirus"][0] != "Не обнаружено":

total_score += 2

if results["software"]["firewalls"][0] != "Не обнаружено":

total_score += 2

if "firewall" in results:

if "РАБОТАЕТ" in results["firewall"]["status"]:

total_score += 2

elif "ЧАСТИЧНО" in results["firewall"]["status"]:

total_score += 1

if "antivirus" in results:

if "РАБОТАЕТ" in results["antivirus"]["status"]:

total_score += 2

elif "ЧАСТИЧНО" in results["antivirus"]["status"]:

total_score += 1

f.write(f"ИТОГОВАЯ ОЦЕНКА: {total_score}/10 баллов\n")

if total_score >= 8:

f.write("УРОВЕНЬ БЕЗОПАСНОСТИ: ВЫСОКИЙ\n")

elif total_score >= 5:

f.write("УРОВЕНЬ БЕЗОПАСНОСТИ: СРЕДНИЙ\n")

else:

f.write("УРОВЕНЬ БЕЗОПАСНОСТИ: НИЗКИЙ\n")

f.write("\nОтчет сгенерирован программой проверки безопасности ПК\n")

print(f"Отчет сохранен в файл: {filename}")

except Exception as e:

print(f"Ошибка сохранения отчета: {e}")

input("\nНажмите Enter для продолжения...")

# Очистка экрана консоли

def clear_screen():

os.system("cls" if os.name == "nt" else "clear")

# Главный цикл программы

def main():

clear_screen()

print_header()

while True:

print_menu()

try:

choice = input("Выберите пункт меню (0-7): ").strip()

if choice == "0":

print("\nВыход из программы...")

break

elif choice == "1":

clear_screen()

check_internet_connection()

elif choice == "2":

clear_screen()

check_installed_software()

elif choice == "3":

clear_screen()

check_firewall_functionality()

elif choice == "4":

clear_screen()

check_antivirus_functionality()

elif choice == "5":

clear_screen()

run_all_checks()

elif choice == "6":

clear_screen()

show_detailed_report()

elif choice == "7":

clear_screen()

save_report_to_file()

else:

print("Неверный выбор. Попробуйте снова.")

time.sleep(3)

clear_screen()

print_header()

except KeyboardInterrupt:

print("\n\nПрограмма прервана пользователем.")

break

except Exception as e:

print(f"\nПроизошла ошибка: {e}")

time.sleep(2)

clear_screen()

print_header()

# Запуск программы

main()

Соседние файлы в предмете Методы и средства защиты информации в компьютерных сетях