www.pudn.com > NETINFO.rar > tcpip.h


#ifndef _TCPIP_H_ 
#define _TCPIP_H_ 
 
#define ETHER_PROTOCOL_IP 8 
 
#define IP_PROTOCOL_ICMP 0x01 
#define IP_PROTOCOL_TCP 0x06 
#define IP_PROTOCOL_UDP 0x11 
 
#define ETHERNET_ADDR_LEN 6 
#define MAX_TCP_PACKET 1800 
#define MAX_TCP_WINDOW_SIZE 0x10000 
 
//tcp port definition 
#define TCP_PORT_POP3 110 
#define TCP_PORT_SMTP 25 
#define TCP_PORT_HTTP 80 
#define TCP_PORT_TELNET 23 
#define TCP_PORT_FTP 21 
 
#define PORT_DNS 53 
 
struct ETHERNET 
{ 
	BYTE dst[ETHERNET_ADDR_LEN]; 
	BYTE src[ETHERNET_ADDR_LEN]; 
	WORD protocol; 
}; 
 
struct IP_ADDR 
{ 
	BYTE b1; 
	BYTE b2; 
	BYTE b3; 
	BYTE b4; 
}; 
 
struct IP 
{ 
	BYTE hl : 4;  //header len of DWORD 
	BYTE v  : 4;  //version, must be 4 
	BYTE tos;         //type of service 
	WORD len;         //total length 
	WORD id;          //fragment identifier 
	WORD offset: 13;  //this fragment's offset in the whole ip 
	WORD mf : 1;  //more fragment 
	WORD df : 1;  //dont fragment 
	WORD rv : 1;  //reserved 
	BYTE ttl;         //time to live 
	BYTE protocol;    //protocal id 
	WORD checksum;    //check sum of header 
	IP_ADDR src;        //source ip address 
	IP_ADDR dst;        //destination ip address 
}; 
 
struct TCP 
{ 
	WORD  srcPort;  //source port 
	WORD  dstPort;  //dest port 
	DWORD seqNum;   //sequence number 
	DWORD ackNum;   //acknowledge number 
    WORD fin: 1; 
    WORD syn: 1; 
    WORD rst: 1; 
    WORD psh: 1; 
    WORD ack: 1; 
    WORD urg: 1; 
	WORD rv1 : 2;   //reserved bits    
	WORD rv2 : 4;   //reserved bits    
	WORD hl : 4;   //header lenth of DOWRD 
	WORD window; 
	WORD checksum; 
	WORD urgPoint; 
}; 
 
struct PSEUDO_TCP_HEADER 
{ 
	IP_ADDR src; 
	IP_ADDR dst; 
	BYTE zero; //MUST BE 0 
	BYTE protocol; //MUST BE IP_PROTOCAL_TCP 
	WORD tcpLen; // tcpLen = tcp header len + data len 
}; 
 
struct PSEUDO_UDP_HEADER 
{ 
	IP_ADDR src; 
	IP_ADDR dst; 
	BYTE zero; //MUST BE 0 
	BYTE protocol; //MUST BE IP_PROTOCAL_UDP 
	WORD udpLen; // udpLen = udp header len + data len 
}; 
 
struct TCP_ADDR 
{ 
	IP_ADDR ip; 
	WORD  port; 
}; 
 
struct SOCKET_DATA 
{ 
	DWORD seq;  //next number of byte to be received 
	BOOL closed; 
}; 
 
struct SOCKET_KEY 
{ 
	TCP_ADDR addr[2]; //two acsendently ordered TCP address 
}; 
 
struct UDP 
{ 
	WORD srcPort; 
	WORD dstPort; 
	WORD length; 
	WORD checksum; 
}; 
 
#endif