【问题标题】:Is there a netfilter hook that has the receiving socket already associated?是否有一个 netfilter 钩子已经关联了接收套接字?
【发布时间】:2019-12-05 03:20:42
【问题描述】:

NF_INET_LOCAL_OUT 钩子有skb->sk 指向发送数据包的套接字的struct sock。如果有一个钩子为接收数据包的套接字设置了它?在NF_INET_LOCAL_IN 挂钩中,skb->sk 为空。

我必须使用__inet_lookup_skb() 吗?如果是这样,该函数的复杂性是多少?

编辑:看起来 __inet_lookup_skb() 仅适用于 TCP,因为没有 udp_hashinfo。我最初是为 UDP 做这个的。

【问题讨论】:

    标签: c linux sockets linux-kernel netfilter


    【解决方案1】:

    只是一个小补充:
    UDP 输入路径有点不同(与 TCP 不同):
    NF_INET_LOCAL_IN hooks->
    ->ip_local_deliver_finish()->udp_rcv()->__udp4_lib_rcv()->__udp4_lib_lookup()

    __udp4_lib_lookup() 获取特定 IP 地址和端口的 struct sock
    当然,在 L3 的输入路径上(你的 Netfilter 钩子在哪里)仍然没有套接字查找(因此也没有套接字)。这是传输层的工作,取决于特定的协议。

    所以是的,在这种情况下,LSM 挂钩可以提供帮助。此外,根据您的需要,您可以开发相应的内核补丁。

    【讨论】:

    • 感谢您提供额外信息!
    【解决方案2】:

    似乎没有,但就我而言,LSM 挂钩 socket_recvmsg 是合适的。它得到一个指向struct sock的指针,它指向接收队列中的struct sk_buffs。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-07
      • 2021-05-19
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      相关资源
      最近更新 更多