scapy基礎-網絡數據包結構


網絡層次模型,數據包的組成是學習scapy的基礎,下文主要關注模型中各個層次的用途,ethernet II和ip包數據結構。 
   
  1.五層模型簡介

名稱 作用 包含協議
應用層 面向程序對程序的傳輸服務
(應用層更關注於ip協議中的數據包部分)
HTTP,DNS,FTP,SMTP
傳輸層 分割並重新組裝上層提供的數據流,為數據流提供端口到端口的傳輸服務。
(傳輸層關注端口號)
TCP,UDP
網絡層 1.通過包的分片適應最大傳輸單元長度
2.路由實現的方式和學習的方式
3.定義所有結點的邏輯地址(ip地址)
(網絡層關注ip地址)
IP,ARP,ICMP,DHCP
數據鏈路層 1.把比特流組合成幀,然后發出去 
2.判斷從那一幀開始到那一幀結束
3.通過一些方法(如效驗碼)來保證數據的正確性
(數據鏈路層關注MAC地址)
Ethernet,IEEE 802.11 wireless LAN
物理層 一套為上層數據鏈路層提供無差異化數據的規范 太底層了,不關注…

  
 2. Ethernet II數據包 
 數據鏈路層有很多協議,這里只關注一個我們最最常用的Ethernet II協議。

目的地址 源地址 類型 數據 FCS
6 byte 6 byte 2 byte 46~1500 byte 4 byte

目標地址:此數據包的目標MAC地址。 
源地址:此數據包的源MAC地址。 
協議類型:上層協議,表示網絡層使用的協議。(0x0800表示網絡層使用的是IP協議) 
數據:高層協議、數據和填充符,范圍在46~1500字節。(如果數據長小於46字節,則要求“填充”,以使這個數據的長度達到46字節) 
FCS:數據幀校驗序列,用於確定數據包在傳輸過程中是否損壞。 
參考:https://en.wikipedia.org/wiki/Ethernet_frame#Ethernet_II

 3.IP數據包

Offsets 0 1 2 3
0 Version(4bit) IHL(4bit) DSCP(6bit) ECN(2bit) Total Length(16bit)
4 Identification(16bit) Flags(3bit) Fragment Offset(13bit)
8 Time To Live(8bit) Protocol(8bit) Header Checksum(16bit)
12 Source IP Address(32bit)
16 Destination IP Address(32bit)
20 Options(if IHL > 5) padding
  Data

幾個需要重點關注的對象: 
1. 源地址,目的地址,ttl值在網絡層的ip數據包中。 
2. Protocol字段定義了數據部分的上層協議類型(值參考https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers) 
3. ip數據包包含頭部和數據部分。IHL(Internet Header Length)代表 ip包頭部長度占用4bit,值范圍是5-15,用IHL值*4字節就得到ip頭部長度(所以頭部長度一定是4字節的倍數)。Total Length是包括頭部和數據部分整個ip包的長度,占用16bit,其值以byte為單位。最小值 20 bytes (20字節頭部+ 0 bytes數據),最大值 65,535 bytes。 
4. Header Checksum只包含頭部數據的錯誤校驗碼,當包經過路由器時可能會修改ip包頭部數據,此時需要重新計算此值。如果包含數據部分就太費時間了。 
參考:https://en.wikipedia.org/wiki/IPv4#Packet_structure

4.校驗和(checksum) 
  checksum只要用於驗證數據在傳輸和存儲過程中的完整性而不是准確性,其中特別需要注意的是在計算校驗和時checksum字段的值應該為0。其計算方法如下:

SHORT checksum(USHORT* buffer, int size) { unsigned long cksum = 0; while(size>1) { cksum += *buffer++; size -= sizeof(USHORT); } if(size) { cksum += *(UCHAR*)buffer; } //處理當cksum大於16bit的情況,處理成16bit cksum = (cksum>>16) + (cksum&0xffff); cksum += (cksum>>16); // 處理上一步相加時可能產生的進位 return (USHORT)(~cksum); }

參考:http://www.thegeekstuff.com/2012/05/ip-header-checksum

轉自:http://blog.csdn.net/cracker_zhou/article/details/54645276

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM