小伟

Collection

内核能够动态确定ip包的发送接口,通过路由信息确定

lzgogogo
(stranger)
03-11-16 18:45
怎么样在内核中按照自己的需要的向外发送一个数据包?

我在Netfilter框架下面写了一段包处理的函数,现在要实现一个功能,是按照自己的要求产生一个数据包并且发送出去.比如说我现在要发送一个数据包,该数据包从192.168.1.154:80发送到192.168.1.155, Seq为3187958690
ACK为 3187958691,SYN ACK置位等等
我得想法是参照一些驱动程序中产skb结构的方法,即先调用dev_alloc_skb(),然后再将其相应的部分进行填充.最后调用dev_queue_xmit()进行发送.碰到了一些问题:第一是怎么样确定使用那一个网络接口进行发送,我找到了函数dev_get_by_name(),但是这个调用需要指定网络接口名(如eth0,eth1).但是事先并不能确定是那一个网络接口,这样的话是不是只能在插入模块的时候进行指定,有没有什么方法动态的确定那一个网络接口?
第二个问题是skb的有关部分怎么样填充?如dst,csum,sk,stamp等等,还是根本就不必管这些部分.
不知道我的想法是否可行,需要注意那些部分?各位在做类似的功能是是怎么做的?有没有现成的例子参考参考
请指教 ,谢谢

文章选项: 打印   将这篇文章放置于备忘录中,待有空时回覆   好友分享   通知版主

dl_dht
(member)
03-11-17 10:18
Re: 怎么样在内核中按照自己的需要的向外发送一个数据包? 新[re: lzgogogo]

使用 ip_route_output_key 可以确定使用那一个接口进行发送.

文章选项: 打印   将这篇文章放置于备忘录中,待有空时回覆   好友分享   通知版主

阅读更多
文章标签: 网络 output dst 框架
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