Я хотел поделиться проектом, над которым работал в последнее время
Я часто сталкивался с ситуацией, когда мне нужно было узнать, куда именно конкретное Linux приложение отправляет свой сетевой трафик. Чаще всего мне нужно было получить список IP адресов определённого сервиса или сайта, чтобы добавить их в раздельное туннелирование VPN (split tunneling). Я знаю про такие инструменты, как ss или Wireshark, но мне просто хотелось быстро решить свою проблему, не тратя кучу времени на анализ пакетов со всего ядра
Возможно, уже существуют альтернативы, о которых я не знаю, но поскольку я в любом случае давно хотел глубже погрузиться в системное программирование и сетевку Linux, я решил, что создание такого инструмента с нуля будет хорошим решением
В целом, это программа на C++, которая отслеживает сетевую активность конкретного Linux приложения и показывает его трафик к удалённым IP адресам. Она работает на двух бэкендах: Socket Diag и eBPF
Можно указать конкретный PID или напрямую передать имя процесса (что обычно гораздо удобнее). В выводе можно просматривать информацию о сокетах или же трафик в реальном времени: удалённые IP адреса, переданный и полученный трафик TX/RX в KiB (а также текущую скорость), логи соединений и логи DNS запросов
Всю сессию мониторинга также можно сохранить в .json файл
Утилита работает напрямую через хуки Linux Kernel, на бекенде нет никакого ss и подобных программ
Недавно я дошёл до момента, когда основной функционал кажется практически завершённым, поэтому решил поделиться проектом здесь
Буду очень благодарен за любые отзывы или предложения от людей, которым подобный инструмент может оказаться полезен
Спасибо, что прочитали <3
GitHub – https://github.com/Stelour/flowray
Source: r/RuProgrammers · by /u/falter190
