Я хотел бы изучить сетевой трафик, обрабатываемый одним процессом, но простой захват сети не будет работать, поскольку я имею дело с такой загруженной системой (много другого трафика происходит одновременно). Есть ли способ изолировать tcpdump
или wireshark
захватить сетевой трафик одного конкретного процесса? (Использование netstat
недостаточно.)
источник
netstat
и простые фильтры захвата сети на занятой машине.netstat
; Я смогу ловить только долгоживущие связи. :(Чтобы запустить и контролировать новый процесс:
Для мониторинга существующего процесса с известным PID:
-f
для "следить за новыми процессами"-e
определяет фильтр-s
устанавливает предел строк более 32-p
принимает идентификатор процесса для подключения кисточник
Я знаю, что эта ветка немного старая, но я думаю, что это может помочь некоторым из вас:
Если ваше ядро позволяет это сделать, захват сетевого трафика одного процесса очень легко выполнить, запустив указанный процесс в изолированном сетевом пространстве имен и используя wireshark (или другие стандартные сетевые инструменты) в указанном пространстве имен.
Настройка может показаться немного сложной, но как только вы поймете ее и познакомитесь с ней, она значительно облегчит вашу работу.
Чтобы сделать так:
создать тестовое сетевое пространство имен:
создайте пару виртуальных сетевых интерфейсов (veth-a и veth-b):
изменить активное пространство имен интерфейса veth-a:
настройте IP-адреса виртуальных интерфейсов:
настройте маршрутизацию в тестовом пространстве имен:
активируйте ip_forward и установите правило NAT для пересылки трафика, поступающего из созданного вами пространства имен (необходимо настроить сетевой интерфейс и IP-адрес SNAT):
(Вы также можете использовать правило MASQUERADE, если хотите)
наконец, вы можете запустить процесс, который вы хотите проанализировать, в новом пространстве имен, а также wireshark:
Вам придется следить за интерфейсом veth-a.
источник
socat
.--to-source
аргументаiptables
? Это IP-адрес интерфейса, который вы передаете-o
опции, IP-адрес, который вы создаете, или ??? Я попробовал версию маскарада, которая не нуждается--to-source
, как описано здесь , и это работало!Это покажет соединения, которые устанавливает приложение, включая используемый порт.
источник
Просто идея: возможно ли привязать ваше приложение к другому IP-адресу? Если это так, вы можете использовать обычные подозреваемые ( tcpdump и т. Д.)
Инструменты для приложений, которые не способны связываться с другим IP-адресом:
http://freshmeat.net/projects/fixsrcip
http://freshmeat.net/projects/force_bind
источник
Я пришел к аналогичной проблеме, и мне удалось разобраться на основе этого ответа по ioerror , используя NFLOG, как описано здесь :
Затем вы можете создать соответствующий процесс из учетной записи пользователя, которая больше ничего не делает - и вуаля, вы только что изолировали и захватили трафик из одного процесса.
Просто хотел отправить обратно на случай, если это кому-нибудь поможет.
источник
Я написал приложение на C, которое делает то, что описано в прекрасном ответе выше felahdab!
Смотрите здесь: nsntrace github repo
источник
Это грязный хак, но я бы предложил либо переадресацию, либо цель регистрации с iptables для данного UID. например:
Также может быть полезно рассмотреть что-то вроде '--log-tcp-sequence', '--log-tcp-options', '--log-ip-options', '--log-uid' для этой цели журнала. , Хотя я подозреваю, что это только поможет вам опубликовать процесс обработки pcap, который содержит массу других данных.
Цель NFLOG может быть полезна, если вы хотите пометить пакеты, а затем определенные помеченные пакеты будут отправлены через сокет netlink в процесс по вашему выбору. Интересно, будет ли это полезно для взлома чего-нибудь с wireshark и вашим конкретным приложением, работающим от имени конкретного пользователя?
источник
Вы можете попробовать tracedump - http://mutrics.iitis.pl/tracedump
Он делает именно то, что вы хотите, вы можете дать ему идентификатор процесса или программу для запуска.
источник
Попробуйте запустить интересующий вас процесс под strace :
Это даст вам очень подробную информацию о том, что делает ваш процесс. Поскольку процесс может открывать любые порты в любом месте, используя предопределенный фильтр, вы можете что-то пропустить.
Другой подход заключается в том, чтобы использовать урезанную виртуальную машину или тестовую машину в вашей сети и поместить в нее процесс отдельно. Тогда вы можете просто использовать Wireshark, чтобы поймать все с этой машины. Вы будете уверены, что трафик, который вы захватываете, будет релевантным.
источник
Опираясь на ответ ioerror, я подозреваю, что вы можете использовать
iptables --uid-owner
для установки маркера трафика, а затем попросить wireshark захватывать только трафик с этим маркером. Возможно, вы сможете использовать DSCP (маркер дифференциальных услуг), идентификатор потока или маркер qos.Или действительно вы можете использовать это для отправки этих пакетов через другой интерфейс, а затем захватывать только на этом интерфейсе.
источник
Wireshark bug # 1184 - эта функция. Это еще не реализовано.
Скопировано с пользователя cmanynard по адресу ask.wireshark.org
источник
может быть, iptables и ulog могут работать? Не то, чтобы у меня был точный рецепт, но я думаю, что iptables может соответствовать процессам, после того, как вы их нашли, вы можете использовать ulog.
источник
iptables -m owner --pid-owner $PID
был удален в Linux 2.6.14: ftp.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.14Я думаю, что вы можете создать сценарий оболочки для циклического выполнения netstat и записи его в текстовый файл. Что-то вроде (очень грубые шаги):
Я не программист, поэтому я не могу уточнить это. Но кто-то здесь может начать с того места, где я остановился, и создать рабочий сценарий для вас.
источник