Filterforge сделает за человека всю грязную работу с трафиком.

Инженеры из Cloudflare выложили в открытый доступ необычный инструмент: он умеет буквально «угадать», какой сетевой пакет пройдёт через фильтр, и собрать его с нуля.
Проект получил название filterforge. Утилита написана на Python и рассчитана на разбор байткода Berkeley Packet Filter – механизма, который используют для фильтрации сетевого трафика в системах анализа, сетевых устройствах и даже вредоносных программах. Обычно такой код выглядит как набор непонятных инструкций, но filterforge превращает его в читаемый вид.
Инструмент анализирует условия фильтра, затем с помощью решателя ограничений вычисляет, какие параметры пакета удовлетворят всем проверкам. После этого формирует полноценный сетевой пакет, который гарантированно пройдёт через заданный фильтр. Речь идёт не о теории: на выходе получается готовый пакет с уровнями Ethernet, IP, TCP или UDP, который можно сохранить, изучить или отправить в сеть.
Подобный подход может заметно упростить разбор вредоносных программ и сетевых фильтров. Например, если злоумышленники используют сложные правила для маскировки трафика, filterforge помогает быстро понять, какой именно пакет пропускает фильтр. Такой же сценарий подходит для анализа правил захвата трафика и отладки сетевых систем.
Утилита поддерживает разные форматы входных данных. Можно передать байткод в виде строки шестнадцатеричных значений или массива чисел. Есть режим, который показывает только разбор инструкций, и режим, который сразу генерирует подходящий пакет. При необходимости можно задать параметры вручную – например, IP-адреса или порты.
Разработчики предусмотрели и программный интерфейс. Через него можно встроить инструмент в собственные сценарии анализа, автоматически сохранять пакеты в файлы перехвата или отправлять их напрямую в сеть. Для работы с «сырыми» IP-пакетами предусмотрен отдельный режим без заголовка Ethernet.
Согласно описанию, некоторые фильтры возвращают только одно значение вместо привычной пары «разрешить или отклонить». В таких случаях решатель не может найти корректный путь. Разработчики предлагают обходной вариант – вручную добавить недостающую инструкцию, чтобы инструмент смог корректно построить пакет.