运维开发网

套接字 – 使用/ proc /,如何识别网络端口号的应用程序?

运维开发网 https://www.qedev.com 2020-07-15 08:33 出处:网络 作者:运维开发网整理
我试图在没有root访问权限的情况下识别端口56474上运行的应用程序.我知道应用程序是由我启动的. 例: netstat -tunap tcp 0 0 0.0.0.0:56474 0.0.0.0:* LISTEN - 我已经尝试使用/ proc / pid脚本在ls -l / proc / pid / fd结果上
我试图在没有root访问权限的情况下识别端口56474上运行的应用程序.我知道应用程序是由我启动的.

例:

netstat -tunap

tcp        0      0 0.0.0.0:56474           0.0.0.0:*               LISTEN      -

我已经尝试使用/ 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

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

注意:添加了另一个答案,因为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

说明:

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

0

精彩评论

暂无评论...
验证码 换一张
取 消