📄 cpgpnetippacket.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 + -