Я хотел поделиться проектом, над которым работал в последнее время
Я часто сталкивался с ситуацией, когда мне нужно было узнать, куда именно конкретное 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
