1 votes

tcpdump - comment suivre la source des requêtes faites avec des ports éphémères/dynamiques

J'essaie d'identifier le trafic réseau entre plusieurs microservices dorsaux fonctionnant sur le même serveur. (Ils font quelques appels http de repos les uns vers les autres).

Malheureusement, lorsque j'utilise tcpdump, les lignes que je vois pour chaque appel ne me permettent que d'identifier le "service de destination" de l'appel.

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

Le port de destination (ici 9093) est stable et c'est celui sur lequel fonctionne l'un de mes microservices. Mais le port source (31822) est l'un de ces "ports éphémères/dynamiques" alloués de manière aléatoire par le système d'exploitation, de sorte que je ne sais pas quelle application a effectué l'appel.

Existe-t-il un moyen simple de déterminer quel microservice est à l'origine de cet appel ? Un moyen de lier le port dynamique source au PID d'une application en cours d'exécution ?

(sans modifier l'application en cours d'exécution elle-même, je n'ai pas le contrôle de toutes les applications)

Les choses que j'ai essayé comme netstat, lsof ne m'ont mené nulle part. Merci

0 votes

Pour ce faire, il suffit d'écrire une fonction enveloppante pour consigner les appels système appropriés, puis d'utiliser LD_PRELOAD pour l'injecter dans les applications que vous voulez inspecter. J'aurais pensé que quelqu'un aurait déjà développé une solution à ce problème, mais je n'en connais aucune à ma connaissance.

0voto

songsong Points 173

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

Ceci enregistrera chaque connexion initiée par le microservice avec le pid 1234 en utilisant un préfixe MSX afin que vous puissiez distinguer ses connexions des autres microservices.

Vous pourriez intégrer la gestion de ces règles dans le init script du microservice. Par exemple, pour systemd, ajoutez ceci en tant que ExecStartPost en utilisant la commande $MAINPID et ont un correspondant ExecStopPost qui supprime cette règle.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X