免费注册 查看新帖 |

Chinaunix

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

[其他] 求助:域名重定向代码中遇到的问题 [复制链接]

论坛徽章:
1
天蝎座
日期:2015-03-09 10:14:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-16 14:18 |只看该作者 |倒序浏览
函数中其中有四句代码一旦调用就会蹦掉。
pskb->protocol  = eth_hdr(skb)->h_proto;                              
eth->h_proto    = eth_hdr(skb)->h_proto;                              
memcpy( eth->h_source, eth_hdr(skb)->h_dest, ETH_ALEN);               
memcpy( eth->h_dest, eth_hdr(skb)->h_source, ETH_ALEN );              

int _tcp_send_pack( struct sk_buff *skb, struct iphdr *iph,               
        struct tcphdr *th, gbuffer_t *p )                                 
{                                                                        
    struct sk_buff *pskb = NULL;                                          
    struct ethhdr *eth = NULL;                                            
    struct vlan_hdr *vhdr = NULL;                                         
    struct tcp_options_received opt_rx;                                   
    struct tcp_out_options opts;                                          
    int tcp_len = 0;                                                      
    u32 seq = 0, ack_seq = 0;                                             
    u32 tcp_rcv_tsecr = tcp_time_stamp;                                   
    int rc = -1;                                                         
                                                                          
    //                                                                    
    opt_rx.tstamp_ok = 1;                                                
    tcp_parse_options( skb, &opt_rx, 1 );    //                             
                                                                          
    // 重新计算 Acknowledgement number                                       
    tcp_len = ntohs(iph->tot_len) - ((iph->ihl + th->doff) << 2);         
    ack_seq = ntohl(th->seq) + (tcp_len);                                 
    ack_seq = htonl(ack_seq);                                             
    //                                                                    
    get_random_bytes( &seq, sizeof(seq) );                                
    //seq = common_seq;                                                   
                                                                          
    memset( &opts, 0x0, sizeof(opts) );                                   
    if ( opt_rx.saw_tstamp ) {                                            
        opts.options |= OPTION_TS;                                       
        opts.tsecr = opt_rx.rcv_tsval;                                    
        opts.tsval = tcp_time_stamp - tcp_rcv_tsecr + opt_rx.rcv_tsval;   
    }                                                                     
                                                                          
    pskb = tcp_newpack( iph->daddr, iph->saddr,                           
                th->dest, th->source,                                    
                th->ack_seq, ack_seq,                                    
                &opts,                                                   
                p->buf, p->len );                                         
                                                                          
    if ( NULL == pskb ) {                                                
        goto _out;                                                        
    }                                                                     
                                                                          
    // 复制VLAN 信息                                                         
    if ( __constant_htons(ETH_P_8021Q) == skb->protocol ) {               
        vhdr = (struct vlan_hdr *)skb_push(pskb, VLAN_HLEN );            
        vhdr->h_vlan_TCI = vlan_eth_hdr(skb)->h_vlan_TCI;                 
        vhdr->h_vlan_encapsulated_proto = __constant_htons(ETH_P_IP);     
    }                                                                     
                                                                          
    // skb->data 移动到eth首部                                                
    eth = (struct ethhdr *) skb_push(pskb, ETH_HLEN);                     
    skb_reset_mac_header(pskb);                                          
                                                                          
    //  这四句代码任意一句一调用就会崩掉                                                        
    pskb->protocol  = eth_hdr(skb)->h_proto;                              
    eth->h_proto    = eth_hdr(skb)->h_proto;                              
    memcpy( eth->h_source, eth_hdr(skb)->h_dest, ETH_ALEN);               
    memcpy( eth->h_dest, eth_hdr(skb)->h_source, ETH_ALEN );              
                                                                          
    if ( skb->dev ) {                                                     
        pskb->dev = skb->dev;                                             
        dev_queue_xmit( pskb );                                          
        rc = 0;                                                           
    }                                                                     
    else {                                                               
        kfree_skb( pskb );                                                
        ////dbg_err( "skb->dev is NULL/n" );                                 
    }                                                                     
_out:                                                                     
    return rc;                                                            
}      

论坛徽章:
1
天蝎座
日期:2015-03-09 10:14:22
2 [报告]
发表于 2014-07-16 15:22 |只看该作者
求牛人给解决一下问题 非常感谢。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
3 [报告]
发表于 2014-07-18 08:52 |只看该作者
可能是非法地址访问之类的问题。崩溃时控制台上最后的打印是啥?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP