• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Пишем скрипт на тест веб ресурсов на все векторы атак

XSSBot

Форумный бот
Пользователь
Регистрация
31.12.2005
Сообщения
1 473
Реакции
898
Автор besenok
Статья написана для
Конкурса статей #10


awhvEpwiRUE.jpg


Всем привет, сегодня я хочу рассказать как я написал не большую программу, которая тестирует веб ресурсы на различные векторы атак, а так же собирает разного рода информацию о веб ресурсах.

Одна из необычных функций, это сбор со всего интернета сайтов по нашим ключевым словам( подходящей под эти слова тематикой) для проведения дальнейших атак. Брутфорс собранных таргетов, сбор почт, ддос, эксплоит пак, веб сканер, и готовые фишинговые письма. Но к этому мы вернемся чуть позже)

Весь код писан на java. Данная статья скорее больше походит не как туториал для новичков, а как рассказ о своем опыте написания подобных программ, и подробное описание что данная программа может делать. Основной идеей создания данного проекта было - держать все нужные скрипты и утилиты для работы в одном месте, имея разный спектр задач, и что бы программа служила своеобразным мультитулом.


Начнем с небольшого обзора что умеет данная программа:

Снимок экрана 2025-01-07 в 2.52.38.png


Есть 3 вида утилит: Database work, WEB attack, Phish attack


- Проверить базу(url) на валид
Тут все просто, передаем на вход список сайтов(site.com), и програма возвращает список сайтов которые возвращают код ответа 200, и где не стоит фаервол.


- Создать новую базу(парсинг)
- Создать новую базу(google dork + ключевые слова)

Тут мы будем парсить url сайтов, по нашим ключевым словам. На этом пункте остановимся по подробнее, я на скринах покажу что куда тыкать, и все остальные функции работают по аналогии. Отвечу сразу на вопрос, зачем если есть шодан, который сразу дает сайты с открытыми портами, службами и их версиями - шодан выдает уязвимые сервисы, но не определенно только сайты, можно конечно же указать в параметр поиска что бы был открыт порт 8080/80, но тематику таких сайтов указать к сожалению не получиться. Наша же программа с начало ищет подходящие сайты, и уже потом массово проверяет их на все возможные уязвимости.
Допустим нас интересуют сайты на тематику покупки игровых аккаунтов или же аккаунтов соц сетей. Для этого мы создаем 2 файла: в певром мы добавим ключевые слова такие как купить, приобрести, шоп, маркет и тд. А во втором мы добавим такие слова как телеграм, инстаграм, твитер, кс2, валорант и тд. Обратите внимание, что для примера я написал ключевые слова для поиска русскими буквами, для реального поиска они должны быть английскими(отсеить ру), а так же при старте парсинга рекомендуется добавить прокси(через настройки сети или проксифаер) или перекинуть весь трафик через тор. это улучшит поисковую выдачу и отсеит ру и снг!
Сам алгоритм создания базы ключей из 2 баз слов выглядит так(для примера на тематике крипты привел пример):

схема.png




Так же мы говорим хотим ли мы создать только базу ключей, или же сразу пройтись по ней и создать базу сайтов:

Снимок экрана от 2024-04-23 12-43-24.png




Потом вводим пути до наших файлов с ключевыми словами:

Снимок экрана от 2024-04-23 12-49-48.png




И путь куда запишется отсортированная и не отсортированная база:

Снимок экрана от 2024-04-23 12-50-27.png




При создании базы ключей, мы можем воспользоваться встроенной функцией добавления гугл дорков, допустим указать что нам нужны все вордпрес сайты, в которых есть на главной странице наши ключевые слова. И таким итогом у нас получиться база шопов на ворд пресс, заточенных на аккаунтах соц сетей и аккаунтов игр.


После сбора таргетов, мы можем закинуть их в nmap с плагином vulners - так просто удобнее, к списку портов, сервисов и их версий, добавляются еще и списки эксплойтов которые эксплотируют ту или иную уязвимость.

Снимок экрана от 2024-04-23 13-31-57.png




Далее можно по метасплойту найти подходящий экслоит, и пробовать раскрутить уязвимость:

Снимок экрана 2025-01-07 в 4.16.19.png

Снимок экрана 2025-01-07 в 4.16.36.png

Снимок экрана 2025-01-07 в 4.26.45.png





Или sqlmap для дальнейшей проверки на sql иньекцию:

photo1.png





Но я еще проверял особо интересные сайты с помощью zap:

photo_2025-01-07 04.05.05.jpeg

Снимок экрана от 2025-01-07 03-45-58.png

Снимок экрана от 2025-01-07 03-46-12.png



Вот пример как выглядят доступ после поного цикла сканирований и работы с найдеными уязвимостями - админка сайта генератора прокси. Он использовал api royal для генерации резедентных проски, которые можно было генерировать по гео, протоколу и таймингу работы:


photo_2025-01-07 04.05.02.jpeg




- Сортировать базу на CVE(выборка с nmap)
CVE (Common Vulnerabilities and Exposures) – база данных общеизвестных уязвимостей программного обеспечения, каждая запись которой имеет уникальный идентификатор.
Как только мы получили базу с url сайтов, у нас все готово для дальнейшей передачи в nmap со скриптом vulners для анализа открытых портов и запущенных служб и их версий на известные уязвимости, с последующей выдачей отчетов. Рекомендую отобрать валидные сайты заранее с помощью скрипта о котором говорил вышел. Дело в том, что мы парсим html ответ от duckduckgo, который содержит url сайтов, если сайт не доступен или на нем стоит фаервол, анализ с nmap может проходить дольше чем обычно, по этому рекомендуется отсеить мусорные сайты заранее что бы nmap не тратил на них время.
Для начала работы в данном направлении, нам стоит подробно ознакомиться с документацие nmap, благо это можно сделать на официальном сайте - nmap.org. Так же нам нужно скачать сам nmap и vulners(скрипт для анализа вывода nmap на на наличие уязвимостей конкретной службы). Скачать vulners и инструкцию по его установке можно найти на этом сайте - https://github.com/vulnersCom/nmap-vulners.
После этого txt фаил-ответ от nmap мы сортируем на только сайты где есть cve уязвимости с помощью нашей программы.

- Убрать все дубликаты с базы
Тут название говорит само за себя, просто чистим базы от дублирующихся записей.

- Создать базу(parse) из готовой базы
Тут мы просто передаем на вход готовую базу поисковых запросов, и парсим по ней тематические сайты.

- Сортировать базу по ключевым(конкретным) CVE || Службы/Версии
Если нам нужна конкретная служба и ее версия, то мы можем отсортировать ответ от nmap и получить фаил только с сайтами с интересующими уязвимостями.

- Перевод URL -> IP/IP+PORT
Передаем на вход фаил с url адресами сайтов, и на выходе получаем их ip(если не стоит фаервол и сайт отвечает на запросы), так же можем сразу указать к ip и порт. Это нужно для использования в дальнейшем для некоторых эксплойтов или для брутфорса ssh.

- Обьеденить фаилы в один общий
Просто обьединяет несколько файлов в один, что бы не держать несколько бд одной тематики разными файлами.

- Проверить какой движок у сайтов
Отправляет запросы на все сайты из бд, и смотрит на ответы присущие сайтам стоящих на популярных движка, таких как wordpress, magento, opencart и тд. Далее получившийся фаил можно передать в WPScan, и эта утилита сама проверит ресурс на все известные уязвимости присущие сайтам на вордпрессе(в частности плагины).

- Exploit pack
Exploit pack – набор эксплойтов (программные средства для использования уязвимостей), которые могут быть использованы для тестирования систем или приложений.
На этой функции остановимся по подробнее. Реализована проверка на такие уязвимости как: Apache, Cosmo Sting, Log4J, Magento, OpenCart, WP Plugin. На вход программы подается список сайтов, и каждый сайт в несколько потоков проверяется на выше перечисленные уязвимости, если такие находятся то, данные записываются в отдельный фаил. Далее этот фаил отрабатывается через метасплоит например. Вы можете добавить свои эксплоит в виде отдельного джава класса, и выделить под него поток передавая по строчно url адреса из своей базы, либо же убрать какой либо не нужный вам уже реализованный эксплоит.

