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

Как сопоставить эфемерный порт с pid?

У меня есть сервер RHEL с несколькими приложениями, и я пытаюсь выяснить, какое из них выполняет вызовы внешней веб-службы. У меня есть дампы TCP, которые показывают выполняемые вызовы, и с помощью различных инструментов я могу определить, какой эфемерный порт выполняет эти вызовы. Однако я не могу понять, как сопоставить этот эфемерный порт с pid. Я знаю, что могу использовать lsof -i чтобы сопоставить связанные порты с pid, но это не моя проблема.

Есть ли способ сопоставить используемый эфемерный порт с pid или каким-либо другим индикатором того, какой файл выполняет вызов?

lsof -i $PROTOCOL:$PORT
fuser $PORT/$PROTOCOL
netstat -np | grep $PORT

Любой из них должен работать. Ниже приведен пример выходных данных, показывающих, что мой почтовый клиент использует временный порт 56375 для связи с сервером IMAP для дальнейшего объяснения:

$ sudo netstat -np | grep 56375
tcp        0      0 192.168.1.1:56375      217.70.184.11:993       ESTABLISHED 3256/thunderbird

$ fuser 56375/tcp
56375/tcp:            3256

$ lsof -i tcp:56375
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
thunderbi 3256   me     87u  IPv4 510573      0t0  TCP hostname:56375->example.com:imaps (ESTABLISHED)

netstat перечислит все pid и порт, относящиеся друг к другу. netstat -nlp предоставит вам порт для сопоставления pid.