1.4.2 具体编码(1)
设计界面完毕后,开始步入正式编码阶段。
(1) 定义协议名称结构_PROTN2T,具体代码如下:
- typedef struct _PROTN2T
- {
- int proto;
- char *pprototext;
- } PROTN2T;
(2) 定义IP头结构_IPHEADER,具体代码如下:- typedef struct _IPHEADER {
- unsigned char header_len:4;
- unsigned char version:4;
- unsigned char tos;
- unsigned short total_len;
- unsigned short ident;
- unsigned short flags;
- unsigned char ttl;
- unsigned char proto;
- unsigned short checksum;
- unsigned int sourceIP;
- unsigned int destIP;
- } IPHEADER;
(3) 定义TCP包头结构TCPPacketHead,具体代码如下:- struct TCPPacketHead {
- WORD SourPort;
- WORD DestPort;
- DWORD SeqNo;
- DWORD AckNo;
- BYTE HLen;
- BYTE Flag;
- WORD WndSize;
- WORD ChkSum;
- WORD UrgPtr;
- };
(4) 定义ICMP包头结构ICMPPacketHead,具体代码如下:- struct ICMPPacketHead {
- BYTE Type;
- BYTE Code;
- WORD ChkSum;
- };
(5) 定义UDP包头结构UDPPacketHead,具体代码如下: - struct UDPPacketHead {
- WORD SourPort;
- WORD DestPort;
- WORD Len;
- WORD ChkSum;
- };
(6) 定义一个得到协议名称的数组aOfProto,具体代码如下: - PROTN2T aOfProto[PROTO_NUM + 1] =
- {
- { IPPROTO_IP, "IP" },
- { IPPROTO_ICMP, "ICMP" },
- { IPPROTO_IGMP, "IGMP" },
- { IPPROTO_GGP, "GGP" },
- { IPPROTO_TCP, "TCP" },
- { IPPROTO_PUP, "PUP" },
- { IPPROTO_UDP, "UDP" },
- { IPPROTO_IDP, "IDP" },
- { IPPROTO_ND, "NP" },
- { IPPROTO_RAW, "RAW" },
- { IPPROTO_MAX, "MAX" },
- { NULL, "" }
- };
-
- char* get_proto_name(unsigned char proto)
- {
- BOOL bFound = FALSE;
- for(int i=0; i<PROTO_NUM; i++)
- {
- if(aOfProto[i].proto == proto)
- {
- bFound = TRUE;
- break;
- }
- }
- if(bFound)
- return aOfProto[i].pprototext;
- return aOfProto[PROTO_NUM].pprototext;
- }