- 论坛徽章:
- 36
|
再次 谢谢楼主指示、
现在实验的一个情况是,不在netfilter的hook中去构造数据包,而是直接写个模块,构造数据包,在手动路由,最后调用 NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, skb->dst->dev, dst_output)是可以发送出去的。
但,为什么,就不能使用dev_queue_xmit(skb)呢,难道,他们的过程,很不一样!
这两种方式的流程是不一样的。一个是按照NF框架进行处理,走完LOCALOUT,还要经过POSTROUTING,最后才会调用到dev_queue_xmit,这中间做了多少工作,你就得了解一下NF框架的处理流程了。
而直接调用dev_queue_xmit,你需要正确的手动处理MAC头部,还要修改skb->data和skb->len.
而且,如果在hook中使用NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, skb->dst->dev, dst_output)就会crash了。能否给点建议。
crash的原因多种多样。你可以对照ipt_REFECT.c中的处理和你自己代码的处理,寻找一下问题之所在。 |
|