我在用户空间中有一个库,可以拦截套接字层调用,例如socket()
, connect()
, accept()
等等。我只处理 TCP 套接字。
在内核空间中,我有一个网络内核模块,它处理所有 TCP 连接。我需要能够在驱动程序中识别哪些套接字被用户空间库拦截。
到目前为止我一直在使用priority
字段来自struct sock
我可以设置的(内核)setsockopt()
在用户空间中。但这是一个相当肮脏的黑客行为。
是否有任何类型的私人领域struct sock
我可以通过用户空间安全地使用和设置setsockopt()
?
Thanks.
实际上不存在这样的“私有字段”选项只能由用户空间和内核代码使用。
使用SO_PRIORITY
选项似乎有点过于侵入性,因为它可以改变堆栈处理数据包的方式,并且可能导致难以理解的结果。更安全的选择是调整SO_RCVBUF
or SO_SNDBUF
值与通常的默认值相差一些小的增量。 Linux 会将传入的值加倍,但您可以从默认值中查找增量,并知道增量的存在作为信号,表明这是您“拦截的”套接字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)