Mallet – это инструмент для создания прокси для произвольных протоколов, аналогичный тому, который используется для перехватывающих веб-прокси, но более общий.
Он построен на основе Netty и в значительной степени опирается на концепцию конвейера Netty, которая позволяет графически собирать графики обработчиков.
В мире Netty экземпляры обработчика предоставляют разграничение кадров (то есть, где начинается и заканчивается сообщение), декодирование и кодирование протокола (преобразование потока байтов в объекты Java и обратно или преобразование потока байтов в другой поток байты – считать сжатие и декомпрессию) и логику более высокого уровня (фактически что-то делает с этими объектами).
Следуя тщательному разделению кодеков с обработчиками, которые фактически манипулируют сообщениями, Mallet может извлечь выгоду из большой библиотеки существующих кодеков и избежать повторной реализации многих протоколов.
Последний фрагмент головоломки предоставляется обработчиком, который копирует сообщения, полученные по одному конвейеру, в другой конвейер, проксируя эти сообщения до их конечного адресата.
Конечно, хотя сообщения и находятся в Mallet, их можно легко подделать либо с помощью пользовательских обработчиков, написанных на Java, либо с помощью языка скриптов, совместимого с JSR-223, либо вручную, используя один из предоставленных редакторов.
Сборка Mallet
Mallet использует Maven, поэтому компиляция кода является следующим
mvn package
Чтобы запустить его:
cd target/ java -jar mallet-1.0-SNAPSHOT-spring-boot.jar
В каталоге examples / приведены несколько примеров графиков. Графики JSON ожидают, что клиент JSON подключится к Mallet на localhost: 9998 / tcp, с реальным сервером на localhost: 9999 / tcp.
Только последний график JSON (json5.mxe) делает любые предположения о структуре передаваемых сообщений JSON, поэтому они должны быть применимы к любому приложению, которое отправляет сообщения JSON.
На demo.mxe показан сложный граф с двумя конвейерами, как TCP, так и UDP.
Конвейер TCP построен для поддержки HTTP и HTTPS на портах 80 и 443 соответственно, а также в WebSockets при передаче любого другого трафика непосредственно в пункт назначения.
Конвейер UDP построен для обработки DNS-запросов на localhost: 1053 / udp, заменяет запросы для google.com с запросами на www.sensepost.com и перенаправляет запросы на DNS-серверы Google.