📄 ne2000.h
字号:
#ifndef _ne2000_h_
#define _ne2000_h_
typedef unsigned char INT8U;
typedef unsigned int INT16U;
typedef unsigned long INT32U;
typedef unsigned long long INT64U;
struct net_node // 本机节点信息
{
INT64U ip; // IP地址
INT64U mask; // 子网掩码
INT64U gate; // 网关
INT32U port; // 端口号
INT8U mac[6]; // 以太网地址
};
struct net_nodebytes
{
INT8U ipbytes[4];
INT8U maskbytes[4];
INT8U gatebytes[4];
INT8U portbytes[2];
INT8U macwords[6];
};
union NetNode{
struct net_node node;
struct net_nodebytes nodebytes;
};
#define IP4_ADDR(a,b,c,d) ((INT64U)(a & 0xff) << 48) | ((INT64U)(b & 0xff) << 32) | \
((INT64U)(c & 0xff) << 16) | (INT64U)(d & 0xff)
union ethernet_address_type{
INT16U words[3];
INT8U bytes[6];
};
union ip_address_type{
INT32U dwords;
INT16U words[2];
INT8U bytes[4];
};
union arp_table_type{
INT8U bytes[12];
INT16U words[6];
struct{
INT8U status;
INT8U ttl;
union ip_address_type ip_address;
union ethernet_address_type ethernet_address;
}arp; //状态,生存时间,ip地址,以太网地址
};
//以太网帧
struct ethernet{
//INT8U status; //接收状态
//INT8U nextpage; //下一个页
//INT16U length; //以太网长度,以字节为单位
INT8U destnodeid[6]; //目的网卡地址
INT8U sourcenodeid[6]; //源网卡地址
INT8U protocal_H; //下一层协议
INT8U protocal_L; //下一层协议
INT8U packet[300]; //包的内容
};
//IP包 仅当IHL=5时用 当不=5时作转换
struct ip{
INT8U head[14]; //以太网包头
INT8U verandihl; //版本与头长度
INT8U typeofserver; //服务类型
INT8U totallength_H; //总长度
INT8U totallength_L;
INT8U frameindex_H; //IP帧序号
INT8U frameindex_L;
INT8U segment_H; //分段标志
INT8U segment_L;
INT8U ttl; //生存时间
INT8U protocal; //上层协议
INT8U crc_H; //校验和
INT8U crc_L;
INT8U sourceip[4]; //源IP
INT8U destip[4]; //目的IP
INT8U packet[280]; //IP包的内容
};
struct ippacket{
INT8U head[14]; //以太网包头
INT8U ippacket[300]; //IP包的内容
};
struct arp{
INT8U head[14]; //以太网头
//arp报文的内容总长28字节
INT8U harewaretype_H; //以太网为0x0001
INT8U harewaretype_L;
INT8U protocaltype_H; //ip 为0X0800
INT8U protocaltype_L;
INT8U halength; //=0X06
INT8U palength; //=0X04
INT8U operation_H; //操作 0X0001为请求 0X0002为应答 0X0003为反向地址请求 0X0004为反向地址应答
INT8U operation_L;
INT8U sourcenodeid[6]; //源网卡地址
INT8U sourceip[4]; //源IP地址
INT8U destnodeid[6]; //目的网卡地址
INT8U destip[4]; //目的IP地址
};
struct icmp{ //包含在IP包中,是IP的上层为0X01的应用
INT8U head[14]; //以太网头
INT8U iphead[20]; //IP头
INT8U type; //0X08 PING请求 0X00 PING应答
INT8U option; //0X00 PING
INT8U crc_H;
INT8U crc_L;
INT8U id_H;
INT8U id_L;
INT8U seq_H;
INT8U seq_L;
INT8U icmpdata[276];
};
struct tcp{
INT16U head[14];
INT16U iphead[10];
INT16U sourceport; //源端口
INT16U destport; //目的端口
INT16U seqnumberH; //顺序号
INT16U seqnumberL;
INT16U acknumberH;
INT16U acknumberL; //确认号
INT8U offset; //数据偏移量
INT8U control; //连接控制
INT16U window; //流控
INT16U crc; //校验和 ,包括伪头部,TCP头部,数据
INT16U urg; //紧急指针
INT8U tcpdata[260]; //TCP数据
};
struct udp{
INT8U head[14];
INT8U iphead[10];
INT8U sourceport; //源端口
INT8U destport; //目的端口
INT8U length;
INT8U crc; //校验和 ,包括伪头部,udp头部,数据
INT8U udpdata[272]; //udp数据
};
struct tftprw{
INT16U head[9];
INT16U iphead[10];
INT16U udphead[4];
INT16U opencode; // 读写代码标志
INT8U fileandmode[270]; // 文件名和操作类型
};
struct tftpd{
INT16U head[9];
INT16U iphead[10];
INT16U udphead[4];
INT16U opencode; // 读写代码标志
INT16U number; // 块编号或者差错码
INT8U tftpdata[268]; // 数据或者差错信息
};
struct bytes{
INT8U bytebuf[336];
};
//所有协议的共用体
union netcard{
struct bytes bytedata;
struct ethernet etherframe;
struct arp arpframe;
struct icmp icmpframe;
struct tcp tcpframe;
struct ip ipframe;
struct udp udpframe;
struct ippacket ippacket;
struct tftprw tftprwframe;
struct tftpd tftpdataframe;
};
typedef struct
{
union ip_address_type ipaddr;
union ip_address_type his_sequence;
union ip_address_type my_sequence;
union ip_address_type old_sequence;
union ip_address_type his_ack;
INT16U port;
INT8U timer;
INT8U inactivity;
INT8U state;
INT8U query[23];
}tcpconnection;
#define IP_PACKET 0x0800
#define ARP_PACKET 0x0806
#define RARP_PACKET 0x8035
#define ARP_Request 0x0001
#define ARP_Answer 0x0002
#define RARP_Request 0x0003
#define RARP_Answer 0x0004
#define MaxLenARPtable 0x02
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -