亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: zhengli85
打印 上一主題 下一主題

[內(nèi)核模塊] 【求助】利用netfilter進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)加密的問題 [復(fù)制鏈接]

論壇徽章:
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技術(shù)圖書徽章
日期:2014-03-25 09:00:29
11 [報(bào)告]
發(fā)表于 2014-07-17 14:03 |只看該作者
用skb_linearize(skb)將skb合并成一個(gè),也能獲取其數(shù)據(jù)部分,然后對數(shù)據(jù)部分進(jìn)行加密,但發(fā)送出去的還是未加密數(shù)據(jù),而加密后輸出內(nèi)存數(shù)據(jù)顯示是加密了的,這是因?yàn)槲耀@取的只是一個(gè)副本的原因嗎?
---能把相關(guān)代碼貼來看看么?謝謝!

論壇徽章:
0
12 [報(bào)告]
發(fā)表于 2014-07-17 15:18 |只看該作者
回復(fù) 11# humjb_1983


if(skb_shinfo(skb)->nr_frags>0)//在一個(gè)頁里為0{
                if (0 != skb_linearize(skb))//對于多個(gè)fragment的情況,將其合并
                {
                //#ifdef DEBUG_MODE
                        printk(KERN_EMERG"skb_linearize(sb) failed\n");
                //#endif
                                return NF_ACCEPT;
                }
}

crypt_ip_data_skb(skb,crypt_type,watch_flag);


/*******************************************************************************************************
*根據(jù)sk_buff、加密類型、數(shù)據(jù)方向進(jìn)行加密
*******************************************************************************************************/
static void crypt_ip_data_skb(struct sk_buff *skb,unsigned int crypt_type,int watch_flag)
{
  unsigned        char  *data=NULL;
        unsigned short data_len=0;
        __u8                                 protocol_type=0;
        struct tcphdr *tcphead=NULL;
        struct udphdr *udphead=NULL;

        int         ip_head_len=0;
        int        tcp_udp_len=0;

#ifdef DEBUG_MODE
        printk(KERN_EMERG"crypt_ip_data_skb\tcrypt_type:%d\twatch_flag:%d\n",crypt_type,watch_flag);
#endif

        if (!skb )return;
        if (!(skb->nh.iph)) return;
        protocol_type=skb->nh.iph->protocol;
        ip_head_len=(skb->nh.iph->ihl * 4);
       
        switch(protocol_type)
        {
                case        IPPROTO_TCP:
                {
                        tcphead= (struct tcphdr *)(skb->data  + ip_head_len);
                        tcp_udp_len=tcphead->doff*4;
                        data=(unsigned char *)tcphead+tcp_udp_len;
                        data_len=ntohs(skb->nh.iph->tot_len)-ip_head_len-tcp_udp_len;
                        break;
                }

                case        IPPROTO_UDP:
                {
                        udphead= (struct udphdr *)(skb->data  + ip_head_len);       
                        data=(unsigned char *)udphead+8;//sizeof(udphdr)=8
                        data_len=ntohs(udphead->len)-8;
                        break;
                }

                default:
                {
                        return ;
                }
        }

        //根據(jù)數(shù)據(jù)方向進(jìn)行加減密
        if(watch_flag==fliter_watch_in)
        {
        #ifdef DEBUG_MODE
                printk(KERN_EMERG"fliter_watch_in\tdata:0x%08x\tskb_data:0x%08x\n",data,skb->data);
        #endif

                decrypt_data_raw(data,data_len,crypt_type);
        }

        if(watch_flag==fliter_watch_out)
        {
        //#ifdef DEBUG_MODE
                printk(KERN_EMERG"fliter_watch_out\n");
                printk(KERN_EMERG"the skb have fragment counts:%d\n",skb_shinfo(skb)->nr_frags);//測試中skb_shinfo(skb)->nr_frags=0,合并成功
                printk(KERN_EMERG"data:0x%08x\n",data);
                printk(KERN_EMERG"skb_head:0x%08x\tskb_data:0x%08x\tskb_tail:0x%08x\tskb_end:0x%08x\n",skb->head,skb->data,skb->tail,skb->end);

                printk(KERN_EMERG"tcp_udp_len:%d\tdata_len:%d\n",tcp_udp_len,data_len);               
                printk(KERN_EMERG"skb_len:%d\tskb_data_len:%d\n",skb->len,skb->data_len);

        //#endif
                print_data_raw(skb->data+ip_head_len+tcp_udp_len,data_len);//輸出明文
               
                encrypt_data_raw(skb->data+ip_head_len+tcp_udp_len,data_len,crypt_type);
               
                print_data_raw(skb->data+ip_head_len+tcp_udp_len,data_len);//輸出密文
        }
       
        return;
}

論壇徽章:
1
摩羯座
日期:2014-05-07 11:21:33
13 [報(bào)告]
發(fā)表于 2014-07-17 16:17 |只看該作者
可以把hook點(diǎn)LOCAL_OUT的優(yōu)先級提高為最高NF_IP_PRI_FIRST,直接按照你改之前的代碼試下,,

論壇徽章:
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技術(shù)圖書徽章
日期:2014-03-25 09:00:29
14 [報(bào)告]
發(fā)表于 2014-07-17 17:00 |只看該作者
“用skb_linearize(skb)將skb合并成一個(gè),也能獲取其數(shù)據(jù)部分,然后對數(shù)據(jù)部分進(jìn)行加密,但發(fā)送出去的還是未加密數(shù)據(jù),而加密后輸出內(nèi)存數(shù)據(jù)顯示是加密了”
----如果這個(gè)能確認(rèn)的話,那就應(yīng)該不是這個(gè)流程的問題了,應(yīng)該是后面發(fā)送流程的問題了,可以打點(diǎn)跟一下后面的發(fā)送流程中的數(shù)據(jù)是否是從“加密后的數(shù)據(jù)”中取的。。。

論壇徽章:
0
15 [報(bào)告]
發(fā)表于 2014-07-17 21:09 |只看該作者
回復(fù) 13# wan3610425


   感謝,我試試看

論壇徽章:
0
16 [報(bào)告]
發(fā)表于 2014-07-17 21:11 |只看該作者
回復(fù) 14# humjb_1983


   嗯,我再看看,看這么長的函數(shù)體沒暈到你吧?

論壇徽章:
0
17 [報(bào)告]
發(fā)表于 2014-07-17 22:15 |只看該作者
本帖最后由 zhengli85 于 2014-07-17 22:16 編輯

回復(fù) 13# wan3610425

單純的把hook點(diǎn)LOCAL_OUT的優(yōu)先級設(shè)為NF_IP_PRI_FIRST,并沒有解決問題,反而是回到問題的原點(diǎn),傳輸?shù)臄?shù)據(jù)在其他分頁里

pre_hook.hook     = watch_in;
pre_hook.pf       = PF_INET;
pre_hook.priority = NF_IP_PRI_LAST;
pre_hook.hooknum  = NF_IP_LOCAL_IN;

post_hook.hook     = watch_out;
post_hook.pf       = PF_INET;
post_hook.priority = NF_IP_PRI_FIRST;
post_hook.hooknum  = NF_IP_LOCAL_OUT;

nf_register_hook(&pre_hook);
nf_register_hook(&post_hook);

論壇徽章:
1
摩羯座
日期:2014-05-07 11:21:33
18 [報(bào)告]
發(fā)表于 2014-07-18 14:48 |只看該作者
不好意思,我理解錯(cuò)了,以為是ip分段導(dǎo)致的,然后又誤以為ip分段是在LOCAL_OUT點(diǎn)完成的。就建議你改優(yōu)先級了

剛才看了下這個(gè)聚合分散,有點(diǎn)想法,不知道對你有用沒。首先這個(gè)skb_linearize(skb)是在將分散片拷貝到線性區(qū),你對線性區(qū)進(jìn)行加密,底層發(fā)送的時(shí)候是否還是對分散片發(fā)送呢?
然后既然選擇了利用這種GSO機(jī)制,你對每個(gè)報(bào)文又重新拷貝到線性區(qū),這個(gè)工作有點(diǎn)相違背吧,我覺得可以直接訪問到分片中,對分片進(jìn)行加密。

論壇徽章:
0
19 [報(bào)告]
發(fā)表于 2014-07-20 21:39 |只看該作者
回復(fù) 18# wan3610425


   感謝您的關(guān)注與指點(diǎn)
1、在10樓里提到了,通過skb_shared_info直接在分片里獲取數(shù)據(jù)并加密,但是發(fā)送出去的也是明文。

2、后面提到的用skb_linearize(skb)將分散片拷貝到線性區(qū)然后加密,您說的有道理,實(shí)際也是不行的,貼出代碼只是對11樓的回應(yīng)。

再次感謝,還在繼續(xù)分析。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP