C/C++ 网络编程: 各类协议数据结构

来源:互联网 发布:淘宝零食店铺知乎 编辑:程序博客网 时间:2024/06/01 13:53

宏定义

  • 一些宏定义
#define EPT_IP   0x0800    /* type: IP */#define EPT_ARP   0x0806    /* type: ARP */#define EPT_RARP 0x8035    /* type: RARP */#define ARP_HARDWARE 0x0001    /* Dummy type for 802.3 frames */#define ARP_REQUEST 0x0001    /* ARP request */#define ARP_REPLY 0x0002    /* ARP reply */

定义以太网首部

typedef struct ehhdr {    unsigned char eh_dst[6];   /* destination ethernet addrress */    unsigned char eh_src[6];   /* source ethernet addresss */    unsigned short eh_type;   /* ethernet pachet type */}EHHDR, *PEHHDR;

定义以太网arp字段

typedef struct arphdr{    //arp首部    unsigned short arp_hrd;    /* format of hardware address */    unsigned short arp_pro;    /* format of protocol address */    unsigned char arp_hln;    /* length of hardware address */    unsigned char arp_pln;    /* length of protocol address */    unsigned short arp_op;     /* ARP/RARP operation */    unsigned char arp_sha[6];    /* sender hardware address */    unsigned long arp_spa;    /* sender protocol address */    unsigned char arp_tha[6];    /* target hardware address */    unsigned long arp_tpa;    /* target protocol address */}ARPHDR, *PARPHDR;

定义整个arp报文包,总长度42字节

typedef struct arpPacket{    EHHDR ehhdr;    ARPHDR arphdr;} ARPPACKET, *PARPPACKET;

定义ip报头数据结构

typedef struct _iphdr{    byte ver_len;  //版本4位,头长度4位,报头长度以32位为一个单位    byte type;   //类型8位    byte length[2];  //总长度,16位,指出报文的以字节为单位的总长度    //报文长度不能超过65536个字节,否则认为报文遭到破坏    byte id[2];   //报文标示,用于多于一个报文16位    byte flag_offset[2];//标志,3位 数据块偏移13位    byte time;   //生存时间,8位    byte protocol;  //协议,8位    byte crc_val[2]; //头校验和,16位    byte src_addr[4]; //源地址,32位    byte tar_addr[4]; //目标地址,32位    byte options[4]; //选项和填充,32位}IP_HEADER;

定义TCP报头

typedef struct _tcphdr{    byte source_port[2]; //发送端端口号,16位    byte dest_port[2];  //接收端端口号,16位    byte sequence_no[4]; //32位,标示消息端的数据位于全体数据块的某一字节的数字    byte ack_no[4];   //32位,确认号,标示接收端对于发送端接收到数据块数值    byte offset_reser_con[2];//数据偏移4位,预留6位,控制位6为    byte window[2];   //窗口16位    byte checksum[2];  //校验码,16位    byte urgen_pointer[2]; //16位,紧急数据指针    byte options[3];  //选祥和填充,32位}TCP_HEADER;

定义伪首部

struct{    unsigned long saddr;  //源地址    unsigned long daddr;  //目的地址    char mbz;   //置空    char ptcl;    //协议类型    unsigned short tcpl;  //TCP长度}psd_header;
0 0
原创粉丝点击