- Легкий Bruteforce SSH
Bruteforce – метод подбора паролей к удалённому серверу путём перебора возможных комбинаций логинов и паролей до нахождения верного сочетания.
На вход подаются как раз таки ip адреса сайтов, которые мы получили использую прошлую функцию, либо же передаются просто url адреса. Программа сама проверит доступные сайты, открыт ли ssh на 21 порту, и запустит перебор по самым распространенным логинам и паролям. Тут хочу сказать, что перебор идет используя массивы с этими логинами и паролями, а не отдельные ваши файлы. Более того изначально перебор осуществлялся используя локальные файлы с лог/пасс который находился прямо в корневой папке проекта, но ос линукс упорно их не видели(в гпт и стаковерфло смотрел уже, ничего не помогло пификстить кроме данного костыля))), по этому там стоит костыль из 2 массивов, можно либо же добавлять нужные дополнительные вам пароли и логины в них, либо же если у вас вин/мак реализовать заполнение массивов по вашим файлам. В будущем реализую выбор: перебор по штатным массивам, либо же перебор по данным от пользователя.
Реализован перебор пулом потоков - то есть, вы передаете url адреса, говорите сколько потоков выделить и скольо адресов в 1 поток передать. Дело в том, что на некоторых ресурсах стоит ограничение по времени, между вводимыми логином и паролем, и что бы это обойти, мы можем не разово по каждому ресурсу проходится нашими списками лог/пасс, а в каждом потоке допустим брать по 40 адресов и к каждому лог/пассу передавать url. Из за времени на перебор, пока мы заново на новой связке лог/пасса додйдем до первого url из базы, там уже пройдет таймаут на новую попытку входа. Ну или просто под количество url выделить количество потоков и разово перебрать всю базу(1500 комбинаций перебируться в среднем чуть больше чем за час).

- Легкая DDOS атака (L4/L7)
DDoS (Distributed Denial of Service) — это вид атаки, направленной на то, чтобы сделать сайт, сервис или систему недоступными для пользователей путем перегрузки их запросов.
L4 DDoS атаки: направлены на сетевой уровень (уровень 4 модели OSI), такие как SYN-флуд, UDP-флуд и другие атаки, использующие протоколы TCP/UDP.
L7 DDoS атаки: нацелены на прикладной уровень (уровень 7 модели OSI) и имитируют действия реальных пользователей для перегрузки серверных ресурсов, например, HTTP-флуд.
Релизованы L4/L7 методы для проведения стресс тестов веб ресурсов(самые простые): DNS, FTP, GET, POST, URL. Средненькие сайты на не самом мощном железе(я тестил на стареньком маке) ложились в течении 10 минут. Атака идет в несколько потоков одновременно - вы можете сами указать их количивство в зависимости от конфигурации вашего пк. Усредненное значение написано к каждому методу в комментариях в исходниках. Так же рекомендуется поставить либо прокси, либ перекинуть весь трафик через тор, что бы ваш реальный ip адрес не попал в блек листы.

- Узнать IP сайта в обход WAF
Простой перевод перевод url сайта или файла с url и их поддоменов в ip. А именно базовый перевод в ip, проверка dns, чек по сайту viewdns.info, чек NS записей. Так же если на сайте стоит фаервол, программа нас уведомит об этом.

- Легкая проверка базы на SQL-Injection, XSS, XXE, SSTI, CSRF, Full Web Scanner
SQL-инъекция (SQL Injection) – тип атаки, при котором злоумышленник вводит вредоносный SQL-код в запросы к базе данных для выполнения нежелательных действий, таких как получение конфиденциальной информации или изменение данных.
XSS (Cross-Site Scripting) – атака, когда злоумышленник внедряет вредоносный скрипт в веб-страницу, который выполняется в браузере пользователя, что может привести к краже cookies, перенаправлению на фишинговые сайты и другим угрозам.
XXE (XML External Entity) – уязвимость, связанная с неправильным использованием XML-парсеров, позволяющая злоумышленнику получить доступ к файлам на сервере или осуществить другие виды атак.
SSTI (Server-Side Template Injection) – внедрение кода в шаблоны серверных приложений, что позволяет злоумышленникам выполнять произвольный код на стороне сервера.
CSRF (Cross-Site Request Forgery) – атака, при которой злоумышленник заставляет пользователя отправить запрос от его имени без ведома последнего, что может приводить к выполнению нежелательных действий на сайте.

