• TCP IP 各种数据包结构


    TCP IP 各种数据包结构
    下面这些TCP/IP数据包是我在进行Socket及Wipcap网络编程过程中曾经用到过的数据包结构体, 这些东西平时看起来不起眼,真正用到的时候就会觉得非常有用......
    /*物理帧头结构*/
    typedef struct {
    BYTE desmac[6]; //目的MAC地址
    BYTE srcmac[6]; //源MAC地址
    USHORT ethertype; //帧类型
    }Dlc_Header;

    /*IP报头结构*/
    typedef struct {
    BYTE h_len_ver; //IP版本号(高4位)及以32比特为单位的IP包头部的长度(低四位)
    BYTE tos; //服务类型TOS
    USHORT total_len; //IP包总长度
    USHORT ident; //标识
    USHORT frag_and_flags; //标志位
    BYTE ttl; //生存时间
    BYTE proto; //协议
    USHORT checksum; //IP首部校验和
    BYTE sourceip[4]; //源IP地址(32位)
    //或者UINT sourceip;
    BYTE destip[4]; //目的IP地址(32位)
    //或者 UINT destip;
    }Ip_Header;

    /*TCP报头*/
    typedef struct {
    USHORT srcport; // 源端口
    USHORT dstport; // 目的端口
    UINT seqnum; // 顺序号
    UINT acknum; //期待获得对方的TCP包编号
    BYTE h_len; // 以32比特为单位的TCP报头长度
    BYTE flags; // 标志(URG、ACK等)
    USHORT indow; // 窗口大小
    USHORT chksum; // 校验和
    USHORT urgptr; // 紧急指针
    }Tcp_Header;

    //TCP伪首部 用于进行TCP校验和的计算,保证TCP效验的有效性
    typedef struct{
    ULONG sourceip;//源IP地址
    ULONG destip;//目的IP地址
    BYTE mbz;//置空(0)
    BYTE ptcl;//协议类型(IPPROTO_TCP)
    USHORT tcpl;//TCP头的长度(单位:字节)
    }PSD_HEADER;

    /*UDP报头*/
    typedef struct {
    USHORT srcport; // 源端口
    USHORT dstport; // 目的端口
    USHORT total_len; // 包括UDP报头及UDP数据的长度(单位:字节)
    USHORT chksum; // 校验和
    }Udp_Header;

    //UDP伪首部-仅用于计算校验和
    typedef struct tsd_hdr
    {
    BYTE sourceip[4]; //源IP地址
    BYTE destip[4]; //目的IP地址
    BYTE mbz;//置空(0)
    BYTE ptcl; //协议类型(IPPROTO_UDP)
    USHORT udpl;//UDP包总长度(不包括伪首部的长度 单位:字节)
    }PSD_HEADER;


    /*ICMP报头*/
    typedef struct {
    BYTE i_type; //类型 发出的ICMP为8(ICMP_ECHO_REQUEST),接受到的ICMP为0
    BYTE i_code; //代码
    USHORT i_cksum; //ICMP包校验和
    USHORT i_id; //识别号(一般用进程号作为标识号)
    USHORT i_seq; //报文序列号(一般设置为0)
    ULONG timestamp;//时间戳
    }Icmp_Header;

    //ARP帧结构
    typedef struct {
    USHORT HW_Type;//硬件类型Ethernet:0x1
    USHORT Prot_Type;//上层协议类型IP:0x0800
    BYTE HW_Addr_Len;//硬件地址长度:6
    BYTE Prot_Addr_Len;//协议地址(IP地址)的长度:4
    USHORT Flag;//1表示请求,2表示应答
    BYTE Send_HW_Addr[6];//源MAC地址
    BYTE Send_Prot_Addr[4];//源IP地址
    BYTE Targ_HW_Addr[6];//目的MAC地址
    BYTE Targ_Prot_Addr[4];//目的IP地址
    BYTE Padding[18];//填充数据
    }Arp_Frame;

    /*DNS数据报头*/
    typedef struct {
    USHORT id; //标识,通过它客户端可以将DNS的请求与应答相匹配;
    USHORT flags; //标志:(查询)0x0100 (应答)0x8180 这些数字都是主机序
    USHORT questions; //问题数目
    USHORT answers; //资源记录数目
    USHORT author; //授权资源记录数目
    USHORT addition; //额外资源记录数目
    }DNS_HEADER;
    //这是DNS包的公共部分,即查询包及应答包都含有这部分,由于查询问题(Domain)大小无法确定,因此这里不好将其及其以后的数据写入结构体中

  • 相关阅读:
    SDN第4次上机作业
    SDN第三次作业
    SDN第三次上机作业
    SDN第二次上机作业
    SND第二次作业
    【Beta Scrum】冲刺!4/5
    【Beta Scrum】冲刺! 3/5
    【Beta Scrum】冲刺! 2/5
    【Beta Scrum】冲刺! 1/5
    SDN第二次上机作业
  • 原文地址:https://www.cnblogs.com/fujinliang/p/2774490.html
Copyright © 2020-2023  润新知