📄 spoofsocket.h
字号:
unsigned short CheckSum; // IP Header checksum
unsigned int sourceIPAddress; // Source address
unsigned int destIPAddress; // Destination Address
} IpHeader;
//##ModelId=3B43E6F0013A
typedef IpHeader FAR * LPIpHeader;
#define IpHeaderLength sizeof(IpHeader)
//Some IP constants
//Version
#define IpVersion 4
//Service types
#define IpService_NETWORK_CONTROL 111
#define IpService_INTERNETWORK_CONTROL 110
#define IpService_CRITIC_ECP 101
#define IpService_FLASH_OVERIDE 100
#define IpService_FLASH 011
#define IpService_IMMEDIATE 010
#define IpService_PRIORITY 001
#define IpService_ROUTINE 0
//Fragmetation flag
#define IpFragFlag_MAY_FRAG 0x0000
#define IpFragFlag_MORE_FRAG 0x2000
#define IpFragFlag_LAST_FRAG 0x0000
#define IpFragFlag_DONT_FRAG 0x4000
//Internet protocols
#define IpProtocol_ICMP 1
#define IpProtocol_TCP 6
#define IpProtocol_UDP 17
#define IP_DEF_TTL 128
#define IPOption_WRAPSIZE 4
#define IPOption_SIZE 40
#define IPOption_MAX_ROUTES 10
//##ModelId=3B43E6F00162
typedef struct _Routing
{
int iRoutes;
unsigned long ulRoutes[IPOption_MAX_ROUTES];
} tRouting;
//##ModelId=3B43E6F003CF
class CIPOptions : protected CSpoofBase
/*
对ip option域的处理
*/
{
public:
//ctor and dtor
//##ModelId=3B43E6F003DA
CIPOptions();
//##ModelId=3B43E6F10005
virtual ~CIPOptions();
private:
//Do we autopard
//##ModelId=3B43E6F1000F
BOOL m_AutoPAD;
//Length of the buffer
//##ModelId=3B43E6F10023
int m_BufferLength;
//The buffer
//##ModelId=3B43E6F1002D
char* m_Buffer;
protected:
//Add option route
//##ModelId=3B43E6F10041
void AddOption_Route(tOptionType tRouteType,tRouting tRoute);
//Add data to the buffer
//##ModelId=3B43E6F1004C
void AddToBuffer(char* buf,int BufLength);
//Create an options prototype
//##ModelId=3B43E6F1005F
tOptionType GetOption(unsigned char CopyFlag,unsigned char ClassFlag,unsigned char TypeFlag);
public:
//Add options (according to the method name)
//##ModelId=3B43E6F10073
void AddOption_Timestamp(tOptionType tFlags,int iMaxStamps);
//##ModelId=3B43E6F1007F
void AddOption_LooseRoute(tRouting tRoute);
//##ModelId=3B43E6F10088
void AddOption_RecordRoute(int iMaxRoutes);
//##ModelId=3B43E6F1009B
void AddOption_StrictRoute(tRouting tRoute);
//##ModelId=3B43E6F100A5
void AddOption_Stream(unsigned short usStreamID);
//##ModelId=3B43E6F100AF
virtual void AddOption_Security(unsigned short usType);
//##ModelId=3B43E6F100C3
virtual void AddOption_Nothing();
//Delete all the options
//##ModelId=3B43E6F100CE
void Reset();
//Set the autopad
//##ModelId=3B43E6F100D8
void SetAutoPad(BOOL bAutoPAD);
//Add list terminator
//##ModelId=3B43E6F100EC
virtual void AddOption_ENDLIST();
//Get the length of the buffer
//##ModelId=3B43E6F100F6
int GetBufferLength();
//Get the buffer itself
//##ModelId=3B43E6F10100
const char* GetBuffer();
};
//Value not specified within winsock2
//Thanks on this one goes to Bjorn Stickler author of Natas
#ifndef SIO_RCVALL
#define SIO_RCVALL 0x98000001
#endif
//##ModelId=3B43E6F20165
class CSpoofSocket : public CSpoofBase
{
public:
//##ModelId=3B43E6F3015D
typedef enum _SocketShutdown
{
ssReceive,
ssSend,
ssBoth
} SocketShutdown;
public:
//Get the port if the remote connected system
//##ModelId=3B43E6F20170
unsigned short GetPeerPort();
//Close one way of the socket (receive,send,both)
//##ModelId=3B43E6F20179
BOOL Shutdown(SocketShutdown eHow);
//ctor and dtor
//##ModelId=3B43E6F20183
CSpoofSocket();
//##ModelId=3B43E6F201A1
virtual ~CSpoofSocket();
//Get the address of the remote connected system
//##ModelId=3B43E6F201BF
long GetPeerAddress();
//Turn to be a sniffer socket
//##ModelId=3B43E6F201C9
virtual BOOL Sniff(BOOL bSniff);
//Resolve a DNS entry
//##ModelId=3B43E6F201D3
long ResolveDNS(LPCSTR lpAddress);
//Check if an address is valid
//##ModelId=3B43E6F201D5
BOOL ValidAddress(LPCSTR lpAddress);
//Recieve data from remote socket
//##ModelId=3B43E6F201DE
virtual int Receive(char* buf,int bufLen);
//Get the IP options
//##ModelId=3B43E6F201EA
CIPOptions* GetOptions();
//Do we allow options on this socket ?
//##ModelId=3B43E6F201FB
void SetOptions(BOOL bOptions);
//Are we a raw socket ?
//##ModelId=3B43E6F20205
void SetRaw(BOOL bRaw);
//Set the packet Time to live
//##ModelId=3B43E6F20219
void SetTTL(unsigned char ucTTL);
//Calculate the checksum for TCP and UDP
//##ModelId=3B43E6F2022D
unsigned short CalculatePseudoChecksum(char *buf, int BufLength,LPCSTR lpDestinationAddress,int iPacketLength);
//Set source address for spoofing
//##ModelId=3B43E6F20241
void SetSourceAddress(LPCSTR lpSourceAddress);
//Close the socket
//##ModelId=3B43E6F20256
virtual BOOL Close();
//Bind to a specific address
//##ModelId=3B43E6F2026A
virtual BOOL Bind(LPCSTR lpSourceAddress,int iPort=0);
//Send data to a socket
//##ModelId=3B43E6F20288
virtual BOOL Send(LPCSTR lpDestinationAddress,char* buf,int bufLength,unsigned short usDestinationPort=0);
//Create a socket
//##ModelId=3B43E6F202A6
BOOL Create(int iProtocol);
//Create an IP header
//##ModelId=3B43E6F202CE
static LPIpHeader ConstructStaticIPHeader(unsigned char ucProtocol,
unsigned short usFragmentationFlags,
unsigned char ucTTL,
unsigned short usIdentification,
unsigned char ucHeaderLength);
protected:
//Create an IP header
//##ModelId=3B43E6F202DB
virtual LPIpHeader ConstructIPHeader (unsigned char ucProtocol,
unsigned short usFragmentationFlags,
unsigned char ucTTL,
unsigned short usIdentification,
unsigned char ucHeaderLength);
//Check this socket is valid
//##ModelId=3B43E6F20300
BOOL CheckSocketValid();
//Attach to a socket
//##ModelId=3B43E6F20314
void AssignSocket(SOCKET sok,unsigned char ucProtocol=IPPROTO_TCP);
//Attach to a socket by constructor
//##ModelId=3B43E6F20320
CSpoofSocket(SOCKET sok);
//Indication if we are a raw socket
//##ModelId=3B43E6F20346
BOOL isRaw();
//Set the protocol we are working on
//##ModelId=3B43E6F20350
void SetProtocol(int iProtocol);
//Calculate the data checksum
//##ModelId=3B43E6F20364
unsigned short CalculateChecksum(unsigned short* usBuf,int iSize);
//Is our socket valid ?
//##ModelId=3B43E6F20382
BOOL ValidSocket();
//Get the socket handle
//##ModelId=3B43E6F20396
SOCKET GetHandle();
//initialize all the private memebers
//##ModelId=3B43E6F203AA
virtual void InitializeIP();
//Set the address in the IP header
//##ModelId=3B43E6F203B5
virtual void SetIPHeaderAddress(LPIpHeader lpHead,LPCSTR lpSourceAddress,LPCSTR lpDestinationAddress);
//Last stop before sending the header
//##ModelId=3B43E6F203DC
virtual void FinalIPHeader(LPIpHeader lpHead);
//Remote address we are conencted to
//##ModelId=3B43E6F203E7
sockaddr_in m_ConnectedTo;
private:
//Reseolve DNS
//##ModelId=3B43E6F30012
sockaddr_in pResolveDNS(LPCSTR lpAddress);
//Our options
//##ModelId=3B43E6F30027
CIPOptions* m_IPOptions;
//Do we have options
//##ModelId=3B43E6F30030
BOOL m_Options;
//Are we raw ?
//##ModelId=3B43E6F30044
BOOL m_Raw;
//Time to live
//##ModelId=3B43E6F30058
unsigned char m_TTL;
//The protocol
//##ModelId=3B43E6F30062
unsigned char m_Protocol;
//Our source address
//##ModelId=3B43E6F30076
LPCSTR m_SourceAddress;
//The actual socket handle
//##ModelId=3B43E6F30095
SOCKET m_SpoofSocket;
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SPOOFSOCKET_H__5BAEA068_961A_4652_8BBD_90B78F6FBB09__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -