获取tcp/udp端口对应的进程pid
2011-11-29 11:45
465 查看
可能有一些朋友想要做一些监视流量工具却不知道如何根据端口获取到进程的PID,如果你搜了一圈也没有找到满意的答案,希望我的这个文章可以帮到你。
1、获取当前活动的TCP/UDP端口值。
你会有许多方法获取此值,这里不多废话了。(我用的方法是通过raw socket进行抓包分析,你也可以用libpcap库实现)。假设当前我发现一个本地端口为54351的tcp端口。
当前状态:tcp_port/udp_port
2、获取端口的inode值。
假设你用自己的方法获取到了当前活动的tcp端口,此时你需要找到此端口对应的inode节点值。怎么获得呢?在这里/proc/net/tcp(对于udp是/proc/net/udp)。这个文件中存储的主要信息是:本地地址,本地端口,远程地址,远程端口,链接状态,发送队列,接收队列,UID,inode等信息。记住这个值,它就是我们需要的东西。
假设端口号为 54351 的记录中inode字段为 193738
当前状态:tcp_port/udp_port -> inode
3、遍历所有进程的所有fd(fd = 文件描述符)
在到/proc/目录你会看到很多以数字命名的文件夹,这些文件夹里就是系统当前运行进程的相关信息。文件名字这些数字就是进程的pid,比如叫做“1”的文件夹里就是init进程的相关信息。
假设我的google-chrome进程pid为102。我进入102目录(即当前我处在/proc/102/目录)后,能看到一个叫做fd的目录。进入fd目录。能看到很多用数字命名的文件,执行“ls -l”可以看到
其中有一条为:
当前状态:tcp_port/udp_port -> inode == inode<-pid
1、获取当前活动的TCP/UDP端口值。
你会有许多方法获取此值,这里不多废话了。(我用的方法是通过raw socket进行抓包分析,你也可以用libpcap库实现)。假设当前我发现一个本地端口为54351的tcp端口。
当前状态:tcp_port/udp_port
2、获取端口的inode值。
假设你用自己的方法获取到了当前活动的tcp端口,此时你需要找到此端口对应的inode节点值。怎么获得呢?在这里/proc/net/tcp(对于udp是/proc/net/udp)。这个文件中存储的主要信息是:本地地址,本地端口,远程地址,远程端口,链接状态,发送队列,接收队列,UID,inode等信息。记住这个值,它就是我们需要的东西。
假设端口号为 54351 的记录中inode字段为 193738
当前状态:tcp_port/udp_port -> inode
3、遍历所有进程的所有fd(fd = 文件描述符)
在到/proc/目录你会看到很多以数字命名的文件夹,这些文件夹里就是系统当前运行进程的相关信息。文件名字这些数字就是进程的pid,比如叫做“1”的文件夹里就是init进程的相关信息。
假设我的google-chrome进程pid为102。我进入102目录(即当前我处在/proc/102/目录)后,能看到一个叫做fd的目录。进入fd目录。能看到很多用数字命名的文件,执行“ls -l”可以看到
niu@niu:/proc/102/fd$ ls -l total 0 l-wx------ 1 niu niu 64 2011-11-29 10:41 31 -> pipe:[11903] lr-x------ 1 niu niu 64 2011-11-29 10:41 32 -> /opt/google/chrome/chrome.pak lrwx------ 1 niu niu 64 2011-11-29 10:41 33 -> anon_inode:[eventpoll] lr-x------ 1 niu niu 64 2011-11-29 10:47 13 -> pipe:[8449] l-wx------ 1 niu niu 64 2011-11-29 10:47 14 -> pipe:[8449] lr-x------ 1 niu niu 64 2011-11-29 10:47 15 -> pipe:[8450] l-wx------ 1 niu niu 64 2011-11-29 10:47 16 -> pipe:[8450] lrwx------ 1 niu niu 64 2011-11-29 10:47 2 -> /dev/null lrwx------ 1 niu niu 64 2011-11-29 10:47 3 -> anon_inode:[eventfd] lr-x------ 1 niu niu 64 2011-11-29 10:47 4 -> pipe:[6952] lrwx------ 1 niu niu 64 2011-11-29 10:47 7 -> /dev/null lrwx------ 1 niu niu 64 2011-11-29 10:47 8 -> socket:[193738]
其中有一条为:
lrwx------ 1 niu niu 64 2011-11-29 10:47 8 -> socket:[193738]方括号中的值就此进程占用的socket的inode值,解析出此值与 前面获得到的193738比较可得出结论:54351端口属于进程102。
当前状态:tcp_port/udp_port -> inode == inode<-pid
相关文章推荐
- 获取tcp/udp端口对应的进程pid
- C#获取Windows进程监听的TCP/UDP端口实例
- 获取Windows下某进程监听的TCP/UDP端口
- [No0000CB]如何在命令行(cmd)通过TCP/IP端口(port)查询所在的进程号(pid)或进程名称,并终止该进程
- CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程!
- 获取系统系统所有TCP以及UDP端口使用情况
- windows和linux下使用命令查找端口对应的进程pid并杀死进程
- 如何在命令行(cmd)通过TCP/IP端口(port)查询所在的进程号(pid)或进程名称,并终止该进程
- [Android Pro] 获取手机已经安装的应用 和 获取当前正在运行的所有进程(一个uid对应多个pid)
- 获取系统当前打开的端口(tcp。udp)状态,以及连接方的ip。端口
- Linux获取监听指定端口的进程PID
- shell 编程8 获取 java程序的pid 杀死pid 对应的进程
- [Android Pro] 获取手机已经安装的应用 和 获取当前正在运行的所有进程(一个uid对应多个pid)
- linux: 获取监听指定端口的进程PID
- linux 根据 进程名 获取 对应 PID 来 判断 使用 内存情况
- win7 xp vista 下获取进程对应的ip地址和端口信息
- windows查询占用端口的pid以及查询对应的进程名称
- Android根据进程名获取对应的进程pid
- Python语言实现获取主机名根据端口杀死进程