IP頭,TCP頭,UDP頭,MAC幀頭定義
一、MAC幀頭定義
/*資料幀定義,頭14個位元組,尾4個位元組*/
typedef struct _MAC_FRAME_HEADER
{
char m_cDstMacAddress[6]; //目的mac地址
char m_cSrcMacAddress[6]; //源mac地址
short m_cType; //上一層協議型別,如0x0800代表上一層是IP協議,0x0806為arp
}__attribute__((packed))MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;
typedef struct _MAC_FRAME_TAIL
{
unsigned int m_sCheckSum; //資料幀尾校驗和
}__attribute__((packed))MAC_FRAME_TAIL, *PMAC_FRAME_TAIL;
二、IP頭結構的定義
/*IP頭定義,共20個位元組*/
typedef struct _IP_HEADER
{
char m_cVersionAndHeaderLen; //版本資訊(前4位),頭長度(後4位)
char m_cTypeOfService; // 服務型別8位
short m_sTotalLenOfPacket; //資料包長度
short m_sPacketID; //資料包標識
short m_sSliceinfo; //分片使用
char m_cTTL; //存活時間
char m_cTypeOfProtocol; //協議型別
short m_sCheckSum; //校驗和
unsigned int m_uiSourIp; //源ip
unsigned int m_uiDestIp; //目的ip
} __attribute__((packed))IP_HEADER, *PIP_HEADER ;
三、tcp頭結構定義
/*TCP頭定義,共20個位元組*/
typedef struct _TCP_HEADER
{
short m_sSourPort; // 源埠號16bit
short m_sDestPort; // 目的埠號16bit
unsigned int m_uiSequNum; // 序列號32bit
unsigned int m_uiAcknowledgeNum; // 確認號32bit
short m_sHeaderLenAndFlag; // 前4位:TCP頭長度;中6位:保留;後6位:標誌位
short m_sWindowSize; // 視窗大小16bit
short m_sCheckSum; // 檢驗和16bit
short m_surgentPointer; // 緊急資料偏移量16bit
}__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
/*TCP頭中的選項定義
kind(8bit)+Length(8bit,整個選項的長度,包含前兩部分)+內容(如果有的話)
KIND = 1表示 無操作NOP,無後面的部分
2表示 maximum segment 後面的LENGTH就是maximum segment選項的長度(以byte為單位,1+1+內容部分長度)
3表示 windows scale 後面的LENGTH就是 windows scale選項的長度(以byte為單位,1+1+內容部分長度)
4表示 SACK permitted LENGTH為2,沒有內容部分
5表示這是一個SACK包 LENGTH為2,沒有內容部分
8表示時間戳,LENGTH為10,含8個位元組的時間戳
*/
typedef struct _TCP_OPTIONS
{
char m_ckind;
char m_cLength;
char m_cContext[32];
}__attribute__((packed))TCP_OPTIONS, *PTCP_OPTIONS;
四、UDP頭結構的定義
/*UDP頭定義,共8個位元組*/
typedef struct _UDP_HEADER
{
unsigned short m_usSourPort; // 源埠號16bit
unsigned short m_usDestPort; // 目的埠號16bit
unsigned short m_usLength; // 資料包長度16bit
unsigned short m_usCheckSum; // 校驗和16bit
}__attribute__((packed))UDP_HEADER, *PUDP_HEADER;