Answers:
您应该能够在/proc/net/tcp
和中找到所有打开的端口/proc/net/udp
。每个文件都有一个inode
列,可用于查找拥有该套接字的进程。
一旦有了inode编号,就可以运行ls命令,例如ls -l /proc/*/fd/* | grep socket:.$INODE
使用该套接字查找进程。如果为不同的线程设置了具有不同文件描述符的进程,则可能需要扩展命令ls -l /proc/*/task/*/fd/* | grep socket:.$INODE
到来查找所有线程。
find /proc -lname "socket:\[$INODE\]" 2> /dev/null
要查找任何端口的INODES,请执行以下命令
PORT=8080;cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | awk -F ":" '{print "PORT=" $2 ", INODE=" $3 }'
使用上面命令输出中的任何INODE来找到相关的PID,如下所示
find /proc -lname "socket:\[$INODE\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'
这里$ INODE是任何INODE的价值
在单行命令中,我们可以检查是否打开了任何端口并将其与任何PID关联,如下所示
PORT=8080;find /proc -lname "socket:\[$(cat /proc/net/* | awk -F " " '{print $2 ":" $10 }' | grep -i `printf "%x:" $PORT` | head -n 1 | awk -F ":" '{print $3}')\]" 2> /dev/null | head -n 1 | awk -F "/" '{print "PID="$3}'