常见的网络数据包的数据结构

常见的⽹络数据包的数据结构//================================================
//⽂件名:MNetWorkPKT.h
//常见的⽹络数据包的数据结构
//================================================
//前⾔说明
//================================================
//1个字节 = 8 位
//unsigned char -- 1个字节
//unsigned short -- 2个字节
//unsigned long -- 4个字节
//
/
/专业术语:报、消息、包、帧
//
//data  :原始的⽤户数据
//segment:报⽂分段(包含控制信息),位于传输层的数据组
//packet:分组或者包,由应⽤层传来的数据,将其分组成包
//frame :帧,负责将包(分组)装成数据链路层数据格式
//bit  :位流
//================================================
#ifndef _NETWORK_PACKET_H
#define _NETWORD_PACKET_H
#pragma once
/
/地址定义
//------------------------------------------------
//IP地址定义
typedef struct _ip_addr
{
unsigned char ucByte1;
unsigned char ucByte2;
unsigned char ucByte3;
unsigned char ucByte4;
}ip_addr,IP_ADDR,* PIP_ADDR;
//MAC地址定义
typedef struct _mac_addr
{
unsigned char ucByte1;
设施农业unsigned char ucByte2;
unsigned char ucByte3;
unsigned char ucByte4;
unsigned char ucByte5;
unsigned char ucByte6;
}mac_addr,MAC_ADDR,* PMAC_ADDR;
//------------------------------------------------
//数据格式定义
/
/------------------------------------------------
//IP分组的⾸部
typedef struct _ip_header
{
unsigned char ucVerHeadLen;  //版本4位 + ⾸部长度4位unsigned char ucTos;    //区分服务
unsigned short usTlen;    //总长度
unsigned short usId;    //惟⼀标识
unsigned short usFlagOffset;  //标志与偏移量
unsigned char ucTTL;    //TTL
unsigned char ucProtocol;    //协议
unsigned short usCheckSum;    //校验和
IP_ADDR    ipaSaddr;    //源地址
IP_ADDR    ipaDaddr;    //⽬的地址
}ip_header,IP_HEADER,* PIP_HEADER;
//MAC帧⾸部格式
typedef struct _eth_header
{
MAC_ADDR  maDes;    //⽬地MAC地址
MAC_ADDR  maSrc;    //源MAC地址
unsigned short usEthType;    //数据部分类型协议:ARP、IP、RARP }eth_header,ETH_HEADER,* PETH_HEADER;
//ARP数据包格式
typedef struct _arp_packet
{
unsigned short usHardWareAddrType;  //硬件地址类型
unsigned short usProtocolAddrType;  //协议地址类型
unsigned char ucHardWareAddrLength; //硬件地址长度
unsigned char ucProtocolAddrLength; //协议地址长度
unsigned short usOptionCode;    //选项码(请求、应答)
MAC_ADDR  maSenderHDAddr;    //发送者的硬件地址
IP_ADDR    maSenderIPAddr;    //发送者的IP地址
MAC_ADDR  maTargetHDAddr;    //⽬标的硬件地址
IP_ADDR    maTargetIPAddr;    //⽬标的协议地址
unsigned char ucPaddingCode[18];  //填充码(⼤于18个字节)}arp_packet,ARP_PACKET,* PARP_PACKET;
//ARP数据帧格式
typedef struct _arp_frame
香河二中{
ETH_HEADER  ethHeader;    //以太⽹帧头
ARP_PACKET  arpPacket;    //ARP数据包
}arp_frame,ARP_FRAME,*PARP_FRAME;韩寒的杂志
//ICMP数据报的⾸部
typedef struct _icmp_header
{
unsigned char ucType;    //类型
unsigned char ucCode;    //代码
unsigned short usChkSum;    //检验和
}icmp_header,ICMP_HEADER,* PICMP_HEADER;
//ICMP数据报的三种常见格式
//ICMP报⽂⼀:请求与回复报⽂
typedef struct _icmp_echo_message
{
ICMP_HEADER    icmpHeader;  //ICMP报头
unsigned short  usIdentifier; //ICMP标识符
unsigned short  usSeqNumber; //ICMP序号
//TimeSend并不RFC⽂档的标准,在标准中只有data域
unsigned long  ulTimeSend;  //发送请求时间,⽤于计算往返时间
}icmp_echo_message,ICMP_ECHO_MESSAGE,*PICMP_ECHO_MESSAGE;
//ICMP报⽂⼆:超时差错报⽂
typedef struct _icmp_exceeded_message
{
ICMP_HEADER    icmpHeader;  //ICMP报头
unsigned char  ucUnused[4]; //不使⽤,但必须清零
IP_HEADER    iphReIPHeader; //产⽣差错的IP⾸部
unsigned char  strOriData[8]; //原始的8字节的数据
}icmp_exceeded_message,ICMP_EXCEEDED_MESSAGE,*PICMP_EXCEEDED_MESSAGE;
//ICMP报⽂三:时间戳与时间戳回复报⽂
//时间戳:距离某⼀时刻逝去的时间间隔
typedef struct _icmp_timestamp_message
{
ICMP_HEADER    icmpHeader;    //ICMP报头
unsigned short  usIdentifier;  //ICMP标识符
unsigned short  usSeqNumber;  //ICMP序号
unsigned long  ulOriTimeStamp;  //原始时间戳
unsigned long  ulRecTimeStamp;  //接收者时间戳
unsigned long  ulTransmitTimeStamp;//传送时间戳
辣妹掌门人下载}icmp_timestamp_message,ICMP_TIMESTAMP_MESSAGE,*PICMP_TIMESTAMP_MESSAGE;
//UDP数据包头的格式
typedef struct _upd_header
{
unsigned short  usSrcPort;    //源端⼝
unsigned short  usDesPort;    //⽬的端⼝
unsigned short  usDGramLength;  //数据报长度
unsigned short  usChkSum;    //检验和
}upd_header,UPD_HEADER,*PUDP_HEADER;
//伪⾸部(UDP / TCP都适⽤)
typedef struct _pseudo_header
{
IP_ADDR    ipaSrcAddr;    //源地址
IP_ADDR    ipaDesAddr;    //⽬的地址
unsigned char  ucZero;    //0域
unsigned char  ucProtocol;    //协议
unsigned short  usPktLength;  //数据报长度
}pseudo_header,PSEUDE_HEADER,*PPSEUDE_HEADER;
//------------------------------------------------
//简单的输出格式(控制台)
#ifdef _CONSOLE
#include
//------------------------------------------------
void PrintIPAddr(const IP_ADDR * p)
{//格式输出IP地址:如,192.168.1.101
if (p!= 0)
{
printf("%u.%u.%u.%u", p->ucByte1,
p->ucByte2,
p->ucByte3,
p->ucByte4);
}
}
//------------------------------------------------
yc8卡充值中心void PrintMACAddr(const MAC_ADDR * p)
{//16进制格式输出MAC地址:如,00-0C-29-D2-6B-A5
if (p != 0)
反渗透
{
printf("%02X-%02X-%02X-%02X-%02X-%02X",
p->ucByte1,
p->ucByte2,
p->ucByte3,
p->ucByte4,
p->ucByte5,
p->ucByte6);
}
}
/
/------------------------------------------------
#endif
#endif
//编程规约,保留勿删
//================================================= //
//变 量  名:类型 + 名字(⾸字⼤写)
//          如,整型数据,int nRecv, char * pSend;
//
//函 数  名:名字(⾸字⼤写)
//      如,函数void DeleteData();
//
/
/数据类型名:全⼩写或者全⼤写,全⼩写取下划线分隔,
//    如果是涉及⾃定义指针⼀律⽤P+全⼤写,
//    如ip_header,IP_HEADER,PIP_HEADER;
//
//注 释 风格:⼀律⽤"//"和中⽂,少数情况可以⽤英⽂;
//    ⼤模块之间⽤"="分隔,⼩模块⽤"-"分隔。
//

本文发布于:2024-09-21 15:42:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/14405.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时间   数据   地址   格式   请求   协议
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议