社区
Linux_Kernel
帖子详情
请教大神有关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
打赏
收藏
请教大神有关skb的问题
我现在想做一个功能,就是让数据包在经过内核的时候复制一份,发送两份出去,一份直接走原来的路径,一份走我给他的重定向的路径,比如我想让去往1.1.1.1:22的数据包,一份直接去往1.1.1.1:22,复制一份去我的apache服务器,重定向到端口7777。 现在想用tcp_hdr()函数取出端口号,然后改变端口号,求大神告诉我方法。 还有请问skb_set_transport_header()这个函数的作用是干什么的。麻烦详细解释下。多谢各位。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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成员指向传输层头地址处。
套接字缓存之
skb
_put、
skb
_push、
skb
_pull、
skb
_reserve
套接字缓存之
skb
_put、
skb
_push、
skb
_pull、
skb
_reserve
skb
操作中的预留和对齐操作主要由
skb
_put、
skb
_push、
skb
_pull、
skb
_reserve完成;这几个函数的区别通过下面图(图片来自:深入理解linux网络技术内幕)可以...
skb
管理函数之alloc_
skb
、dev_alloc_
skb
、kfree_
skb
、dev_kfree_
skb
、consume_
skb
alloc_
skb
--分配
skb
dev_alloc_
skb
--分配
skb
,通常被设备驱动用在中断上下文中,它是alloc_
skb
的封装函数,因为在中断处理函数中被调用,因此要求原子操作(GFP_ATOMIC) kfree_
skb
--减少
skb
引用,为0则释放,用于...
skb
_push/
skb
_pull/
skb
_put/
skb
_reserve
skb
几个关键指针 Note: 针对于Linux2.6,随之Linux迁移,可能会有所变化。 在申请一个
skb
的时候,其实申请了两块内存,一块用于存放sk_buff,另一块用于存放真正的包内的数据。 在sk_buff当中会有几个指针指向数据...
skb
_copy和
skb
_clone对比
skb
_copy是一个深拷贝,
skb
_clone只是一个浅拷贝 1、
skb
_clone()
Skb
_clone()函数只是复制sk_buff结构,并不复制
skb
的数据缓冲区。Clone后的sk_buff结构与原始的sk_buff指向同一数据缓冲区。原始的和clone后的
skb
...
skb
_clone 与
skb
_copy
skb
_copy是一个深拷贝,
skb
_clone只是一个浅拷贝 1、
skb
_clone()
Skb
_clone()函数只是复制sk_buff结构,并不复制
skb
的数据缓冲区。Clone后的sk_buff结构与原始的sk_buff指向同一数据缓冲区。原始的和clone后的
skb
...
Linux_Kernel
4,436
社区成员
17,460
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章