请教大神有关skb的问题

splendidlong 2013-08-24 02:13:39
我现在想做一个功能,就是让数据包在经过内核的时候复制一份,发送两份出去,一份直接走原来的路径,一份走我给他的重定向的路径,比如我想让去往1.1.1.1:22的数据包,一份直接去往1.1.1.1:22,复制一份去我的apache服务器,重定向到端口7777。

现在想用tcp_hdr()函数取出端口号,然后改变端口号,求大神告诉我方法。

还有请问skb_set_transport_header()这个函数的作用是干什么的。麻烦详细解释下。多谢各位。
...全文
197 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
splendidlong 2013-09-06
  • 打赏
  • 举报
回复
紧急求助:我在linux内核中dev.c中的修改一个数据包的目的地址和目的端口,然后重新计算ip和tcp校验和,但是最后包只能发到IP层,tcp层收不到,查看发现时tcp的校验和不正确,代码如下: // 修改目的地址为本地服务器地址 ih->daddr = 2852978698;//10.0.13.170 //修改目的端口为7777 tcph->dest = htons(21); skb_reset_transport_header(skb2); // 计算IP头校验和 ih->check = 0; ih->check = ip_fast_csum((unsigned char *)ih, ih->ihl); skb2->csum = 0; skb2->csum = csum_partial((unsigned char *)tcph, sizeof(struct tcphdr),skb2->csum); //skb2->csum = skb_checksum(skb2,ih->ihl*4, skb2->len -ih->ihl* 4, 0); tcph->check = 0; tcph->check = tcp_v4_check(sizeof(struct tcphdr), ih->saddr, ih->daddr, csum_partial((unsigned char *)tcph, sizeof(struct tcphdr),skb2->csum)); //tcph->check = csum_tcpudp_magic(ih->saddr, ih->daddr, sizeof(struct tcphdr), IPPROTO_TCP, 0); 其中不管是用tcp_v4_check还是用csum_tcpudp_magic都不行,tcp的校验和总是不正确,求大神指点,或者是我的两个校验函数的参数不正确,还是函数不正确。冰天雪地裸体跪求啊。
上三行 2013-08-24
  • 打赏
  • 举报
回复
skb_set_transport_header函数主要的作用是将skb中transport_header成员指向传输层头地址处。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