?? dualserver.h
字號(hào):
/**************************************************************************
* Copyright (C) 2005 by Achal Dhir *
* achaldhir@gmail.com *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
//This file defines all structures and constants
//for both DHCP and DNS Servers
#include <string>
#include <map>
using namespace std;
#define my_inet_addr inet_addr
#define MAX_SERVERS 16
#define RCODE_NOERROR 0
#define RCODE_FORMATERROR 1
#define RCODE_SERVERFAIL 2
#define RCODE_NAMEERROR 3
#define RCODE_NOTIMPL 4
#define RCODE_REFUSED 5
#define RCODE_YXDOMAIN 6
#define RCODE_YXRRSET 7
#define RCODE_NXRRSET 8
#define RCODE_NOTAUTH 9
#define RCODE_NOTZONE 10
#define OPCODE_STANDARD_QUERY 0
#define OPCODE_INVERSE_QUERY 1
#define OPCODE_SRVR_STAT_REQ 2
#define OPCODE_DYNAMIC_UPDATE 5
#define DNS_TYPE_A 1
#define DNS_TYPE_NS 2
#define DNS_TYPE_MD 3
#define DNS_TYPE_MF 4
#define DNS_TYPE_CNAME 5
#define DNS_TYPE_SOA 6
#define DNS_TYPE_MB 7
#define DNS_TYPE_MG 8
#define DNS_TYPE_MR 9
#define DNS_TYPE_NULL 10
#define DNS_TYPE_WKS 11
#define DNS_TYPE_PTR 12
#define DNS_TYPE_HINFO 13
#define DNS_TYPE_MINFO 14
#define DNS_TYPE_MX 15
#define DNS_TYPE_TXT 16
#define DNS_TYPE_AAAA 28
#define DNS_TYPE_IXFR 251
#define DNS_TYPE_AXFR 252
#define DNS_TYPE_MAILB 253
#define DNS_TYPE_MAILA 254
#define DNS_TYPE_ANY 255
#define DNS_CLASS_IN 1
#define DNS_CLASS_CS 2
#define DNS_CLASS_CH 3
#define DNS_CLASS_HS 4
#define DNS_CLASS_NONE 254
#define DNS_CLASS_ANY 255
#define IPPORT_DNS 53
struct dnsHeader
{
WORD xid;
union
{
WORD flags;
struct
{
BYTE rd: 1; //Recusion Desired
BYTE tc: 1; //Truncated
BYTE aa: 1; //Authoritative Answer
BYTE opcode: 4; //OpCode
BYTE qr: 1; //Query/Response
BYTE rcode: 4; //rcode
BYTE at: 1; //Answer Authenticated
BYTE z: 1; //Filler
BYTE filler: 1; //Not Used
BYTE ra: 1; //Resusion Available
};
};
union {
WORD zcount;
WORD qdcount;
};
union {
WORD prcount;
WORD ancount;
};
union {
WORD ucount;
WORD nscount;
};
union {
WORD adcount;
WORD arcount;
};
};
struct dnsPacket
{
struct dnsHeader header;
char data;
};
struct data6
{
char zone[256];
WORD dnLen;
DWORD dns;
};
struct data7 //cache
{
char *mapname;
time_t expiry;
union
{
struct
{
BYTE dataType;
BYTE cacheInd;
BYTE sockInd;
BYTE dnsIndex;
};
// struct
// {
// BYTE dataType1;
// BYTE ext;
// WORD refCount;
// };
struct
{
BYTE dataType2;
char rangeInd;
WORD dhcpInd;
};
struct
{
BYTE dataType3;
BYTE filler;
WORD mailPref;
};
};
union
{
int bytes;
SOCKADDR_IN *source;
BYTE *options;
DWORD serial;
};
union
{
BYTE *response;
char *hostname;
char *query;
DWORD ip;
};
};
typedef multimap<string, data7*> hostMap;
typedef map<string, data7*> dhcpMap;
typedef multimap<time_t, data7*> expiryMap;
struct data5 //dns request
{
dnsPacket *dnsp;
char raw[2048];
char *data;
char query[256];
char cname[256];
char mapname[256];
data7 cache;
hostMap::iterator iterBegin;
SOCKET sock;
SOCKADDR_IN addr;
socklen_t sockLen;
int bytes;
HANDLE hThread;
WORD qtype;
WORD qclass;
BYTE localCode;
BYTE sockInd;
};
enum
{
NONE,
LOCAL_A,
LOCAL_PTR,
LOCALHOST_A,
LOCALHOST_PTR,
SERVER_A_AUTH,
SERVER_PTR_AUTH,
SERVER_A_NAUTH,
SERVER_PTR_NAUTH,
LOCAL_CNAME,
EXT_CNAME,
STATIC_A_AUTH,
STATIC_PTR_AUTH,
STATIC_A_NAUTH,
STATIC_PTR_NAUTH,
MX,
NS,
SOA,
AXFR,
CACHED,
NON_CACHED,
QUEUE,
DHCP
};
struct data12 //dns range
{
DWORD rangeStart;
DWORD rangeEnd;
};
struct dns_rr
{
char *name;
WORD type, _class;
DWORD ttl;
WORD rdlength;
char *rdata;
union {
struct
{
long address;
} a;
struct
{
char *cname;
} cname;
struct
{
char *cpu, *os;
} hinfo;
struct
{
char *madname;
} mb;
struct
{
char *madname;
} md;
struct
{
char *madname;
} mf;
struct
{
char *mgmname;
} mg;
struct
{
char *rmailbx, *emailbx;
} minfo;
struct
{
char *newname;
} mr;
struct
{
int preference;
char *exchange;
} mx;
struct
{
char *nsdname;
} ns;
struct
{
char *data;
} null;
struct
{
char *ptrdname;
} ptr;
struct
{
char *mname, *rname;
unsigned serial, refresh, retry, expire, minimum;
} soa;
struct
{
char **txt_data;
} txt;
struct
{
int address;
BYTE protocol;
int bitmapsize;
char *bitmap;
} wks;
} data;
};
struct dnsConnType
{
SOCKET sock;
SOCKADDR_IN addr;
DWORD server;
};
#define DHCP_REQUEST 1
#define DHCP_REPLY 2
#define DHCP_MESS_NONE 0
#define DHCP_MESS_DISCOVER 1
#define DHCP_MESS_OFFER 2
#define DHCP_MESS_REQUEST 3
#define DHCP_MESS_DECLINE 4
#define DHCP_MESS_ACK 5
#define DHCP_MESS_NAK 6
#define DHCP_MESS_RELEASE 7
#define DHCP_MESS_INFORM 8
// DHCP OPTIONS
#define DHCP_OPTION_PAD 0
#define DHCP_OPTION_NETMASK 1
#define DHCP_OPTION_TIMEOFFSET 2
#define DHCP_OPTION_ROUTER 3
#define DHCP_OPTION_TIMESERVER 4
#define DHCP_OPTION_NAMESERVER 5
#define DHCP_OPTION_DNS 6
#define DHCP_OPTION_LOGSERVER 7
#define DHCP_OPTION_COOKIESERVER 8
#define DHCP_OPTION_LPRSERVER 9
#define DHCP_OPTION_IMPRESSSERVER 10
#define DHCP_OPTION_RESLOCSERVER 11
#define DHCP_OPTION_HOSTNAME 12
#define DHCP_OPTION_BOOTFILESIZE 13
#define DHCP_OPTION_MERITDUMP 14
#define DHCP_OPTION_DOMAINNAME 15
#define DHCP_OPTION_SWAPSERVER 16
#define DHCP_OPTION_ROOTPATH 17
#define DHCP_OPTION_EXTSPATH 18
#define DHCP_OPTION_IPFORWARD 19
#define DHCP_OPTION_NONLOCALSR 20
#define DHCP_OPTION_POLICYFILTER 21
#define DHCP_OPTION_MAXREASSEMBLE 22
#define DHCP_OPTION_IPTTL 23
#define DHCP_OPTION_PATHMTUAGING 24
#define DHCP_OPTION_PATHMTUPLATEAU 25
#define DHCP_OPTION_INTERFACEMTU 26
#define DHCP_OPTION_SUBNETSLOCAL 27
#define DHCP_OPTION_BCASTADDRESS 28
#define DHCP_OPTION_MASKDISCOVERY 29
#define DHCP_OPTION_MASKSUPPLIER 30
#define DHCP_OPTION_ROUTERDISCOVERY 31
#define DHCP_OPTION_ROUTERSOLIC 32
#define DHCP_OPTION_STATICROUTE 33
#define DHCP_OPTION_TRAILERENCAPS 34
#define DHCP_OPTION_ARPTIMEOUT 35
#define DHCP_OPTION_ETHERNETENCAPS 36
#define DHCP_OPTION_TCPTTL 37
#define DHCP_OPTION_TCPKEEPALIVEINT 38
#define DHCP_OPTION_TCPKEEPALIVEGRBG 39
#define DHCP_OPTION_NISDOMAIN 40
#define DHCP_OPTION_NISSERVERS 41
#define DHCP_OPTION_NTPSERVERS 42
#define DHCP_OPTION_VENDORSPECIFIC 43
#define DHCP_OPTION_NETBIOSNAMESERV 44
#define DHCP_OPTION_NETBIOSDGDIST 45
#define DHCP_OPTION_NETBIOSNODETYPE 46
#define DHCP_OPTION_NETBIOSSCOPE 47
#define DHCP_OPTION_X11FONTS 48
#define DHCP_OPTION_X11DISPLAYMNGR 49
#define DHCP_OPTION_REQUESTEDIPADDR 50
#define DHCP_OPTION_IPADDRLEASE 51
#define DHCP_OPTION_OVERLOAD 52
#define DHCP_OPTION_MESSAGETYPE 53
#define DHCP_OPTION_SERVERID 54
#define DHCP_OPTION_PARAMREQLIST 55
#define DHCP_OPTION_MESSAGE 56
#define DHCP_OPTION_MAXDHCPMSGSIZE 57
#define DHCP_OPTION_RENEWALTIME 58
#define DHCP_OPTION_REBINDINGTIME 59
#define DHCP_OPTION_VENDORCLASSID 60
#define DHCP_OPTION_CLIENTID 61
#define DHCP_OPTION_NISPLUSDOMAIN 64
#define DHCP_OPTION_NISPLUSSERVERS 65
#define DHCP_OPTION_TFTPSERVER 66
#define DHCP_OPTION_BOOTFILE 67
#define DHCP_OPTION_MOBILEIPHOME 68
#define DHCP_OPTION_SMTPSERVER 69
#define DHCP_OPTION_POP3SERVER 70
#define DHCP_OPTION_NNTPSERVER 71
#define DHCP_OPTION_WWWSERVER 72
#define DHCP_OPTION_FINGERSERVER 73
#define DHCP_OPTION_IRCSERVER 74
#define DHCP_OPTION_STSERVER 75
#define DHCP_OPTION_STDASERVER 76
#define DHCP_OPTION_USERCLASS 77
#define DHCP_OPTION_SLPDIRAGENT 78
#define DHCP_OPTION_SLPDIRSCOPE 79
#define DHCP_OPTION_CLIENTFQDN 81
#define DHCP_OPTION_RELAYAGENTINFO 82
#define DHCP_OPTION_NDSSERVERS 85
#define DHCP_OPTION_NDSTREENAME 86
#define DHCP_OPTION_NDSCONTEXT 87
#define DHCP_OPTION_AUTHENTICATION 90
#define DHCP_OPTION_CLIENTSYSTEM 93
#define DHCP_OPTION_CLIENTNDI 94
#define DHCP_OPTION_LDAP 95
#define DHCP_OPTION_UUID_GUID 97
#define DHCP_OPTION_USER_AUTH 98
#define DHCP_OPTION_NETINFOADDRESS 112
#define DHCP_OPTION_NETINFOTAG 113
#define DHCP_OPTION_URL 114
#define DHCP_OPTION_AUTO_CONFIG 116
#define DHCP_OPTION_NAMESERVICESEARCH 117
#define DHCP_OPTION_SUBNETSELECTION 118
#define DHCP_OPTION_DOMAINSEARCH 119
#define DHCP_OPTION_SIPSERVERSDHCP 120
#define DHCP_OPTION_CLASSLESSSTATICROUTE 121
#define DHCP_OPTION_CCC 122
#define DHCP_OPTION_GEOCONF 123
#define DHCP_OPTION_V_IVENDORCLASS 124
#define DHCP_OPTION_V_IVENDOR_SPECIFIC 125
#define DHCP_OPTION_TFPTSERVERIPADDRESS 128
#define DHCP_OPTION_CALLSERVERIPADDRESS 129
#define DHCP_OPTION_DISCRIMINATIONSTRING 130
#define DHCP_OPTION_REMOTESTATISTICSSERVER 131
#define DHCP_OPTION_802_1PVLANID 132
#define DHCP_OPTION_802_1QL2PRIORITY 133
#define DHCP_OPTION_DIFFSERVCODEPOINT 134
#define DHCP_OPTION_HTTPPROXYFORPHONE_SPEC 135
#define DHCP_OPTION_SERIAL 253
#define DHCP_OPTION_NEXTSERVER 254
#define DHCP_OPTION_END 255
//#define DHCP_VENDORDATA_SIZE 272
//#define DHCP_VENDORDATA_SIZE 64
//#define DHCP_VENDORDATA_SIZE 784
//#define DHCP_PACKET_SIZE 1024
//#define DHCP_MIN_SIZE 44
//#define DHCP_MAX_CLIENTS 254
#define IPPORT_DHCPS 67
#define IPPORT_DHCPC 68
#define VM_STANFORD 0x5354414EUL
#define VM_RFC1048 0x63825363UL
struct data3
{
BYTE opt_code;
BYTE size;
BYTE value[256];
};
struct dhcp_header
{
BYTE bp_op;
BYTE bp_htype;
BYTE bp_hlen;
BYTE bp_hops;
DWORD bp_xid;
WORD bp_secs;
BYTE bp_broadcast;
BYTE bp_spare;
DWORD bp_ciaddr;
DWORD bp_yiaddr;
DWORD bp_siaddr;
DWORD bp_giaddr;
BYTE bp_chaddr[16];
char bp_sname[64];
BYTE bp_file[128];
BYTE bp_magic_num[4];
};
struct dhcp_packet
{
dhcp_header header;
BYTE vend_data[1024 - sizeof(dhcp_header)];
};
struct data13 //dhcp range
{
DWORD rangeStart;
DWORD rangeEnd;
time_t *expiry;
WORD *dhcpIndex;
DWORD mask;
};
struct data1 //dhcpRequst
{
DWORD lease;
union
{
char raw[sizeof(dhcp_packet)];
dhcp_packet dhcpp;
};
char hostname[256];
DWORD server;
DWORD reqIP;
int bytes;
SOCKADDR_IN addr;
WORD messsize;
data7 *dhcpEntry;
data3 agentOption;
//SOCKET tcpSock;
DWORD serial;
BYTE paramreqlist[256];
BYTE opAdded[256];
BYTE req_type;
BYTE resp_type;
BYTE sockInd;
};
struct dhcpConnType
{
SOCKET sock;
SOCKADDR_IN addr;
DWORD server;
DWORD mask;
int broadCastVal;
int broadCastSize;
int reUseVal;
int reUseSize;
};
struct data8 //client
{
BYTE bp_chaddr[16];
DWORD ip;
time_t expiry;
char hostname[64];
};
struct data2
{
WSADATA wsaData;
dhcpConnType dhcpConn[MAX_SERVERS];
dnsConnType dnsUdpConn[MAX_SERVERS];
dnsConnType forwConn;
dhcpConnType dhcpReplConn;
dnsConnType dnsTcpConn[MAX_SERVERS];
char zone[256];
BYTE zLen;
char authority[256];
BYTE aLen;
char servername[128];
char servername_fqn[256];
DWORD dns[MAX_SERVERS];
DWORD tservers[MAX_SERVERS];
DWORD listenServers[MAX_SERVERS];
DWORD servers[MAX_SERVERS];
DWORD serverMasks[MAX_SERVERS];
DWORD zoneServers[MAX_SERVERS];
DWORD mask;
DWORD network;
DWORD lease;
DWORD serial;
DWORD refresh;
DWORD retry;
DWORD expire;
DWORD minimum;
time_t expireTime;
SOCKET maxFD;
data6 dnsRoutes[32];
data12 dnsRanges[32];
data13 dhcpRanges[32];
DWORD rangeStart;
DWORD rangeEnd;
DWORD routers[MAX_SERVERS];
WORD dhcpIndex;
BYTE globalOptions[sizeof(dhcp_packet) - sizeof(dhcp_header)];
BYTE currentDNS;
BYTE queriesFailed;
BYTE logLevel;
BYTE authorized;
BYTE replication;
};
struct data4
{
char op_name[40];
BYTE op_code;
BYTE op_size;
};
struct data15
{
union
{
DWORD ip;
BYTE octate[4];
};
};
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -