⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inettype.h

📁 本程序是一个RS232转网口的。是一个透明传输的模块
💻 H
字号:
/*
*****************************************************************************************************
*
*  File name: inettype.h
*****************************************************************************************************
*/
#ifdef   OS_GLOBALS
    #define  OS_EXT
#else
    #define  OS_EXT  extern
#endif



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


//===========洪金枝添加==================================
struct dhcp{
	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头部,数据
    //从udpdata[1472]第一个数据开始为DHCP报文
    unsigned char op;               //1:DHCP请求 ; 2:DHCP应答
	unsigned char hardwaretype;     //硬件类型1:以太网  
	unsigned char hardwarelen;      //长度 6
	unsigned char hops;             //客户把 跳数 置0
    unsigned long transactionid;    //交互ID
    unsigned int  seconds;          //秒数
    unsigned int  flags;            //标志

	unsigned char clientip[4];      //客户IP;客想继续使用之前取得之IP位址,则列于这里

	unsigned char yourip[4];        //我的IP;从server送回client之DHCPOFFER与DHCPACK封包中,
	                                //此栏填写分配给client的IP位址

	unsigned char severip[4];       //服务器IP;
	                                //若client需要透过网路开机,从server送出之DHCPOFFER、
									//DHCPACK、DHCPNACK封包中,此栏填写开机程式码所在server之位址

	unsigned char gatewayip[4];     //路由器IP
	                                //若需跨网域进行DHCP发放,此栏为relayagent的位址,否则为0

	unsigned char clientmac[16];         //客户硬件地址
	unsigned char severhostname[64];     //服务器主机名Server之名称字串,以0x00结尾
	unsigned char bootfilename[128];     //启动文件名若client需要透过网路开机,
	                                     //此栏将指出开机程式名称,稍后以TFTP传送
    unsigned char magic[4];
	unsigned char options[1232];         //可选
};

union LONG_UNION{
	unsigned long dwords;
	unsigned int words[2];
	unsigned char bytes[4];
};



//所有协议的共用体
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 dhcp dhcpframe;      //洪金枝添加  
};
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 int  timer;                  //edit hjz
  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;
  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 + -