使用/ proc/<pid>,如何识别网络端口号的应用程序?

ski*_*bur 3 sockets port tcp pid proc

我试图在没有root访问权限的情况下识别端口56474上运行的应用程序.我知道应用程序是由我启动的.

例:

netstat -tunap

tcp        0      0 0.0.0.0:56474           0.0.0.0:*               LISTEN      -               
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用/ proc/pid脚本在ls -l/proc/pid/fd结果上使用grep遍历所有内容.这是我的尝试.注意:不确定我是否朝着正确的方向前进

for I in `find /proc/*/fd -exec ls -l {} \; 2>/dev/null | awk -F"->|:" '/socket/ {print $4}' | sort -u | sed -e 's/\[//g' -e 's/\]//g'`; do grep $I /proc/*/net/tcp; done
Run Code Online (Sandbox Code Playgroud)

我没有成功.不确定是否有办法.谢谢.

Tia*_*opo 7

注意:添加了另一个lsof不满意的答案.

这应该工作:

#! /bin/bash
port=56474
hex_port=$(echo "obase=16; $port" | bc )

inode=$(cat /proc/net/tcp | grep ":$hex_port" | awk '{print $10}')

for i in $(ps axo pid); do
        ls -l /proc/$i/fd 2> /dev/null | grep -q ":\[$inode\]" &&  echo $i
done 
Run Code Online (Sandbox Code Playgroud)

说明:

一旦我们将端口号转换为十六进制,我们就可以从/ proc/net/tcp(第10个字段)获取inode号,然后我们遍历/ proc/pids/fd并找到指向inode的符号链接.

  • 通常[无用的使用`cat`](http://www.iki.fi/era/unix/award.html) 修复:`awk ":$hex_port { print \$10 }" /proc/net/tcp` (2认同)