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

📄 cpgpnetippacket.h

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 H
字号:
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	$Id: CPGPnetIPPacket.h,v 1.2 2002/08/06 20:10:26 dallen Exp $
____________________________________________________________________________*/
#ifndef Included_CPGPnetIPPacket_h	/* [ */
#define Included_CPGPnetIPPacket_h

class CPGPnetEthernetHeader
{
public:
	CPGPnetEthernetHeader();
	~CPGPnetEthernetHeader();

	PGPBoolean IsIP();
	PGPBoolean IsARP();
	PGPBoolean IsBroadcast();
	unsigned char* GetSrcAddress();
	unsigned char* GetDstAddress();
	unsigned short GetEthernetProtocolNet();
	unsigned short GetEthernetProtocol();

	void SetIP();
	void SetARP();
	void SetBroadcast();
	void SetSrcAddress(unsigned char* srcAddress);
	void SetDstAddress(unsigned char* dstAddress);
	void SetEthernetProtocol(unsigned short protocol);
	void SetEthernetProtocolNet(unsigned short protocolNet);

	unsigned short CopyToPlainBuffer(PVOID buffer);

public:
	ETHERNET_HEADER ethernet_header;
};

class CPGPnetIPHeader 
{
public:
	CPGPnetIPHeader();
	~CPGPnetIPHeader();

	PGPBoolean IsTCP();
	PGPBoolean IsUDP();
	PGPBoolean IsICMP();
	unsigned char GetIPProtocol();
	PGPBoolean IsBroadcast();
	PGPUInt32 GetSrcAddress();
	PGPUInt32 GetDstAddress();
	PGPUInt32 GetSrcAddressNet();
	PGPUInt32 GetDstAddressNet();
	
	void SetTCP();
	void SetUDP();
	void SetICMP();
	void SetIPProtocol(unsigned char ip_protocol);
	void SetBroadcast();
	void SetSrcAddress(PGPUInt32 ip_address);
	void SetDstAddress(PGPUInt32 ip_address);
	void SetSrcAddressNet(PGPUInt32 ip_address_net);
	void SetDstAddressNet(PGPUInt32 ip_address_net);

	unsigned short GetId();
	unsigned short GetIdNet();
	void SetId(unsigned short ip_id);
	void SetIdNet(unsigned short ip_id_net);

	unsigned short GetChecksum();
	void SetChecksum(unsigned short checksum);

	unsigned short GetIPLength();
	void SetIPLength(unsigned short ip_len);

	void UpdateChecksum();

	unsigned short CopyToPlainBuffer(PVOID buffer);

public:
	CPGPnetEthernetHeader ethernet_header;
	IP_HEADER ip_header;
#define default_versionandheaderlength		0x45
#define default_tos							0x0
#define default_foff						0x0
#define default_ttl							0x80

};

class CPGPnetUDPHeader
{
public:
	CPGPnetUDPHeader();
	~CPGPnetUDPHeader();

	PGPBoolean IsBOOTP();
	PGPBoolean IsBOOTPClient();
	PGPBoolean IsBOOTPServer();

	unsigned short GetUDPLen();
	unsigned short GetSrcPort();
	unsigned short GetDstPort();
	unsigned short GetSrcPortNet();
	unsigned short GetDstPortNet();
	unsigned short GetChecksum();

	void SetUDPLen(unsigned short udp_len);
	void SetSrcPort(unsigned short port);
	void SetDstPort(unsigned short port);
	void SetSrcPortNet(unsigned short port_net);
	void SetDstPortNet(unsigned short port_net);
	void SetChecksum(unsigned short checksum);

	void UpdateChecksum();

	unsigned short CopyToPlainBuffer(PVOID buffer);

public:
	CPGPnetIPHeader	ip_header;
	UDP_HEADER udp_header;
};

typedef enum
{
	TYPE_DISCOVER = 1,
	TYPE_OFFER,
	TYPE_REQUEST,
	TYPE_DECLINE,
	TYPE_ACK,
	TYPE_NAK,
	TYPE_RELEASE,
	TYPE_INFORM,
	TYPE_INVALID
} DHCP_TYPE;

typedef enum
{
	CODE_DHCP_TYPE		= 0x35,
	CODE_SUBNET_MASK	= 0x01,
	CODE_T1				= 0x3a,
	CODE_T2				= 0x3b,
	CODE_LEASE_TIME		= 0x33,
	CODE_SERVER_ID		= 0x36,
	CODE_DOMAIN_NAME	= 0x0f,
	CODE_ROUTE			= 0x03,
	CODE_WINS_SERVER	= 0x2c,
	CODE_WINS_TYPE		= 0x2e,
	CODE_DNS_SERVER		= 0x06,
	CODE_END_OPTION		= 0xFF
} DHCP_CODE;

class CPGPnetDHCPPacket
{
#define DHCP_MAGIC_COOKIE  0x63538263
#define MAXIMUM_DHCP_OPTION_TOTAL_LEN 256
#define MAXIMUM_DHCP_OPTION_ITEM_LEN 32

public:

	CPGPnetDHCPPacket();
	~CPGPnetDHCPPacket();

	CPGPnetDHCPPacket(PVOID block, UINT block_len);

	void SetHeader(PVOID block);

// Header related functions
public:

	PGPUInt32 GetClientIPAddress();
	PGPUInt32 GetYourIPAddress();
	PGPUInt32 GetServerIPAddress();
	unsigned char* GetClientEthernetAddress();
	PGPUInt32 GetTransactionID();

	void SetClientIPAddress(PGPUInt32 ip_address);
	void SetYourIPAddress(PGPUInt32 ip_address);
	void SetServerIPAddress(PGPUInt32 ip_address);
	void SetClientEtherenetAddress(unsigned char* ethernet_address);
	void SetTransactionID(PGPUInt32 transactionID);

	void BuildGenericResponse();

	void DecodeOptionFields();

// Options related functions
public:

	DHCP_TYPE GetDHCPType();
	void SetDHCPType(DHCP_TYPE dhcpType);

	void GetDHCPDNSServer(PGPUInt32 *dns1, PGPUInt32 *dns2);

	void SetDHCPSubnetMask(PGPUInt32 subnetMask);
	void SetDHCPDomainName(char *domainName);
	void SetDHCPRoute(PGPUInt32 route);
	void SetDHCPWINSServer(PGPUInt32 wins1, PGPUInt32 wins2);
	void SetDHCPWINSType(unsigned char winsType);
	void SetDHCPDNSServer(PGPUInt32 dns1, PGPUInt32 dns2);

	void SetT1(PGPUInt32 t1);
	void SetT2(PGPUInt32 t2);
	void SetLeaseTime(PGPUInt32 leaseTime);
	void SetServerId(PGPUInt32 serverId);

	unsigned short CopyToPlainBuffer(PVOID buffer);

public:
	typedef struct tagOptionItem {
		UINT		len;
		unsigned char value[MAXIMUM_DHCP_OPTION_ITEM_LEN];
	} OptionItem;

	OptionItem options[CODE_END_OPTION];

	CPGPnetUDPHeader udp_header;
	DHCP_HEADER dhcp_header;
	unsigned char OptionField[MAXIMUM_DHCP_OPTION_TOTAL_LEN];
	unsigned short eooPos;

};

typedef enum
{
	ARP_REQUEST = 0x0001,
	ARP_REPLY,
	RARP_REQUEST,
	RARP_REPLY
} ARP_CODE;

#define ARP_PAD_LEN 18

class CPGPnetARPPacket
{

public:
	CPGPnetARPPacket();
	~CPGPnetARPPacket();

	CPGPnetARPPacket(PVOID block, UINT block_len);

	ARP_CODE			GetARPCode();
	unsigned char*		GetSrcEthernetAddress();
	unsigned char*		GetDstEthernetAddress();
	PGPUInt32		GetSrcIPAddress();
	PGPUInt32		GetDstIPAddress();

	void				SetARPCode(ARP_CODE arpCode);
	void				SetSrcEthernetAddress(unsigned char* ethernetAddress);
	void				SetDstEthernetAddress(unsigned char* ethernetAddress);
	void				SetSrcIPAddress(PGPUInt32 ipAddress);
	void				SetDstIPAddress(PGPUInt32 ipAddress);

	unsigned short CopyToPlainBuffer(PVOID buffer);

public:
	
	CPGPnetEthernetHeader ethernet_header;
	ARP_HEADER arp_header;

};

class CPGPnetICMPPacket : public CPGPnetIPHeader
{
public:
	ICMP_HEADER icmp_header;
};

#endif /* ] Included_CPGPnetIPPacket_h */

⌨️ 快捷键说明

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