Skip to content
DnsLister Forum

Where domain hunters compare notes

Анализатор сетевой активности приложений Linux

https://preview.redd.it/o03ohi55huwh1.png?width=1280&format=png&auto=webp&s=dbb9eaf3da6973dbd3defab5d9937d021b5a6ed1

Я хотел поделиться проектом, над которым работал в последнее время

Я часто сталкивался с ситуацией, когда мне нужно было узнать, куда именно конкретное Linux приложение отправляет свой сетевой трафик. Чаще всего мне нужно было получить список IP адресов определённого сервиса или сайта, чтобы добавить их в раздельное туннелирование VPN (split tunneling). Я знаю про такие инструменты, как ss или Wireshark, но мне просто хотелось быстро решить свою проблему, не тратя кучу времени на анализ пакетов со всего ядра

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

В целом, это программа на C++, которая отслеживает сетевую активность конкретного Linux приложения и показывает его трафик к удалённым IP адресам. Она работает на двух бэкендах: Socket Diag и eBPF

Можно указать конкретный PID или напрямую передать имя процесса (что обычно гораздо удобнее). В выводе можно просматривать информацию о сокетах или же трафик в реальном времени: удалённые IP адреса, переданный и полученный трафик TX/RX в KiB (а также текущую скорость), логи соединений и логи DNS запросов

Всю сессию мониторинга также можно сохранить в .json файл

Недавно я дошёл до момента, когда основной функционал кажется практически завершённым, поэтому решил поделиться проектом здесь

Интересно, пользуется ли кто-нибудь похожими инструментами для мониторинга отдельных процессов? Буду рад обратной связи, особенно по работе eBPF бэкенда и возможным проблемам на разных дистрибутивах.

Спасибо, что прочитали <3

GitHub – https://github.com/Stelour/flowray

Source: r/ru_linux · by /u/falter190

Leave a Reply

Your email address will not be published. Required fields are marked *