Дамп сетевого трафика одного приложения (strace-like)

11

Я ищу способ дампа pcap сетевых данных, сгенерированных приложением, по аналогии с дампами straceсистемных вызовов и т. Д. Например:

net-strace somecommand -args

somecommandбудет делать что-то по сети и net-straceсохранит дамп pcap всего трафика, генерируемого этим приложением (+ ответы и связанный трафик).

Можно ли этого достичь?

gesti
источник
Проблема в том, что приложения не отправляют пакеты (кроме тех, которые используют необработанные сокеты, такие как ping), но используют сетевой API, который заставляет ядро ​​отправлять пакеты (и получать связанные) от их имени.
Стефан Шазелас
Да, но есть приложения (например, proxychains - proxychains.sourceforge.net ), которые запускают все данные приложений через прокси. Не знаю, как они это делают, но они могут перехватить его и отправить через прокси. Может быть, если есть простой прокси-сервер (запускаемый локально), который может создавать дамп pcap, для получения дампа может быть использована комбинация proxychains + proxy.
Gesti
Они скорее угоняют API (с LD_PRELOAD), чем пакеты. Сказав это, можно было бы внедрить некоторое количество setsockopt (SO_MARK) в приложения и использовать netfilter для записи пакетов в ulog.
Стефан Шазелас
3
Создайте новое пространство имен сети для приложения и перехватывайте весь трафик, что может быть приемлемым подходом для некоторых случаев использования.
Стефан Шазелас

Ответы:

3

Как насчет использования самого strace?

strace -f -e trace=network -o output_file -s 10000 somecommand -args
Кристиан Лонг
источник
Появившаяся командная строка отображает только запросы DNS. -eопция strace часто не выбирает то, что вы на самом деле хотите.
Робин Грин,
2

Вы можете сбросить сгенерированный приложением трафик разными способами:

Если вы знаете порты, которые использует приложение, вы можете запустить tcpdump или wireshark с конкретными правилами фильтрации для этих портов.

Если это не вариант, вы можете пометить пакеты приложения, используя правило iptables , соответствующее владельцу процесса. Возможно, вам придется создать новую учетную запись пользователя, чтобы полностью изолировать процесс. Затем вы можете захватить трафик, который соответствует только правилу.

Вы можете найти более полную информацию по этой теме: /ubuntu/11709/how-can-i-capture-network-traffic-of-a-single-process

Вы также можете найти интересную эту программу tracedump, как указано в предыдущей теме. http://mutrics.iitis.pl/tracedump

almlys
источник