免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4168 | 回复: 1
打印 上一主题 下一主题

[网络子系统] 如何截获数据包,并从无线网卡发送出去 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-05 15:42 |显示全部楼层 |倒序浏览
本人是新手以下是本人部分代码,此部分代码可以从截获的数据包进行修改然后从无线网卡发送出去,有线的可以发出去,但无线的发不出去,不知道为什么,哪位大侠可以指点一二。



                                        if(tcph->syn == 1 && tcph->ack == 0){
printk("syn\n");

                                                dev = dev_get_by_name(&init_net,"ra0");
                                                //change mac       


                                                for(i=0;i<6;i++){
                                                        tmp_mac[i] = ehdr->h_source[i];
                                                }
                                                for(i=0;i<6;i++){
                                                        ehdr->h_dest[i] = ehdr->h_source[i];
                                                }
                                                for(i=0;i<6;i++){
                                                        tmp_mac[i] = ehdr->h_dest[i];
                                                }

                                                //change ip
                                                tmp_ip = iph->saddr;
                                                iph->saddr = iph->daddr;
                                                iph->daddr = tmp_ip;

                                                //change port
                                                tmp_port = tcph->source;
                                                tcph->source = tcph->dest;
                                                tcph->dest = tmp_port;

                                                tcph->syn = 1;
                                                tcph->ack = 1;

                                                tcph->ack_seq = tcph->seq+1;
                                                tcph->seq = htonl(payload_len) + tcph->seq;

                                                datalen = skb->len - iph->ihl*4;

                                                tcp_option(skb);
                                               
                                                tcph->check = 0;
                                                tcph->check = tcp_v4_check(datalen, iph->saddr, iph->daddr,csum_partial((char *)tcph, datalen, 0));

                                                iph->id = 0;
                                                iph->check = 0;
                                                iph->check = ip_fast_csum(iph,iph->ihl);

                                                skb_pull(skb,iph->ihl*4);
                                                skb_reset_transport_header(skb);
                                                skb->ip_summed = CHECKSUM_NONE;
                                                skb->pkt_type = PACKET_OTHERHOST;
                                                skb->dev = dev;
                                                skb_push(skb,iph->ihl*4);
                                                skb_push(skb, ETHALEN);
                                                ret = dev_queue_xmit(skb);
                                                if(ret < 0)
                                                {
                                                        printk("dev_queue_xmit() error\n");
                                                        dev_put(dev);
                                                        goto drop;
                                                }
                                                return NF_STOLEN;                                               
                                        }

论坛徽章:
0
2 [报告]
发表于 2013-01-05 16:39 |显示全部楼层
难道高手都不在吗,大侠快出现把,在线等
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP