Подтвердить что ты не робот

Как я могу захватить сетевые пакеты на PID?

Кто-нибудь знает простой способ попросить Linux "отображать каждый интернет-пакет в/из google chrome" или "отображать каждый интернет-пакет в/из telnet-процесса с помощью PID 10275"?

Пример telnet не слишком полезен, так как я могу просто использовать wirehark или tcpdump, чтобы увидеть все TCP-разговоры, связанные с портом 23. Это и никто больше не использует telnet. Но обнюхивание всех пакетов в/из сложных приложений, использующих многие порты, кажется полезным.

Я нашел некоторые связанные ответы, исследуя различные способы подтверждения портов и PID (или имен программ) и т.д., но ничего о пакетах

Похоже, кто-то, возможно, готов был заплатить за этот ответ некоторое время назад:

NetHogs полезно для быстрого просмотра того, какие программы создают трафик по интерфейсу, но у него нет способа захвата пакеты.

4b9b3361

Ответ 1

Tcpdump может сообщить вам PID/процесс, из которого приходит пакет /.
В ваших вариантах введите "-k NP".

Поддерживается версия: tcpdump version 4.3.0 - Apple version 56

Ответ 2

Я бы использовал lsof -i, чтобы получить номера портов, связанные с приложением, которое я хочу. Код будет выглядеть следующим образом:

process=firefox
for _port in `lsof -i | grep $process | cut -d' ' -f18 | cut -d: -f2 | cut -d'-' -f1`
do
    port=$_port
    [[ "$_port" == +([a-zA-Z]) ]] && port=`cat /etc/services  | grep '^$_port' | cut -d' ' -f12 | cut -d'/' -f1 | uniq | head -n 1`

    echo "tcpdump -w ${port}.pcap port $port &"
    tcpdump -w ${port}.pcap port $port &
done

Обратите внимание, что вывод команд может отличаться для разных версий/распределений. Поэтому вам лучше проверить, что правильные обрезки разрезаются перед использованием script.

Кроме того, этот script не отслеживает открытые порты. Для этого я бы рассмотрел более сложный script, который регулярно проверяет порты (используя что-то вроде watch)

И не забудьте впоследствии удалить все процессы tcpdump.