gpt4 book ai didi

c - 在 3 次握手期间将 TCP 选项添加到 ACK 数据包

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:32 24 4
gpt4 key购买 nike

我正在使用 netfilter 编写内核模块。我只想处理 SYN/ACK 的 ACK(TCP 三向握手)。我使用 skb_is_tcp_pure_ack 函数,但也处理了数据的 ACK。

我该怎么办?我的内核版本是3.10.0-514.16.1.el7.x86_64

当前代码如下所示:

struct iphdr *iph;
struct tcphdr *tcph;
struct net *net;

unsigned int hdr_len;
unsigned int tcphoff;

if (!skb_is_tcp_pure_ack(skb)) {
return NF_ACCEPT;
}
/* add tcp option */

/* A netfilter instance to use */
static struct nf_hook_ops nfho __read_mostly = {
.hook = ato_hookfn,
.pf = PF_INET,
.hooknum = NF_INET_POST_ROUTING,
.priority = NF_IP_PRI_LAST,
.owner = THIS_MODULE,
};

最佳答案

在 TCP 状态机中,您只想在状态为 TCP_SYN_SENT 时匹配 ACK 数据包。尝试添加另一个条件来检查,例如:

if (skb_is_tcp_pure_ack(skb) 
&& skb->sk->sk_state == TCP_SYN_SENT) {
/*
* ACK(-only) packet during three-way handshake
*/
}

另外,请注意 skb_is_tcp_pure_ack 是在内核版本 4.* 中引入的,而不是以下版本。

关于c - 在 3 次握手期间将 TCP 选项添加到 ACK 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57904872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com