Речь пойдёт про nsntrace. Это относительно простое приложение, которое, как я уже сказал, может собрать дамп трафика отдельного приложения. Для этого оно делает следующие вещи:
1️⃣ Создаёт отдельный network namespace для исследуемого приложения.
2️⃣ Для того, чтобы там был доступ в интернет, создаются виртуальные сетевые интерфейсы. Один в новом namespace, другой в основном. В новом используется шлюз из основного namespace. Из-за этой схемы у запускаемого приложения будет IP адрес виртуальной сети.
3️⃣ Средствами iptables трафик натится из виртуальной сети в реальную.
4️⃣ Запускает приложение в новом namespace и собирает его трафик с помощью libpcap. Результат сохраняет в обычный pcap файл.
Nsntrace есть в базовых репах Debian:
# apt install nsntraceСамый банальный пример, чтобы проверить работу:
# nsntrace wget google.comНа выходе получаем nsntrace.pcap, который можно посмотреть тут же, если у вас есть tshark:
# tshark -r nsntrace.pcapМожно и в режиме реального времени наблюдать:
# nsntrace -o - wget google.com 2> /dev/null | tshark -r -Помимо обычных приложений, снимать трафик можно и со скриптов:
# nsntrace php script.php# nsntrace python script.pyПроверим на простом python скрипте:
import requestsres = requests.get('https://ya.ru')Запускаем анализ сетевой активности:
# nsntrace python3 script.pyStarting network trace of 'python3' on interface eth0.Your IP address in this trace is 172.16.42.255.Use ctrl-c to end at any time.Finished capturing 57 packets.Смотрим:
# tshark -r nsntrace.pcapМожно передать .pcap на другую машину и посмотреть в Wireshark.
Удобный инструмент. Нужен не часто, но конкретно для скриптов мне реализация понравилась. Обычно это нетривиальная задача, посмотреть, куда он стучится и что делает. Нужно вычленять именно его запросы из общего трафика, а это не всегда просто. Либо трассировку работы делать, что тоже сложнее, чем просто воспользоваться nsntrace.
#network #perfomance