【发布时间】:2013-09-21 00:30:38
【问题描述】:
我在用户空间中有一个库,用于拦截套接字层调用,例如socket()、connect()、accept() 等。我只处理 TCP 套接字。
在内核空间我有一个网络内核模块,它处理所有的 TCP 连接。我需要能够在驱动程序中识别用户空间库拦截了哪些套接字。
到目前为止,我一直在使用来自struct sock(内核)的priority 字段,我可以在用户空间中使用setsockopt() 进行设置。但这是一个相当肮脏的 hack。
是否有任何类型的 struct sock 私有字段我可以安全地从用户空间通过 setsockopt() 使用和设置?
谢谢。
【问题讨论】:
-
你的最终目标是什么?也许有人可以提出更好的方法。
-
为什么不引入一个新的套接字选项?
-
@artistoex 你真的能做到吗?如果有,有链接吗?
-
是的。 tcp 的套接字选项在
include/linux/tcp.h中定义并在net/ipv4/tcp.c:do_tcp_setsockopt()中处理 -
我明白了。通过 ioctl 接口将套接字提交给内核模块怎么样? PID 加上套接字文件描述符明确地识别套接字。
标签: c linux sockets tcp linux-kernel