Назад | Перейти на главную страницу

tcpdump - как отслеживать источник запросов, сделанных с эфемерными / динамическими портами

Я пытаюсь определить сетевой трафик между несколькими внутренними микросервисами, работающими на одном сервере. (они делают несколько HTTP-звонков друг другу)

К сожалению, когда я использую tcpdump, строки, которые я вижу для каждого вызова, позволяют мне идентифицировать только «службу назначения» для вызова.

tcpdump -nn -i lo 
14:03:52.612985 IP6 ::1.31822 > ::1.9093: Flags [P.], seq 2474698995:2474699366, ack 4107952262, win 697, options [nop,nop,TS val 3238273 ecr 3231488], length 371
14:03:52.616946 IP6 ::1.9093 > ::1.31822: Flags [P.], seq 1:875, ack 371, win 568, options [nop,nop,TS val 3238274 ecr 3238273], length 874

Порт назначения (здесь 9093) стабилен и является тем, на котором работает одна из моих микросервисов. Но исходный порт (31822) является одним из тех «эфемерных / динамических портов», которые произвольно выделяются ОС, поэтому я не знаю, какое приложение сделало вызов.

Есть ли простой способ отследить, какой микросервис является источником этого вызова. Способ связать исходный динамический порт с PID запущенного приложения?

(без изменения самого запущенного приложения я не могу их все контролировать)

вещи, которые я пробовал, такие как netstat, lsof ни к чему не привели. Спасибо

iptables -I OUTPUT -m owner --pid-owner 1234 -m state --state NEW -j LOG --log-prefix MSX

Это будет регистрировать каждое соединение, инициированное микросервисом с pid 1234 с использованием префикса MSX, чтобы вы могли отличить его соединения от других микросервисов.

Вы можете интегрировать управление этими правилами в сценарий инициализации микросервиса. Например, для systemd добавьте это как ExecStartPost команда с использованием $MAINPID и иметь соответствующий ExecStopPost команда, удаляющая это правило.