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