- •Курсовая работа
- •«Методы и средства защиты информации в компьютерных сетях»
- •Задание на курсовую работу
- •Введение
- •1. Разработка и описание комплексной системы проверки средств защиты безопасности пк
- •1.1. Постановка задачи
- •1.2. Описание основных алгоритмов модулей в виде блок-схем
- •1.3. Программная реализация алгоритмов модулей
- •1.4. Результаты работы программы
- •Заключение
- •Список использованных источников
- •Приложения
Список использованных источников
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()
