gpt4 book ai didi

c++ - 哪个进程拥有给定端口(Linux 内核)?

转载 作者:太空狗 更新时间:2023-10-29 23:03:49 25 4
gpt4 key购买 nike

我正在为 Linux 编写一个简单的应用层防火墙(现在没什么特别的,只是我需要的东西)。由于 iptables 的所有者模块还不够,我决定使用 libnetfilter_queue 来完成。在我的防火墙(C/C++ 应用程序)中的某个时刻,我需要决定是否接受具有给定 src/dest 端口的数据包。现在问题来了。有什么简单/快速的方法可以知道哪个进程拥有给定端口?

基本上,我需要一个函数

pid_t port2pid(u_int16_t port)

似乎在用户空间中执行此操作的唯一方法是解析 /proc 层次结构。我不想这样做,因为所有临时端口都可能很慢。内核必须在 TCP 堆栈中具有某种映射端口-> 进程。是否有可能通过自定义内核模块来实现这一点?也许有人可以指出我完成相同任务的另一种方法?

最佳答案

self 回答。

文件 proc/net/tcp 由内核模块 tcp_diag 提供。它提供了所有 TCP 套接字及其状态的现成列表。

将套接字映射到进程的最佳方法是通过 /proc/*/fd/* 中的文件描述符,因为套接字可能会被并发使用它们的许多进程/线程共享。来自 iproute2 包的 ss 实用程序的源代码是学习这些东西的好地方。

关于c++ - 哪个进程拥有给定端口(Linux 内核)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24554696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com