我正在尝试编写一个NF_INET_LOCAL_OUT
netfilter函数。该函数的参数之一是sk_buff* skb
-套接字缓冲区,该结构具有一个sk
,应该是该缓冲区来自的套接字。
然而,事实证明,在syn-ack数据包上,skb->sk
不是实际的struct sock
,而是struct request_sock
,它是为服务连接请求而创建的“迷你”套接字。
struct request_sock
有一个sk
成员,该成员指向原始侦听套接字,但事实是,netfilter函数不知道skb->sk
是真实的struct sock
还是{{ 1}}。我正在编写的netfilter函数需要知道该原始侦听套接字的地址。
我想到的唯一方法是专门测试它是否是一个syn-ack数据包,然后将struct request_sock
强制转换为skb->sk
,但这似乎很脆弱。