⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opendhcpd.h

📁 Linux下的DHCP服务器程序源代码, 实现DHCP Server端协议
💻 H
字号:
/***************************************************************************   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#define MAX_SERVERS 8#ifndef LOG_MAKEPRI#define	LOG_MAKEPRI(fac, pri)	(((fac) << 3) | (pri))#endif#ifndef SIOCGIFCONF#include <sys/sockio.h>#endif#ifndef _UIO_H_#include <sys/uio.h>#endif/*//#ifndef _LINUX_IN_H//#ifndef _NETINET_IN_Hstruct in_pktinfo{	unsigned int   ipi_ifindex;  // Interface index	struct in_addr ipi_spec_dst; // Local address	struct in_addr ipi_addr;     // Header Destination address};typedef struct in_pktinfo IN_PKTINFO;//#endif//#endif*/#ifndef INADDR_NONE#define INADDR_NONE ULONG_MAX#endif#ifndef IFF_DYNAMIC#define IFF_DYNAMIC 0x8000#endif#define WORD unsigned short#define BYTE unsigned char#define DWORD unsigned long#define SOCKET_ERROR -1#define INVALID_SOCKET -1#define SOCKADDR_IN sockaddr_in#define SOCKADDR sockaddr#define SOCKET int#define BOOL bool#define LPSOCKADDR sockaddr*#define closesocket closestruct data19{	SOCKET sock;	socklen_t sockLen;	SOCKADDR_IN addr;	int bytes;	char buffer[4096];};struct data7 //cache{	char *mapname;	time_t expiry;	unsigned no_route: 1;	unsigned fixed: 1;	unsigned bitmask: 5;	unsigned local: 1;	char rangeInd;	WORD dhcpInd;	union	{		BYTE *options;		DWORD source;	};	char *hostname;	DWORD ip;};typedef multimap<string, data7*> hostMap;typedef multimap<time_t, data7*> expiryMap;struct ConnType{	SOCKET sock;	SOCKADDR_IN addr;	DWORD server;	WORD port;};#define BOOTP_REQUEST  1#define BOOTP_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   0x63825363ULtypedef map<string, data7*> dhcpMap;struct data3{	BYTE opt_code;	BYTE size;	BYTE value[256];};struct msg_control{	uint cmsg_len;	int cmsg_level;	int cmsg_type;	in_pktinfo pktinfo;};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;	DWORD mask;	BYTE *macStart;	BYTE *macEnd;	time_t *expiry;	data7 **dhcpEntry;	BYTE *fixed;	BYTE *options;};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;	SOCKADDR_IN target;	socklen_t sockLen;	WORD messsize;	BYTE *vp;	data7 *dhcpEntry;	data3 agentOption;	data3 clientId;	DWORD serial;	msghdr msg;	iovec iov[1];	msg_control msgcontrol;	pthread_t threadId;	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 reUseVal;	int reUseSize;	union	{		int broadCastVal;		bool pktinfoVal;	};	union	{		int broadCastSize;		unsigned int pktinfoSize;	};};struct data4{	char op_name[40];	BYTE op_code;	BYTE op_size;};struct data15{	union	{		//DWORD ip;		unsigned ip:32;		BYTE octate[4];	};};struct data8 //client{	WORD dhcpInd;	BYTE bp_hlen;	BYTE local;	DWORD source;	DWORD ip;	time_t expiry;	BYTE bp_chaddr[16];	char hostname[64];};struct data2{	DhcpConnType dhcpConn[MAX_SERVERS];	DhcpConnType dhcpListener;	ConnType dhcpReplConn;	ConnType httpConn;	char servername[128];	char servername_fqn[256];	char zone[256];	BYTE zLen;	DWORD zoneServers[MAX_SERVERS];	DWORD allServers[MAX_SERVERS];	DWORD listenServers[MAX_SERVERS];	DWORD listenMasks[MAX_SERVERS];	DWORD staticServers[MAX_SERVERS];	DWORD staticMasks[MAX_SERVERS];	DWORD mask;	DWORD lease;	SOCKET maxFD;	data13 dhcpRanges[32];	DWORD rangeStart;	DWORD rangeEnd;	BYTE *options;	WORD dhcpIndex;	BYTE replication;	BYTE logLevel;	BYTE hasMac;};//Function Prototypesbool addServer(DWORD*, DWORD);bool chkQu(char*);bool checkMask(DWORD);bool getSection(char*, char*, BYTE, char*);bool isIP(char*);bool wildcmp(char*, char*);BYTE fromBase64(BYTE*, char*);BYTE getBaseValue(BYTE);BYTE makeLocal(char*);BYTE makeLocal(DWORD);BYTE pIP(void*, DWORD);BYTE pULong(void*, DWORD);BYTE pUShort(void*, WORD);BYTE* loadOptions(char*, char*, DWORD*, DWORD*, char*);char getRangeInd(DWORD);char* myTrim(char*, char*);char* getServerName(char*, DWORD);char* myGetToken(char*, BYTE);char* cloneString(char*);char* getHexValue(BYTE*, char*, BYTE*);char* hex2String(char*, BYTE*, BYTE, char);char* IP2String(char*, DWORD);char* IP62String(char*, BYTE*);char* myUpper(char* string);char* myLower(char* string);char* toBase64(BYTE*, BYTE);char* strqtype(char*, BYTE);data7* findEntry(BYTE, char*);data7* findEntry(BYTE, char*, BYTE);DWORD alad(data1*);DWORD calcMask(DWORD, DWORD);DWORD chad(data1*);DWORD getClassNetwork(DWORD);DWORD getRefresh(BYTE, char*);DWORD getSerial(char*);DWORD my_inet_addr(char*);DWORD resad(data1*);DWORD sdmess(data1*);DWORD sendRepl(data1 *req);DWORD updateDHCP(data1*);DWORD* findServer(DWORD*, DWORD);int getIndex(char, DWORD);void addDHCPRange(char*);void addEntry(BYTE, data7*);void addOptions(data1*);void calcRangeLimits(DWORD, DWORD, DWORD*, DWORD*);void catch_int(int sig_num);void checkSize(BYTE);void checkDNS(BYTE);void closeConn();void delDnsEntry(BYTE, data7*);void getDServ();void getServ();void getSecondary();void init();void logMess(char*, BYTE);void mySplit(char*, char*, char*, char);void *myCloseSocket(void*);void procHTTP(data19*);void pvdata(data1*, data3*);void recvRepl(data1*);void runProg();void showError(DWORD);void setLeaseExpiry(DWORD, time_t);void setLeaseExpiry(data7*, time_t, bool);void *updateStateFile(void*);WORD fUShort(void*);WORD gdmess(data1*, BYTE);WORD listSections(char*, int, char*);WORD myTokenize(char*, char*, char*, bool);WORD pQu(char*, char*);WORD qLen(char*);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -