我正在为 Linux 编写一个简单的应用程序层防火墙(目前没什么特别的,只是我需要的东西)。由于 iptables 的所有者模块不够,我决定使用 libnetfilter_queue 来实现。在我的防火墙(C/C++ 应用程序)中的某个时刻,我需要决定是否接受具有给定 src/dest 端口的数据包。现在问题来了。有没有简单/快速的方法可以知道哪个进程拥有给定的端口?
基本上,我需要一个函数
pid_t port2pid(u_int16_t port)
似乎在用户空间中执行此操作的唯一方法是解析/proc
等级制度。我不想这样做,因为所有临时端口可能会很慢。内核必须在 TCP 堆栈中具有某种映射端口->进程。是否可以通过自定义内核模块来实现这一点?也许有人可以指出我完成同一任务的另一种方法?
回答自己。
文件proc/net/tcp
由内核模块提供tcp_diag
。它提供了所有 TCP 套接字及其状态的可用列表。
将套接字映射到进程的最佳方法是通过文件描述符/proc/*/fd/*
,因为套接字可能被同时使用它们的许多进程/线程共享。来源为ss
iproute2 包中的实用程序是学习这些内容的好地方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)