Linux kernel 在netfilter模块中设置CONNMARK
我有一个netfilter模块,它连接到NF_INET_LOCAL_OUT。在hook函数中,我设置了如下标记:Linux kernel 在netfilter模块中设置CONNMARK,linux-kernel,netfilter,Linux Kernel,Netfilter,我有一个netfilter模块,它连接到NF_INET_LOCAL_OUT。在hook函数中,我设置了如下标记: if (tcp_header->syn && dport == 80) { skb->mark = 0x1; } 然而,这似乎只是为这个数据包设置了标记,而不是连接标记 如何将connmark设置为0x1,以便此流中的所有数据包 你有这个记号吗 如何访问中数据包的connmark 钩子函数 谢谢你的帮助。NB:我不是内核网络大师;我只是擅长阅读网
if (tcp_header->syn && dport == 80) {
skb->mark = 0x1;
}
然而,这似乎只是为这个数据包设置了标记,而不是连接标记
谢谢你的帮助。NB:我不是内核网络大师;我只是擅长阅读网络代码本身:) 在最新版本(4.15.8)中完全从
net/netfilter/xt_connmark.c
抄袭,请尝试以下代码:
if (tcp_header->syn && dport == 80) {
skb->mark = 0x1;
enum ip_conntrack_info ctinfo;
struct nf_conn *ct;
ct = nf_ct_get(skb, &ctinfo);
if (ct != NULL) {
u_int32_t newmark;
newmark = 0x01;
if (ct->mark != newmark) {
ct->mark = newmark;
nf_conntrack_event_cache(IPCT_MARK, ct);
}
}
}
基本上,为了设置CONNMARK本身,您需要首先获取流的实际conntrack条目。完成此操作后,您将看到当前标记是否已设置为新标记0x01
。如果不是,则设置标记并触发已设置标记的事件
您可能想更深入地了解一下connmark\u tg
,这就是修改此代码段的地方;它可能会给你更多的洞察力,而不仅仅是这个代码块
祝你好运