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

宏定义

  • 一些宏定义
#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;

你可能感兴趣的:(C/C++ 网络编程: 各类协议数据结构)