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

📄 spoofsocket.h

📁 一个可订制ip packet的程序
💻 H
📖 第 1 页 / 共 2 页
字号:
	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 + -