Godbach 发表于 2015-10-16 02:03

回复 10# 买单老

不过,发TCP包,对端收不到,我在想是不是没有建立3次握手的原因呢?

三次握手是 TCP 协议栈需要的逻辑,在到达 TCP 之前,也就是刚到 IP 层的时候,只要一个符合要求的 TCP 报文,是能够看到,也能抓包看到的。

你的这种情况,要看一下 TCP 和 IP 校验和是否计算正确了。我怀疑是你够早的报文,没有发出来。

至于你说用 netif_recieve_skb 发包,比较让人费解。你知道这个函数是干什么的吗?
   

买单老 发表于 2015-10-16 23:39

这个函数就是内核收到包之后调用的啊,我就是想让这个函数来接收我自己构造的包,让包流进协议栈回复 11# Godbach


   

Godbach 发表于 2015-10-18 22:59

回复 12# 买单老

明白了。那我提到的一些可能的问题,你 check 没有。


   

买单老 发表于 2015-10-19 21:00

现在我这已经基本上实现调用dev_queue_xmit发送UDP数据和调用netif_receive_skb接收UDP数据了,
现在主要的问题还是我在另外的帖子提到的函数undefined问题,如果真的要重新编译内核,我的天啊,
我现在相信墨菲定律了,一件事,你越怕,它越会发生

回复 13# Godbach


   

Godbach 发表于 2015-10-20 13:45

回复 14# 买单老
要么就 hack 深入一把。找到这个函数的符号表。


   

Godbach 发表于 2015-10-20 13:45

回复 14# 买单老
要么就 hack 深入一把。找到这个函数的符号表。


   

买单老 发表于 2015-10-20 20:37

现在已经重新编译内核了,可以使用了。不过接下来又遇到问题了。
调用ip_local_deliver进行在LOCAL_IN之前发包需要调用ip_route_input_noref进行路由选择,这样构造的包就触发LOCAL_IN点的钩子函数了。

疑问有如下:
1.如果我想让包进入FORWARD点,那么这个包构造呢?


对于LOCAL_OUT和POST_ROUTING点,我发现它们相关的导出函数中还需要一个struct sk* 参数,这如何构造啊?


回复 16# Godbach


   

nswcfd 发表于 2015-10-21 12:34

好奇怪的需求,领导/客户想用这个功能干什么?

比如领导/客户想要"把prerouting‘劫持’到output",背后的意图是1)还是2)?
1)仅仅让报文从output发出去(无任何状态);
2)让报文看起来像一个本地发送的?(比如跟某个app的socket管理起来,跟某个dst entry关联起来,等等),要不要解决应答报文的接收问题?<====== 这更像是要实现某种报文重定向(或者代理)的功能

买单老 发表于 2015-10-21 23:08

客户领导拍板,怎么说呢,具体的需求我也搞不懂回复 18# nswcfd


   

logcor 发表于 2015-12-21 17:48

买单老 发表于 2015-10-20 20:37 static/image/common/back.gif
现在已经重新编译内核了,可以使用了。不过接下来又遇到问题了。
调用ip_local_deliver进行在LOCAL_IN之前 ...

想要转向FORWORD的HOOK点,应该要在PRE_ROUTE点把目标IP改成非本机吧,这样route检查时才会走FORWORD分支。这是我个人猜测啊,最近在研究协议栈代码。
页: 1 [2]
查看完整版本: 在netfilter的5个钩子点处构造包,并发送的问题