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)
我没有成功.不确定是否有办法.谢谢.
注意:添加了另一个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的符号链接.