日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

手把手教你玩轉(zhuǎn)ARP包(二)【數(shù)據(jù)包的游戲系列之一】

 看見就非常 2012-08-31
作者:
   CSDN  VC/MFC 網(wǎng)絡(luò)編程 PiggyXP  ^_^
 
  目錄:

    一    關(guān)于ARP協(xié)議的基礎(chǔ)知識(shí)

     3. ARP包的填充

二。發(fā)送數(shù)據(jù)包的編程實(shí)現(xiàn)

   1.填充數(shù)據(jù)包

 

.........................緊接上文............................

 

3.ARP包的填充
1) 請(qǐng)求包的填充:
     比如我們的電腦MAC地址為 aa-aa-aa-aa-aa-aa,IP為 192.168.0.1
 我們想要查詢 192.168.0.99的MAC地址,應(yīng)該怎么來做呢?
 
     首先填充DLC Header,通過前面的學(xué)習(xí)我們知道,想要知道某個(gè)計(jì)算機(jī)對(duì)應(yīng)的MAC地址是要給全網(wǎng)發(fā)送廣播的,所以接收方MAC肯定是 ffffffffffff,發(fā)送方MAC當(dāng)然是自己啦,于是我們的DLC Header就填充完成了,如圖,加粗的是我們要手動(dòng)輸入的值(當(dāng)然我編的程序比較智能,會(huì)根據(jù)你選擇的ARP包類型幫你自動(dòng)填入一些字段,你一用便知^_^)。
 
DLC Header
字段
長(zhǎng)度(Byte)
填充值
接收方MAC
6
ffffffffffff
發(fā)送方MAC
6
aaaaaaaaaaaa
Ethertype
2
0x0806
圖3 ARP請(qǐng)求包中 DLC Header內(nèi)容
 
    接下來是ARP幀,請(qǐng)求包的操作碼當(dāng)然是 1,發(fā)送方的MAC以及IP當(dāng)然填入我們自己的,然后要注意一下,這里的接收方IP填入我們要查詢的那個(gè)IP地址,就是192.168.0.99了,而接收方MAC填入任意值就行,不起作用,于是,如圖,
 
                            ARP Frame
字段
長(zhǎng)度(Byte)
填充值
硬件類型
2
1
上層協(xié)議類型
2
0800
MAC地址長(zhǎng)度
1
6
IP地址長(zhǎng)度
1
4
操作碼
2
1
發(fā)送方MAC
6
aaaaaaaaaaaa
發(fā)送方IP
4
192.168.0.1
接收方MAC
6
任意值 xxxxxxxxxxxx
接收方IP
4
192.168.0.99
填充數(shù)據(jù)
18
0
                 圖4 ARP請(qǐng)求包中 ARP幀的內(nèi)容
 
    如果我們構(gòu)造一個(gè)這樣的包發(fā)送出去,如果 192.168.0.99存在且是活動(dòng)的,我們馬上就會(huì)收到一個(gè)192.168.0.99發(fā)來的一個(gè)響應(yīng)包,我們可以查看一下我們的ARP緩存列表,是不是多了一項(xiàng)類似這樣的條目:           
       192.168.0.99                  bb-bb-bb-bb-bb-bb
     是不是很神奇呢?
     我們?cè)賮砜匆幌翧RP響應(yīng)包的構(gòu)造
 
2) 響應(yīng)包的填充
     有了前面詳細(xì)的解說,你肯定就能自己說出響應(yīng)包的填充方法來了吧,所以我就不細(xì)說了,列兩個(gè)表就好了
 
     比如說給 192.168.0.99(MAC為 bb-bb-bb-bb-bb-bb)發(fā)一個(gè)ARP響應(yīng)包,告訴它我們的MAC地址為 aa-aa-aa-aa-aa-aa,就是如此來填充各個(gè)字段
 
DLC Header
字段
長(zhǎng)度(Byte)
填充值
接收方MAC
6
bbbbbbbbbbbb
發(fā)送方MAC
6
aaaaaaaaaaaa
Ethertype
2
0x0806
              圖5 ARP響應(yīng)包中 DLC Header內(nèi)容
 
ARP Frame
字段
長(zhǎng)度(Byte)
填充值
硬件類型
2
1
上層協(xié)議類型
2
0800
MAC地址長(zhǎng)度
1
6
IP地址長(zhǎng)度
1
4
操作碼
2
2
發(fā)送方MAC
6
aaaaaaaaaaaa
發(fā)送方IP
4
192.168.0.1
接收方MAC
6
bbbbbbbbbbbb
接收方IP
4
192.168.0.99
填充數(shù)據(jù)
18
0
          圖6 ARP響應(yīng)包中 ARP幀的內(nèi)容
 
    這樣192.168.0.99的ARP緩存中就會(huì)多了一條關(guān)于我們192.168.0.1的地址映射。
    好了,終于到了編程實(shí)現(xiàn)它的時(shí)候了^_^
 

二.  發(fā)送ARP包的編程實(shí)現(xiàn)

1.        填充數(shù)據(jù)包

上面的那些關(guān)于ARP包各個(gè)字段的表格,對(duì)應(yīng)在程序里就是結(jié)構(gòu)體,對(duì)應(yīng)于上面的表格,于是我們需要三個(gè)下面這樣的結(jié)構(gòu)體

// DLC Header

typedef struct tagDLCHeader                    

{

   unsigned char      DesMAC[6];             /* destination HW addrress */

   unsigned char      SrcMAC[6];             /* source HW addresss */

   unsigned short     Ethertype;                /* ethernet type */

} DLCHEADER, *PDLCHEADER;

// ARP Frame

typedef struct tagARPFrame                     

{

          unsigned short         HW_Type;           /* hardware address */

          unsigned short         Prot_Type;             /* protocol address */

          unsigned char      HW_Addr_Len;       /* length of hardware address */

          unsigned char      Prot_Addr_Len;         /* length of protocol address */

          unsigned short         Opcode;                /* ARP/RARP */

 

          unsigned char      Send_HW_Addr[6];     /* sender hardware address */

          unsigned long      Send_Prot_Addr;      /* sender protocol address */

          unsigned char      Targ_HW_Addr[6];     /* target hardware address */

          unsigned long      Targ_Prot_Addr;      /* target protocol address */

          unsigned char      padding[18];

} ARPFRAME, *PARPFRAME;

// ARP Packet = DLC header + ARP Frame

typedef struct tagARPPacket                

{

     DLCHEADER     dlcHeader;

     ARPFRAME      arpFrame;

} ARPPACKET, *PARPPACKET;

 

這些結(jié)構(gòu)體一定能看懂吧,在程序中就是對(duì)號(hào)入座就好了

................. 

================================================================== 
     不爽這么快又滿了,文章不知道要拆成幾份了..-_-b
     請(qǐng)期待下文 : )
 
                               -----  Finished at 2004-05-29 19:41

                                ------  Made In        DLUT | DIP

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多