Расписывать за каждую из этих уязвимостей думаю смысла нет, скажу лишь что реализована базовая проверка, это упрощает общий чек всех сайтов, но при дальнейшей эксплотации нужно будет воспользоваться инструментом по мощнее, таким как zap/sqlmap/окунь. Данный функционал реализван для отбора самых слабых ресурсов. Но стоит отметить что та же sql иньекция проверяет через пост гет запросы, юзер агент, куки. Имеет несколько стандартных пайлаудов для иньекции. И проверка на каждую уязвимоть проверяется в отдельном потоке для каждого url, это ускоряет перебор всей базы.

- Проверка базы сайтов на скрытые директории
Проверят все сайты из базы на скрытые директории, которые не должны быть видны пользователю(которые раскрывают информацию о сервере и тд, которую пользователю не желательно видеть и тд). Делается для первичной веб разведки, эта информация может значительно помочь при дальнейшем выборе вектора атаки.

- Легкая проверка открытых портов
Проверка именно на распространенные порт, и службы которые чаще всего на них расположены, важно что нет чека ответов с этих портов и не выводиться информация о их версиях! Данный метод подходит что бы отсеить только сайты с определенным открытым портом(каким нибудь не стандартным, в пример где mysql слушает порт), для дальнейшего анализа в более мощной программе, например в nmap.

- JS Редирект на exe
Данная функция служит одним из способов монетизации полученных доступов. Способ стар как мир, но все еще работает) Имеет смысл ставить только по большей части на мусорные сайты, но с большими посещениями в сутки, тк рано или поздно(рано) администрация сайта пропалит вредоносный код по жалобам пользователей и это вопрос только времени. Перейдем к сути данной функции - через админку сайта или по доступу по ssh в исходники сайта на главную страницу добавляется js код, который проверяет, если пользователь не из рф, и при этом он посетил сайт с пк на виндовс, то с помощью модального окна, перекроется все содержимое сайта, и уведомляет пользователя что у него старая версия браузера/устаревший ssl сертификат/уязвимая js библиотека браузера. И ему срочно нужно установить патч в виде exe файла. При этом все остальные действия на сайте будут блокироваться, пока не будет скачен и установлен exe файл - котрый можно поставить либо локально на сервер, либо по url адресу. Так же реализована промежуточная проверка на бота - просто пользователя попросит подтвердить что он не бот, и откроется окно с уведомлением.

- Парсинг сайтов на почты
Функция, которая собирает всю контактную информация с базы url сайтов. Отлично подойдет для дальнейшей фишинговой компании, спама.

Вот прмер готовой базы почт, после отработки программы по всем url:

Так же монетизировать можно эту программу собирая такие базы на заказ. Главный плюс этой функции, что почты только админов/владельцев сайтов, едина тематика всей базы, валидность.

Снимок экрана 2025-01-07 в 4.44.42.png


- Сбор информации с лога

Функция служит для фишинговой компании, в чем суть: на вход передается папка с логами со стиллера(которые уже отработаны месяца как 2-3), и программа составляет json фаил, в котором содержится почта и лог/пасс от популярных сервисов. И в дальнейшем идет спам по этим почтам в которых говориться что были найдены в публичном доступе данные пользователя(и для убедительности прикрепляем его старые лог/пасс из нашего файла) и говорим что с его ip адреса происходили вредоносные запросы, и скорее всего до сих пор на его пк стоит вредонос который без его ведома управляет его пк. И под этим предлогом предлагаем пользователю установить патч из вложения или из нашего сайта.

- Сбор конкретного сервиса с лога
Так же передаем на вход папку со всеми логами, указываем с какого файла собирать информацию(например со всех файлов Passwords.txt), и указываем поисковой запрос(например фейсбук, гугл, инста и тд). И после перебора всех логов в консоли отобразятся все url/лог/пасс со всех логов.

- Примеры писем с отчетом о WEB attack
Тут реализованы готовые примеры писем, для отправки отчетов с найденными уязвимостями. А именно что это за уязвимость, какие последствия могут быть при ее эксплотации, и предложение ее продемонстрировать. Такие виды как: SQL-Injection, XSS, XXE, SSTI, CSRF, Apache, Cosmo Sting, Log4J, Magento, OpenCart, WP Plugin. Примеры писем читаются не с файлов, а с переменных, и добавляются такие данные как, сайт, компания и имя так. Дело в том, что линукс не видел текстовые файлы из проекта, и пришлось поставить такой костыль( Если у вас виндовс/мак вы можете реализовать чтение из тхт файлов(они находятся в корневом разделе проекта). Отлично подойдет для белой монетизации данной программы, тк мы предлагаем устранить уязвимость и не эксплотируем ее, а очты для рассылки с предложением продемонстрировать уязвимость можно собрать с помощью скрипта о котором говорил выше и указать сбор url+почта.

- Примеры фишинговых писем с вложением
Распишу просто готовые письма по тематике: предложение по переносу сайта на наш хостинг, предложение о сотрудничестве, принятие новой политики конфиденциальности, срочное предложение о сотрудничестве, подключение нового SSL сертификата, подтверждение права владения доменным именем. В конце каждого письма подводиться предложение просмотреть вложение или перейти на сайт.

- Составить красивое HTML письмо

На вход передается текст (но отступы и перенос строки должны быть в формате <br>), и на выходе получим красивый html фаил. Который можно прикрепить к письму, для более красивого официального стиля.



Монетизировать данный скрипт можно если вы умеете работать с скюлмапом, метасплойтом, либо с эксплоитами с гитхаба. Либо же сбрутить доступ, либо же его зафишить, устроить стресс тест. Программа дает множество различных векторов для тестирования веб ресурсов.

Могу сказать, что с полученных доступов можно взять бдшки сайтов, поставить снифер на шопы, дрейнеры прямо на главную страницу официального ресурса, редирект на стиллер.
Так же есть и белый способ монетизации - просто пройтись по базе сборщиком почт, и на все уязвимые ресурсы разослать письма с предложение продемонстрировать уязвимость на их сайте, если администрация согласна то уже проводиться полный аудит в начале данной программой, а потом инструментами по мощнее.
Так же хочу выделить функцию со сбором почт с сайтов. Данные базы будут содержать только корпоративные почты определенной тематики - только администрации и владельцев проектов. Даже 2-3 лога такого формата будут на вес золота - люди платеже способные(палка/крипта/бдшки), дальнейшее продвижение фишингом по "теплым контактам", дальнейшее распространение по администрируемым ресурсам, и тд. Либо же сбор подобных почт на заказ.
И брутфорс - очень много ресурсов(особенно по чему то на веб движках по типу вордпресс), используют очень слабые пароли на ssh доступ. Как монетизировать такие доступы я отписал выше)

Так же есть идея создать либо собственное веб приложение/телеграм бота. Который бы имел весь функционал данной программы, и предоставлял бы ее пользователю доступ к ней, без установки на свой пк ии использование его вычеслительной мощности для работы и сбора бд. Если вам зайдет данная программа, то в будующем будет реализация веб/тг интерфейса, и поддержка имеющихся функции и разработка новых с учетом ваших пожеланий)
 

Вложения

  • CatLiTools.zip
    531.4 КБ · Просмотры: 202
Последнее редактирование модератором:
на винде были тесты? некоторые модулей не ворк, мб я насрал с компиляцией

а вообще, статья полезная, даже для фулл новичка в этой сфере, можно на основе твоих модулей изучать базовые принципы :smile10:
 
Вот хорошая статья, исходники есть, описание есть, даже идея неплохая, написано лаконично - НО почему JAVA то? Ну на с/с++, python ,qt, golang на крайняк - я бы понял. Может я что то не так понимаю и исходники можно компильнуть для андройда?А если в общем то рад больше подобных статей видеть, автор молодец.
 
Было бы лучше, если бы автор предоставил инструкции по настройке этого скрипта, но я постараюсь объяснить ниже.


Перед сборкой приложения CatLiTools убедитесь, что у вас установлены следующие инструменты:
  • Java JDK 11 или новее
  • Maven (версия 3.6.0 или новее)
Код с оформлением (BB-коды):
cd CatLiTools

Шаг 2: Исправление файла POM.xml​


В файле POM.xml по умолчанию могут отсутствовать некоторые зависимости. Замените содержимое файла следующим:

XML:
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company</groupId>
    <artifactId>CatKit</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.7.0</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.15</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.9.0</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/org.fusesource.jansi/jansi -->
        <dependency>
            <groupId>org.fusesource.jansi</groupId>
            <artifactId>jansi</artifactId>
            <version>2.4.0</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.15.3</version>
        </dependency>
       
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>
       
        <dependency>
            <groupId>dnsjava</groupId>
            <artifactId>dnsjava</artifactId>
            <version>3.3.1</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/org.jline/jline -->
        <dependency>
            <groupId>org.jline</groupId>
            <artifactId>jline</artifactId>
            <version>3.26.3</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/org.pcap4j/pcap4j-packetfactory-static -->
        <dependency>
            <groupId>org.pcap4j</groupId>
            <artifactId>pcap4j-packetfactory-static</artifactId>
            <version>1.8.2</version>
        </dependency>
       
        <!-- https://mvnrepository.com/artifact/org.pcap4j/pcap4j-core -->
        <dependency>
            <groupId>org.pcap4j</groupId>
            <artifactId>pcap4j-core</artifactId>
            <version>1.8.2</version>
        </dependency>
       
        <dependency>
            <groupId>com.icegreen</groupId>
            <artifactId>greenmail</artifactId>
            <version>1.6.6</version>
        </dependency>
       
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>
    </dependencies>
   
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
           
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>ui.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Шаг 3: Сборка проекта​


Выполните следующую команду для сборки проекта:

Код с оформлением (BB-коды):
mvn clean package

Шаг 4: Найдите собранный JAR-файл​


После успешной сборки вы найдете исполняемый JAR-файл в директории target:

Код с оформлением (BB-коды):
target/CatKit-1.0-SNAPSHOT-jar-with-dependencies.jar


Шаг 5: Запуск приложения​


Вы можете запустить приложение с помощью следующей команды:

Код с оформлением (BB-коды):
java -jar target/CatKit-1.0-SNAPSHOT-jar-with-dependencies.jar

Распространенные проблемы и их решения

1. Отсутствует зависимость Commons Net
Ошибка: package org.apache.commons.net.ftp does not exist
Решение: Убедитесь, что зависимость commons-net правильно указана в файле POM с правильным groupId: commons-net

2. Maven не может загрузить зависимости
Ошибка: Could not find artifact commons-net:commons-net:jar:3.9.0 in central
Решение: Попробуйте использовать флаг -U, чтобы принудительно обновить зависимости:

Код с оформлением (BB-коды):
mvn clean package -U

3.Проблемы с версией Java
Ошибка: Java compiler level does not match the version of the installed Java project facet
Решение: Убедитесь, что версия вашего JDK соответствует конфигурации в файле POM (в данном случае JDK 11).
 
Было бы лучше, если бы автор предоставил инструкции по настройке этого скрипта, но я постараюсь объяснить ниже.


Перед сборкой приложения CatLiTools убедитесь, что у вас установлены следующие инструменты:
  • Java JDK 11 или новее
  • Maven (версия 3.6.0 или новее)
Код с оформлением (BB-коды):
cd CatLiTools

Шаг 2: Исправление файла POM.xml​


В файле POM.xml по умолчанию могут отсутствовать некоторые зависимости. Замените содержимое файла следующим:

