- union w{
- unsigned long dwords;
- struct {unsigned int high;unsigned int low;}words;
- struct {unsigned char byte3;unsigned char byte2;unsigned char byte1;unsigned char byte0;}bytes;
- };
- union ethernet_address_type{
- unsigned int words[3];
- unsigned char bytes[6];
- };
- union ip_address_type{
- unsigned long dwords;
- unsigned int words[2];
- unsigned char bytes[4];
- };
- union arp_table_type{
- unsigned char bytes[12];
- unsigned int words[6];
- struct{
- unsigned char status;
- unsigned char ttl;
- union ip_address_type ip_address;
- union ethernet_address_type ethernet_address;
- }arp; //状态,生存时间,ip地址,以太网地址
- };
- //以太网帧
- struct ethernet{
- unsigned char status; //接收状态
- unsigned char nextpage; //下一个页
- unsigned int length; //以太网长度,以字节为单位
- unsigned int destnodeid[3]; //目的网卡地址
- unsigned int sourcenodeid[3]; //源网卡地址
- unsigned int protocal; //下一层协议
- unsigned char packet[1500]; //包的内容
- };
- //IP包 仅当IHL=5时用 当不=5时作转换
- struct ip{
- unsigned int head[9]; //以太网包头
- unsigned char verandihl; //版本与头长度
- unsigned char typeofserver; //服务类型
- unsigned int totallength; //总长度
- unsigned int frameindex; //IP帧序号
- unsigned int segment; //分段标志
- unsigned char ttl; //生存时间
- unsigned char protocal; //下一层协议
- unsigned int crc; //校验和
- unsigned int sourceip[2]; //源IP
- unsigned int destip[2]; //目的IP
- unsigned char packet[1484]; //IP包的内容
- };
- struct ippacket{
- unsigned int head[9]; //以太网包头
- unsigned int ippacket[750]; //IP包的内容
- };
- struct arp{
- unsigned int head[9]; //以太网头
- //arp报文的内容总长28字节
- unsigned int harewaretype; //以太网为0x0001
- unsigned int protocaltype; //ip 为0X0800
- unsigned char halength; //=0X06
- unsigned char palength; //=0X04
- unsigned int operation; //操作 0X0001为请求 0X0002为应答 0X0003为反向地址请求 0X0004为反向地址应答
- unsigned int sourcenodeid[3]; //源网卡地址
- unsigned int sourceip[2]; //源IP地址
- unsigned int destnodeid[3]; //目的网卡地址
- unsigned int destip[2]; //目的IP地址
- };
- struct icmp{ //包含在IP包中,是IP的上层为0X01的应用
- unsigned int head[9]; //以太网头
- unsigned int iphead[10]; //IP头
- unsigned char type; //0X08 PING请求 0X00 PING应答
- unsigned char option; //0X00 PING
- unsigned int crc;
- unsigned int id;
- unsigned int seq;
- unsigned char icmpdata[1472];
- };
- struct tcp{
- unsigned int head[9];
- unsigned int iphead[10];
- unsigned int sourceport; //源端口
- unsigned int destport; //目的端口
- unsigned long seqnumber; //顺序号
- unsigned long acknumber; //确认号
- unsigned char offset; //数据偏移量
- unsigned char control; //连接控制
- unsigned int window; //流控
- unsigned int crc; //校验和 ,包括伪头部,TCP头部,数据
- unsigned int urg; //紧急指针
- unsigned char tcpdata[1460]; //TCP数据
- };
- struct udp{
- unsigned int head[9];
- unsigned int iphead[10];
- unsigned int sourceport; //源端口
- unsigned int destport; //目的端口
- unsigned int length;
- unsigned int crc; //校验和 ,包括伪头部,udp头部,数据
- unsigned char udpdata[1472]; //udp数据
- };
- //所有协议的共用体
- union netcard{
- struct {unsigned char bytebuf[1536];}bytes;
- struct{ unsigned int wordbuf[768];}words;
- struct ethernet etherframe;
- struct arp arpframe;
- struct icmp icmpframe;
- struct tcp tcpframe;
- struct ip ipframe;
- struct udp udpframe;
- struct ippacket ippacket;
- };