我有一个NFQUEUE,用于IPv6数据包,挂在ip6tables的PREROUTING链表中。 一旦我在用户应用程序中收到一个数据包,我修改了标题。 事实上,修改了从IPv6到IPv4的报头,并重新注入了数据包。 但是,从日志中,我发现IPv4数据包正在像IPv6数据包一样被对待。
由于每个NFQUEUE映射到AF_INET或AF_INET6,单个NFQUEUE是否可以处理IPv4和IPv6数据包?
是否有可能从一个队列接收数据包,但插入不同的队列? 这是没有道理的,但我想直接注入一个数据包到IP堆栈的IP头在用户空间格式化。
您可以通过绑定两者来为IPv4和IPv6使用单个队列。
例如
nfq_bind_pf(h, AF_INET)
然后
nfq_bind_pf(h, AF_INET6)
然后队列将处理4和6,你仍然需要让你的应用程序4/6知道,所以它可以适当地parsingIP头。
您可以将数据包传递给另一个队列。
在nfq_set_verdict设置NF_QUEUE和队列号。 (当低位给出NF_QUEUE值时,使用判定值的高16位)。