ip.h

来自「众所周知」· C头文件 代码 · 共 107 行

H
107
字号
/*****************************************************************************\
FileName: IP.h
Purpose: IP协议的格式
Author: Ahfu, ah_fu126@hotmail.com
Comment: 
Create At: 2007-01-02
\*****************************************************************************/

#ifndef _IP_HEAD_H_
#define _IP_HEAD_H_

#ifdef __cplusplus
extern "C"
{
#endif

#ifdef _CL
#pragma pack(1)
#define PACK
#else
#define PACK  __attribute__  ((packed))
#endif

//注意:使用位域的时候,先存放低位,再存放高位
//      注意使用short或int字段的时候,要转换网络字节顺序
typedef struct _tag_ip
{
	unsigned char  HeadLen : 4   PACK;  //头长度 *4
	unsigned char  Version : 4   PACK;  //协议版本 4
	unsigned char  TOS           PACK;  //服务类型
	unsigned short Length        PACK;  //总长度
	unsigned short Sequence      PACK;  //标识,每发送一个数据包就会加一。新的共享检测基于此字段
	unsigned short Flag : 3      PACK;  //标志
	unsigned short Excursion:13  PACK;  //偏移
	unsigned char  TTL           PACK;  //生存时间
	unsigned char  Proto         PACK;  //协议
	unsigned short CheckSum      PACK;  //校验和
	unsigned int   SrcIP         PACK;  //源IP
	unsigned int   DestIP        PACK;  //目的IP
}IP_HEADER;

typedef struct _tag_tcp
{
	unsigned short SrcPort       PACK;  //源端口
	unsigned short DestPort      PACK;  //目的端口
	unsigned int Sequence        PACK;  //序列号
	unsigned int Confirm         PACK;  //确认号

	unsigned short FIN : 1       PACK;
	unsigned short SYN : 1       PACK;
	unsigned short RST : 1       PACK;
	unsigned short PSH : 1       PACK;
	unsigned short ACK : 1       PACK;  //应答标志
	unsigned short URG : 1       PACK;  //紧急标志
	unsigned short Reserved : 6  PACK;  //保留
	unsigned short HeadLen : 4   PACK;  //首部长度
	
	unsigned short WindowSize    PACK;  //窗口大小
	unsigned short CheckSum      PACK;  //TCP校验和
	unsigned short Img           PACK;  //紧急指针
}TCP_HEADER;

typedef struct _tag_udp
{
	unsigned short SrcPort       PACK;  //源端口
	unsigned short DestPort      PACK;  //目的端口
	unsigned short Length        PACK;  //总长度
	unsigned short CheckSum      PACK;  //校验和
}UDP_HEADER;

#define MAX_IP_LEN 1480  /*IP包数据域能够达到的最大长度*/

typedef struct _tagTcpData
{
	TCP_HEADER head;
	char data[MAX_IP_LEN - sizeof(TCP_HEADER)];
}TCP_DATA;

typedef struct _tagUdpData
{
	UDP_HEADER head;
	char data[MAX_IP_LEN - sizeof(UDP_HEADER)];
}UDP_DATA;

typedef union _ip_data
{
	TCP_DATA tcp;
	UDP_DATA udp;
	char raw[MAX_IP_LEN];
}IP_DATA;

//定义协议标识
#define PROTOCOL_IP  0x0008
#define PROTOCOL_ARP  0x0608
#define PROTOCOL_TCP  0x06
#define PROTOCOL_UDP  0x11

#ifdef _CL
#pragma pack()
#endif

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?