XML:
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
         xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company</groupId>
    <artifactId>CatKit</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.7.0</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.15</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.9.0</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.13</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.fusesource.jansi/jansi -->
        <dependency>
            <groupId>org.fusesource.jansi</groupId>
            <artifactId>jansi</artifactId>
            <version>2.4.0</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.15.3</version>
        </dependency>
      
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>
      
        <dependency>
            <groupId>dnsjava</groupId>
            <artifactId>dnsjava</artifactId>
            <version>3.3.1</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10.1</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.jline/jline -->
        <dependency>
            <groupId>org.jline</groupId>
            <artifactId>jline</artifactId>
            <version>3.26.3</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.pcap4j/pcap4j-packetfactory-static -->
        <dependency>
            <groupId>org.pcap4j</groupId>
            <artifactId>pcap4j-packetfactory-static</artifactId>
            <version>1.8.2</version>
        </dependency>
      
        <!-- https://mvnrepository.com/artifact/org.pcap4j/pcap4j-core -->
        <dependency>
            <groupId>org.pcap4j</groupId>
            <artifactId>pcap4j-core</artifactId>
            <version>1.8.2</version>
        </dependency>
      
        <dependency>
            <groupId>com.icegreen</groupId>
            <artifactId>greenmail</artifactId>
            <version>1.6.6</version>
        </dependency>
      
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20210307</version>
        </dependency>
    </dependencies>
  
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.13.0</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
          
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>ui.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Шаг 3: Сборка проекта​


Выполните следующую команду для сборки проекта:

Код с оформлением (BB-коды):
mvn clean package

Шаг 4: Найдите собранный JAR-файл​


После успешной сборки вы найдете исполняемый JAR-файл в директории target:

Код с оформлением (BB-коды):
target/CatKit-1.0-SNAPSHOT-jar-with-dependencies.jar


Шаг 5: Запуск приложения​


Вы можете запустить приложение с помощью следующей команды:

Код с оформлением (BB-коды):
java -jar target/CatKit-1.0-SNAPSHOT-jar-with-dependencies.jar

Распространенные проблемы и их решения

1. Отсутствует зависимость Commons Net
Ошибка: package org.apache.commons.net.ftp does not exist
Решение: Убедитесь, что зависимость commons-net правильно указана в файле POM с правильным groupId: commons-net

2. Maven не может загрузить зависимости
Ошибка: Could not find artifact commons-net:commons-net:jar:3.9.0 in central
Решение: Попробуйте использовать флаг -U, чтобы принудительно обновить зависимости:

Код с оформлением (BB-коды):
mvn clean package -U

3.Проблемы с версией Java
Ошибка: Java compiler level does not match the version of the installed Java project facet
Решение: Убедитесь, что версия вашего JDK соответствует конфигурации в файле POM (в данном случае JDK 11).

Я вчера потратил около 5 часов, но так и не смог побороть все ошибки при компиляции. Проблемы с зависимостями, то с одной, то с другой. Чистил руками кэш, устанавливал вручную, код перелопатил пять раз - ничего не вышло. И не помогло ничего из того, что ты указал выше. Как понимаю из GPT.
Я с Джавой не сталкивался как-то раньше, но если у тебя получилось собрать и запустить, мог бы ты скинуть готовый проект в ПМ? (Будет ли он работать в таком случае?)
JDK, Maven стоит.

P.S. Автору респект. Хороший проект, хорошая идея, и вероятно хорошая реализация. Ты не думал его перенести на Python? Если это возможно конечно.
 
Наверное лучше сразу тут прикрепить скомпилированный проект, что бы люди не мучились с сурсами) Оставлю здесь http://**************************************************************/d/6HtCM0ZZdenOpzVxuCNSjt тогда jar фаил(сборка на 11 джаве), вам останется только убедится что у вас стоит jdk 11+, командой: java -version. И вы можете запустить проект из терминала командой: java -jar ваш/путь/к/файлу.jar
 

Вложения

  • sk.png
    sk.png
    74.5 КБ · Просмотры: 60


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх