Частично реализованное веб-приложение для сканирование портов указанного хоста. Приложение состоит из основных двух независимых частей:
- NMap wrapper (Altx.PortScanner.Nmap и Altx.PortScanner.Nmap.XmlSchemeModels);
- Клиент-серверное приложение.
Данные проекты были попыткой сделать типизированную обертку над nmap-ом. Основным классом является NmapEngine, реализующий сканирование. Предполагалось внедрять его в основном клиент-серверном приложении через Dependency injection и использовать ну уровне Application. В классах папки Inputs проводится валидация значений входных параметров до передачи в nmap. По тексту кода в комментариях оставлены пометки TODO, в некоторых из которых я описываю как можно улучшить тот или иной момент реализации.
Данное приложение состоит из следующих проектов:
- Altx.PortScanner.Domain - реализация правил доменной области, валидация данных и операций.
- Altx.PortScanner.Domain.Shared - Константы, локализация, коды ошибок и т.д.
- Altx.PortScanner.EntityFrameworkCore - Слой доступа к БД. Помимо прочего, реализует репозиторий.
- Altx.PortScanner.Application.Contracts - Уровень приложения и его контракты, конкретные use-cases.
- Altx.PortScanner.Application - Реализация контрактов уровня приложения. В данном проекте предполагалось реализовать сервис, который бы использовал Nmap wrapper и проводил проверку портов. Также предполагалось через отдельную фоновую службу реализовать периодическую проверку и запуск в работу новых задач на сканирование портов.
- Altx.PortScanner.Web - Сбор всех зависимостей, регистрация служб, пользовательский интерфейс. Не успел реализовать. Для работы необходимо заполнить в appsettings.json connection string для базы данных.
- Altx.PortScanner.DbMigrator - Специальное консольное приложение, которое при запуске проводит инициализацию базы данных. Необходимо заполнить в appsettings.json connection string для базы данных.
Приложение реализовано так, что изменение реализации инструмента сканирования (напр. изменения в Nmap wrapper или вообще смена инструмента сканирования на другой) окажет контролируемое влияние только на application layer. Также были разделены доменная модель и модель представления, что также позволяет контролировать изменения в них на их стыке (в application).
Как упоминалось выше, предполагалось в Application layer использовать Nmap wrapper для реализации задачи сканирования. Запуск этой службы можно было бы реализовать разными способами, я склоняюсь к периодическому запуску задачи в BackgroundWorker в Altx.PortScanner.Web или к использованию Quartz.NET.