c - 以编程方式或来自 procfs 的 netstat 进程名称信息

标签 c linux network-programming

我需要获取特定程序正在监听的所有端口号。该程序本身是一个通用的服务器类型程序(我们称它为 myserverd)。 myserverd 可以配置为监听任何 TCP 端口,一台机器上可以运行多个 myserverd 实例。

我可以通过 grepnetstat -natp< 中为 myserverd 获取正在运行的 myserverd 实例所使用的端口(p 选项,用于在 netstat 中显示程序名称)

我试图在 procfs (/proc/net/tcp) 中查看此信息,但它没有显示任何进程名称...我的问题是:是否有良好/可靠的 API可用于以编程方式确定哪些进程正在监听特定端口(或获取绑定(bind)到所有监听端口的所有进程名称)...?

最佳答案

您可以在此处找到 netstat 的源代码:https://github.com/mirror/busybox/blob/master/networking/netstat.c .如果您仔细查看它,您应该会看到 netstat 如何获取绑定(bind)进程的 pids/名称。

具体来说,请查看 prg_cache_load() 函数,因为 netstat 只是轮询 /proc/net/tcp

关于c - 以编程方式或来自 procfs 的 netstat 进程名称信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14909876/

相关文章:

c - 两个矩阵乘积的SVD的LAPACK例程

c - 对于繁重的计算,Fortran 是否比 C 更容易优化?

java - 使用异步任务将大字符串从 Android 发送到 Servlet

c - 为什么 struct hostent 中的 h_addr_list 是 char ** 而不是 struct in_addr **?

c++ - 如何解决 gdb 中的函数调用冲突

将 __m256d 转换为 __m256i

c - 将系统日志保存到特定文件中

linux - 巴什 : merge two directories and delete duplicated data

linux - Bash 程序在 if 语句后挂起

ios - 如何以编程方式在 iOS 中通过 IPv6 获取远程 MAC 地址