tcpdump – 如何跟踪使用临时/dynamic端口的请求源

我试图确定在同一台服务器上运行的多个后端微服务之间的networkingstream量。 (他们做一些resthttp调用对方)

不幸的是,当我使用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)是由操作系统随机分配的那些“短暂/dynamic端口”中的一个,所以我不知道应用程序是如何实现的。

有一个简单的方法来跟踪什么微服务是来电的来电。 一种将源dynamic端口与正在运行的应用程序PID关联的方法?

(没有修改正在运行的应用程序本身,我没有控制他们全部)

我尝试像netstat的东西,lsof没有带领我。 谢谢

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

这将使用前缀MSXlogging由微服务发起的每个连接,使用pid 1234,这样就可以区分与其他微服务的连接。

您可以将这些规则的pipe理集成到微服务的初始化脚本中。 例如,对于systemd,使用$MAINPID将其添加为ExecStartPost命令,并具有删除此规则的相应ExecStopPost命令。