---------------------------------------
#pragma pack(1) //進入字節對齊方式
typedef struct FramHeader_t
{ //Pcap捕獲的數據幀頭
BYTE DstMAC[6]; //目的MAC地址
BYTE SrcMAC[6]; //源MAC地址
WORD FrameType; //幀類型
} FramHeader_t;
typedef struct IPHeader_t
{ //IP數據包頭
BYTE Ver_HLen; //版本+報頭長度
BYTE TOS; //服務類型
WORD TotalLen; //總長度
WORD ID; //標識
WORD Flag_Segment; //標誌+片偏移
BYTE TTL; //生存週期
BYTE Protocol; //協議類型
WORD Checksum; //頭部校驗和
DWORD SrcIP; //源IP地址
DWORD DstIP; //目的IP地址
} IPHeader_t;
typedef struct ARPHeader_t
{ //ARP數據包頭
WORD HeadwareType; //硬件類型
WORD ProtocolType; //協議類型
BYTE HLen; //硬件地址長度
BYTE PLen; //協議地址長度
WORD Operation; //操作類型
BYTE SrcMAC[6]; //源MAC地址
DWORD SrcIP; //源IP地址
BYTE DstMAC[6]; //目的MAC地址
DWORD DstIP; //目的IP地址
} ARPHeader_t;
typedef struct UDPHeader_t
{ //UDP數據包頭
WORD SrcPort; //源端口
WORD DstPort; //目的端口
WORD Len; //總長度
WORD Checksum; //校驗和
}UDPHeader_t;
typedef struct TCPHeader_t
{ //TCP數據包頭
WORD SrcPort; //源端口
WORD DstPort; //目的端口
DWORD SeqNO; //序號
DWORD AckNO; //確認號
WORD Offset4_Reserved6_Flag6; //頭部長度+保留+標誌
WORD Window; //窗口大小
WORD Checksum; //校驗和
WORD UrgentPointer; //緊急指針
DWORD Option_; //選項+填充
}TCPHeader_t;
#pragma pack() //恢復默認對齊方式
----------------------------------------------------------------------------
一.IP 數據報結構
IP數據包結構分析
IP數據報中依次包括以下信息:
1、Version=4,表示IP協議的版本號爲4。該部分佔4個BIT位。
2、Header Length=20 Bytes,表示IP包頭的總長度爲20個字節。該部分佔4個BIT位,單位爲4個字節,因此,一個IP包頭的長度最長爲“1111”,即15*4=60個字節。
3、Type of Service=00,表示服務類型爲0。該部分用二個十六進制值來表示,共佔8個BIT。
8個BIT的含義是:
000 前三位不用
0 表示最小時延,如Telnet服務使用該位
0 表示吞吐量,如FTP服務使用該位
0 表示可靠性,如SNMP服務使用該位
0 表示最小代價
0 不用
4、Total Length=48Bytes,表示該IP包的總長度爲48個字節。該部分佔16個BIT,單位爲Byte。由此可見,一個IP數據包的最大長度爲2的 16次方減1,即:65535個字節。因此,在以太網中能夠傳輸的最大IP數據包爲65535個字節。
5、Identification=363,表示IP包識別號爲363。該部分佔16個BIT,以十進制數表示。
6、Flags,表示片標誌,佔3個BIT。各位含義分別爲:第一個“0”不用,第二個“0”爲分片標誌位,“1”表示分片,“0”表示不分版本。第三個0爲是否最後一片標誌位,0表示最後一片,1表示還有更多的片。
7、Fragment Offset=0,表示片偏移爲0個Bytes。該部分佔13個BIT。
8、Time to Live=128Secongs/Hops,表示生存時間TTL值爲128。該部分佔8個BIT。
9、Proctol=6(TCP),表示協議類型爲TCP,協議代碼是6。如果是UDP協議,則此處的協議代碼應爲17。如果是ICMP協議,則此處的協議代碼應爲1。該部分佔8個BIT。
10、Header Checksun=4035(correct),表示IP包頭校驗和爲4035,括號內的Correct表示此IP數據包是正確的,沒有被非法修改過。該部分佔16個BIT,用十六進制表示。
11、Source Address=[76.88.16.104],表示IP數據包源地址爲:76.88.16.104。該部分佔32個BIT。
12、Destination Address=[76.88.16.16],表示IP數據包目的地址爲:76.88.16.16。該部分佔32個BIT。
13、No Options,表示IP數據包中未使用選項部分。當需要記錄路由時才使用該選項。
二.TCP數據報結構
TCP數據報結構分析
TCP數據報中依次包括以下信息:
1、Source Port=1038,表示發起連接的源端口爲1038。該部分佔16個BIT。通過此值,可以看出發起連接的計算機源端口號。
2、Destination Port=21(FTP-CTRL),表示要連接的目的端口爲21。該部分佔16個BIT。通過此值,可以看出要登錄的目的端口號。21端口表示是FTP服務端口。
3、Initial Sequence Number=1791872318,表示初始連接的請求號,即SEQ值。該部分佔32個BIT,值從1到2的32次方減1。
4、Next Expected SEQ Number=1791872319,表示對方的應答號應爲1791872319,即對方返回的ACK值。該部分佔32個BIT,值從1到2的32次方減1。
5、Data Offset=28 Bytes,表示數據偏移的大小。該部分佔4個BIT。
6、Reserved Bites:保留位,此處不用。該部分佔6個BIT。
7、Flags=02。該值用兩個十六進制數來表示。該部分長度爲6個BIT,6個標誌位的含義分別是:
0 URG,緊急數據標誌,爲1表示有緊急數據,應立即進行傳遞。
0 ACK,確認標誌位,爲1表示此數據包爲應答數據包
0 PSH,PUSH標誌位,爲1表示此數據包應立即進行傳遞。
0 RST:復位標誌位。如果收到不屬於本機的數據包,則返回一個RST
0 SYN:連接請求標誌位。爲1表示爲發起連接的請求數據包。
0 FIN:結束連接請求標誌位。爲1表示是結束連接的請求數據包。
8、Window=64240,表示窗口是64240。該部分佔16個BIT。
9、CheckSum=92D7(Correct),表示校驗和是92D7。該部分佔16個BIT,用十六進制表示。
10、Urgent Pointer=0,表示緊急指針爲0。該部分佔16個BIT。
11、Maximum Segment Size=1460,表示最大段大小爲1460個字節。
三.UDP數據報結構
16 | 32bit |
Source port | Destination port |
Length | Checksum |
Data |
- Source Port — 16位。源端口是可選字段。當使用時,它表示發送程序的端口,同時它還被認爲是沒有其它信息的情況下需要被尋址的答覆端口。如果不使用,設置值爲0。
- Destination Port — 16位。目標端口在特殊因特網目標地址的情況下具有意義。
- Length — 16位。該用戶數據報的八位長度,包括協議頭和數據。長度最小值爲8。
- Checksum — 16位。IP 協議頭、UDP 協議頭和數據位,最後用0填補的信息假協議頭總和。如果必要的話,可以由兩個八位複合而成。
- Data — 包含上層數據信息。