📄 inettype.h
字号:
union sw
{
unsigned int word;
unsigned char bytes[2];
};
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{
unsigned int words[3];
unsigned char bytes[6];
};
union IP_address{
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 ip_address;
union Ethernet_address ethernet_address;
}arp; //状态,生存时间,ip地址,以太网地址
};
//------------------------------------------------------------------------
//以太网包结构
//------------------------------------------------------------------------
struct Ethernet{
unsigned char uStatus; //接收状态
unsigned char uNextpage; //下一个页
unsigned int uLength; //以太网包长度
unsigned int uDestID[3]; //目的地址
unsigned int uSourceID[3]; //源地址
unsigned int protocal; //协议/长度
unsigned char uPacket[1500]; //数据
}; //包最大大小:1518字节
//IP包 仅当IHL=5时用 当不=5时作转换
struct ip{
unsigned int head[9]; //以太网包头,18字节
unsigned char verandihl; //版本与头长度,1
unsigned char typeofserver; //服务类型,1
unsigned int totallength; //总长度,2
unsigned int frameindex; //IP帧序号,2
unsigned int segment; //分段标志,2
unsigned char ttl; //生存时间,1
unsigned char protocal; //下一层协议,1
unsigned int crc; //校验和,2
unsigned int sourceip[2]; //源IP,4
unsigned int destip[2]; //目的IP,4
unsigned char packet[1480]; //IP包的内容,1480
}; //包最大大小:1518字节
struct ippacket{
unsigned int head[9]; //以太网包头
unsigned int ippacket[750]; //IP包的内容
}; //包最大大小:1518字节
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];
}; //包最大大小:1518字节
struct tcp{
unsigned int head[9]; //以太网头 18
unsigned int iphead[10]; // 20
unsigned int sourceport; //源端口 2
unsigned int destport; //目的端口 2
unsigned long seqnumber; //顺序号 4
unsigned long acknumber; //确认号 4
unsigned char offset; //数据偏移量 1
unsigned char control; //连接控制 1
unsigned int window; //流控 2
unsigned int crc; //校验和 ,包括伪头部,TCP头部,数据 2
unsigned int urg; //紧急指针 2
unsigned char tcpdata[1460]; //TCP数据 1460
}; //包最大大小:1518字节
struct udp{
unsigned int head[9]; //以太网头,18
unsigned int iphead[10]; //20
unsigned int sourceport; //源端口,2
unsigned int destport; //目的端口,2
unsigned int length; //2
unsigned int crc; //校验和 ,包括伪头部,udp头部,数据
unsigned char udpdata[1472]; //udp数据
}; //包最大大小:1518
//所有协议的共用体
union netcard{
struct {unsigned char bytebuf[1518];}bytes; //原代码中1518的值为1536,理解如下,因为发送爷共12页,12*256=3072,除以2即为1536,正好两个包
struct{ unsigned int wordbuf[759];}words;
struct Ethernet etherframe;
struct arp arpframe;
struct icmp icmpframe;
struct tcp tcpframe;
struct ip ipframe;
struct udp udpframe;
struct ippacket ippacket;
};
struct ping_table_type
{
unsigned char status; //状态
unsigned char times; //时间
union netcard xdata * pack; //包的地址
union IP_address ip; //ping的ip地址
};
struct wait
{
union netcard xdata * buf;
union IP_address ipaddr;
unsigned char proto_id;
unsigned int len;
unsigned char timer;
unsigned char wait_arp;
};
//-----------TCP发送缓冲区结构------------//
typedef struct
{
unsigned char bUsed;
unsigned char xdata * pBuf; //待发送数据缓冲区首地址
unsigned char index_con; //标志连接的序号
unsigned int iLen; //数据长度
unsigned long his_ack; //如果该包已经被发送,则填写对方发回的
//ACK到这里,在sTATE_ESTABLISHED的接收
//ACK的代码里检查是否某个数据包已经收到
//,以此来判断该包是否被收到,并决定
//bReceived是否为真
unsigned long my_seq; //序号
unsigned long new_seq; //new_seq=my_seq+iLen
unsigned char bAcked; //表明该包是否被ACKED
} TCPBUF;
typedef struct
{
unsigned char bUsed; //标志是否被使用
union IP_address ip;
unsigned int port;
unsigned int localport;
unsigned long his_sequence;
unsigned long my_sequence;
unsigned int iLen;
unsigned long his_ack;
unsigned char timer;
unsigned int iPreTimer;
unsigned char retries;
//于保活定时器相
unsigned char Minutes;
unsigned char aty_timer;
unsigned char aty_arp_timer;
unsigned char aty_stat;
unsigned char state;
unsigned char socket_type;
unsigned int my_wnd; //自己窗口大小
TCPBUF xdata * pUnAcked;
TCPBUF xdata * pWaitForSend;
TCPBUF xdata * pRecBuf;
/* call back functions */
void ( * recv)(unsigned char xdata *buf ,unsigned int size);//收到数据时的回调函数
void ( * close)(); //套接字关闭的回调函数
void ( * accept)(); //有连接请求的回调函数
void ( * connect)(); //进入连接状态的回调函数
char query[20];
} CONNECTION;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -