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

📄 spoofsocket.cpp

📁 一个可订制ip packet的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	try
	{
		//Add option do nothing
		tOptionType OT;

		//Get the option
		OT=GetOption(IPOption_DONT_COPY,IPOption_CONTROL,IPOption_NO_OPERATION);

		//Add it to buffer
		AddToBuffer((char*)&OT,sizeof(OT));
	}
	ERROR_HANDLER("AddOption_Nothing")
}

//##ModelId=3B43E6F1005F
tOptionType CIPOptions::GetOption(unsigned char CopyFlag, unsigned char ClassFlag, unsigned char TypeFlag)
{
	//Return a single option type
	return CopyFlag | ClassFlag | TypeFlag;
}

//##ModelId=3B43E6F1004C
void CIPOptions::AddToBuffer(char *buf, int BufLength)
{
	if (m_BufferLength<IPOption_SIZE)
	{
		//Add our option to the buffer
		memcpy(m_Buffer+m_BufferLength,buf,BufLength);
		m_BufferLength+=BufLength;
	}
}

//##ModelId=3B43E6F10100
const char* CIPOptions::GetBuffer()
{
	return m_Buffer;
}

//##ModelId=3B43E6F100F6
int CIPOptions::GetBufferLength()
{
	try
	{
		//Check if auto pad or not
		if (m_AutoPAD)
			if (m_BufferLength/IPOption_WRAPSIZE==(m_BufferLength/IPOption_WRAPSIZE)*IPOption_WRAPSIZE && m_BufferLength>=IPOption_WRAPSIZE)
				return m_BufferLength;
			else
				return int((float)m_BufferLength/IPOption_WRAPSIZE+1)*IPOption_WRAPSIZE;
		else
			return m_BufferLength;
	}
	ERROR_HANDLER_RETURN("GetBufferLength",0)
}

//##ModelId=3B43E6F100EC
void CIPOptions::AddOption_ENDLIST()
{
	try
	{
		//End the list of options
		tOptionType OT;

		//Get the option
		OT=GetOption(IPOption_DONT_COPY,IPOption_CONTROL,IPOption_END_OPTION);

		//Add it to buffer
		AddToBuffer((char*)&OT,sizeof(OT));
	}
	ERROR_HANDLER("AddOption_ENDLIST")
}

//##ModelId=3B43E6F100D8
void CIPOptions::SetAutoPad(BOOL bAutoPAD)
{
	m_AutoPAD=bAutoPAD;
}

//##ModelId=3B43E6F201EA
CIPOptions* CSpoofSocket::GetOptions()
{
	return m_IPOptions;
}

//##ModelId=3B43E6F100CE
void CIPOptions::Reset()
{
	try
	{
		//Set all to zeros
		memset(m_Buffer,0,IPOption_SIZE);

		//Our buffer length
		m_BufferLength=0;
	}
	ERROR_HANDLER("Reset")
}

//##ModelId=3B43E6F100AF
void CIPOptions::AddOption_Security(unsigned short usType)
{
	try
	{
		//Add option security
		tOptionType OT;

		//Get the option
		OT=GetOption(IPOption_COPY,IPOption_CONTROL,IPOption_SECURITY);

		//Add it to buffer
		AddToBuffer((char*)&OT,sizeof(OT));

		//Add length
		OT=IPOption_SECURITY_LENGTH;
		AddToBuffer((char*)&OT,sizeof(OT));

		//Add options
		AddToBuffer((char*)&usType,sizeof(usType));

		//Add zeros
		unsigned short usZeros=0;
		unsigned char ucZeros=0;

		//A hacker would enumarate these values, according to the RFC
		//Compartments
		AddToBuffer((char*)&usZeros,sizeof(usZeros));

		//Handling restrictions
		AddToBuffer((char*)&usZeros,sizeof(usZeros));


		//Transmition control code (TCC)
		AddToBuffer((char*)&usZeros,sizeof(usZeros));
		AddToBuffer((char*)&ucZeros,sizeof(ucZeros));

		//Done
	}
	ERROR_HANDLER("AddOption_Security")
}

//##ModelId=3B43E6F100A5
void CIPOptions::AddOption_Stream(unsigned short usStreamID)
{
	try
	{
		//Add option security
		tOptionType OT;

		//Get the option
		OT=GetOption(IPOption_COPY,IPOption_CONTROL,IPOption_STREAM);

		//Add it to buffer
		AddToBuffer((char*)&OT,sizeof(OT));

		//Add length
		OT=IPOption_STREAM_LENGTH;
		AddToBuffer((char*)&OT,sizeof(OT));

		//Add options
		unsigned short usnStreamID;
		usnStreamID=htons(usStreamID);

		AddToBuffer((char*)&usnStreamID,sizeof(usnStreamID));
	}
	ERROR_HANDLER("AddOption_Stream")
}

//##ModelId=3B43E6F1009B
void CIPOptions::AddOption_StrictRoute(tRouting tRoute)
{
	try
	{
		AddOption_Route(IPOption_STRICT_ROUTING,tRoute);
	}
	ERROR_HANDLER("AddOption_StrictRoute")
}

//##ModelId=3B43E6F10088
void CIPOptions::AddOption_RecordRoute(int iMaxRoutes)
{
	try
	{
		//Option for strict routine
		//Add option strict route
		tOptionType OT;

		//Get the option
		OT=GetOption(IPOption_DONT_COPY,IPOption_CONTROL,IPOption_RECORD_ROUTE);

		//Add it to buffer
		AddToBuffer((char*)&OT,sizeof(OT));

		//Add the length
		OT=iMaxRoutes*4+IPOption_STRICT_ROUTING_LENGTH;
		AddToBuffer((char*)&OT,sizeof(OT));
		
		//Add the pointer
		OT=IPOption_STRICT_ROUTING_POINTER;
		AddToBuffer((char*)&OT,sizeof(OT));
		
		char cNothing[IPOption_SIZE]="";
		AddToBuffer(cNothing,iMaxRoutes*4);
	}
	ERROR_HANDLER("AddOption_RecordRoute")
}

//##ModelId=3B43E6F10041
void CIPOptions::AddOption_Route(tOptionType tRouteType,tRouting tRoute)
{
	try
	{
		//Option for strict routine
		//Add option strict route
		tOptionType OT;

		//Get the option
		OT=GetOption(IPOption_COPY,IPOption_CONTROL,tRouteType);

		//Add it to buffer
		AddToBuffer((char*)&OT,sizeof(OT));

		//Add the length
		OT=tRoute.iRoutes*4+IPOption_STRICT_ROUTING_LENGTH;
		AddToBuffer((char*)&OT,sizeof(OT));
		
		//Add the pointer
		OT=IPOption_STRICT_ROUTING_POINTER;
		AddToBuffer((char*)&OT,sizeof(OT));
		
		//Add the routing table
		AddToBuffer((char*)tRoute.ulRoutes,tRoute.iRoutes*4);
	}
	ERROR_HANDLER("AddOption_Route")
}

//##ModelId=3B43E6F1007F
void CIPOptions::AddOption_LooseRoute(tRouting tRoute)
{
	try
	{
		AddOption_Route(IPOption_LOOSE_ROUTING,tRoute);
	}
	ERROR_HANDLER("AddOption_LooseRoute")
}

//##ModelId=3B43E6F10073
void CIPOptions::AddOption_Timestamp(tOptionType tFlags, int iMaxStamps)
{
	try
	{
		//Add option for timestamp
		tOptionType OT;

		//Get the option
		OT=GetOption(IPOption_DONT_COPY,IPOption_DEBUGGING,IPOption_TIMESTAMP);

		//Add it to buffer
		AddToBuffer((char*)&OT,sizeof(OT));

		//Add the length
		OT=iMaxStamps*IPOption_TIMESTAMP_SIZE+IPOption_TIMESTAMP_LENGTH-1;
		AddToBuffer((char*)&OT,sizeof(OT));
		
		//Add the pointer
		OT=IPOption_TIMESTAMP_LENGTH;
		AddToBuffer((char*)&OT,sizeof(OT));

		//Add the flags
		AddToBuffer((char*)&tFlags,sizeof(tFlags));

		//Add the empty buffer
		char cNothing[IPOption_SIZE]="";
		AddToBuffer(cNothing,iMaxStamps*IPOption_TIMESTAMP_SIZE);
	}
	ERROR_HANDLER("AddOption_Timestamp")
}

//##ModelId=3B43E6F20346
BOOL CSpoofSocket::isRaw()
{
	return m_Raw;
}


//##ModelId=3B43E6F203AA
void CSpoofSocket::InitializeIP()
{
	try
	{
		//Invalid the socket
		m_SpoofSocket=INVALID_SOCKET;

		//More invalids
		m_SourceAddress=NULL;

		//Some defaults
		m_TTL=IP_DEF_TTL;

		//We don't want raw header (so it can work on win 98/NT)
		m_Raw=FALSE;

		//Set our options
		m_IPOptions=NULL;

		//Not connected
		memset(&m_ConnectedTo,0,sizeof(m_ConnectedTo));

		//Set options to false
		SetOptions(FALSE);
	}
	ERROR_HANDLER("InitializeIP")
}

//##ModelId=3B43E6F20314
void CSpoofSocket::AssignSocket(SOCKET sok,unsigned char ucProtocol)
{
	try
	{
		//Sets the protocol
		m_Protocol=ucProtocol;

		//Binds to a socket
		m_SpoofSocket=sok;

		//Set non raw
		SetRaw(FALSE);
	}
	ERROR_HANDLER("AssignSocket")
}

//##ModelId=3B43E6F201DE
int CSpoofSocket::Receive(char *buf, int bufLen)
{
	try
	{
		if (!ValidSocket())
			return SOCKET_ERROR;

		//Receive data
		int iResult;

		//Receive
		if (m_Protocol!=IPPROTO_TCP)
		{
			sockaddr saConnected;

			int iTmp;
			iTmp=sizeof(saConnected);

			//Accept it
			iResult=recvfrom(GetHandle(),buf,bufLen,NULL,&saConnected,&iTmp);

			//If OK set it
			if (iResult!=SOCKET_ERROR)
				memcpy(&m_ConnectedTo,&saConnected,sizeof(saConnected));
		}
		else
			iResult=recv(GetHandle(),buf,bufLen,NULL);

		//Check if error
		if (iResult==SOCKET_ERROR)
			//Error
			SetLastError("Receive");

		//Number of bytes received
		return iResult;
	}
	ERROR_HANDLER_RETURN("Receive",SOCKET_ERROR)
}

//##ModelId=3B43E6F201D5
BOOL CSpoofSocket::ValidAddress(LPCSTR lpAddress)
{
	try
	{
		return inet_addr(lpAddress)!=INADDR_NONE;
	}
	ERROR_HANDLER_RETURN("ValidAddress",FALSE)
}

//##ModelId=3B43E6F30012
sockaddr_in CSpoofSocket::pResolveDNS(LPCSTR lpAddress)
{
	//Convert it to the address
	sockaddr_in adr;
	memset(&adr,0,sizeof(adr));

	try
	{
		//Resolve the DNS
		hostent* hp;
		hp=gethostbyname(lpAddress);

		//Check if this address exists
		if (!hp)
			//Error
			SetLastError("pResolveDNS");
		else
			//Copy the data
			memcpy(&adr.sin_addr,hp->h_addr,hp->h_length);

		return adr;
	}
	ERROR_HANDLER_RETURN("pResolveDNS",adr)
}

//##ModelId=3B43E6F201D3
long CSpoofSocket::ResolveDNS(LPCSTR lpAddress)
{
	try
	{
		//Resolve the DNS
		sockaddr_in tmp;

		tmp=pResolveDNS(lpAddress);

		//Check if valid
		if (tmp.sin_addr.S_un.S_addr==0)
			//Error
			return 0;
		else
			return tmp.sin_addr.S_un.S_addr;
	}
	ERROR_HANDLER_RETURN("ResolveDNS",0)
}

//##ModelId=3B43E6F201C9
BOOL CSpoofSocket::Sniff(BOOL bSniff)
{
	//Start sniffing
	if (!ValidSocket())
		return FALSE;

	try
	{
		unsigned long ulBytes;
		if (WSAIoctl(GetHandle(),SIO_RCVALL,&bSniff,sizeof(bSniff),NULL,0,&ulBytes,NULL,NULL))
		{
			//Error
			SetLastError("Sniff");
			return FALSE;
		}

		return TRUE;
	}
	ERROR_HANDLER_RETURN("Sniff",FALSE)
}

//##ModelId=3B43E6F201BF
long CSpoofSocket::GetPeerAddress()
{
	//Get the address we are connected to
	return m_ConnectedTo.sin_addr.S_un.S_addr;
}

//##ModelId=3B43E6F20179
BOOL CSpoofSocket::Shutdown(SocketShutdown eHow)
{
	if (!CheckSocketValid())
		return FALSE;

	try
	{
		int iHow;

		//Convert the how to a real flag
		if (eHow==ssReceive)
			iHow=SD_RECEIVE;
		else if (eHow==ssSend)
			iHow=SD_SEND;
		else
			iHow=SD_BOTH;

		//Do it
		if (shutdown(GetHandle(),iHow))
		{
			SetLastError("Shutdown");
			return FALSE;
		}

		return TRUE;
	}
	ERROR_HANDLER_RETURN("Shutdown",FALSE)
}

//##ModelId=3B43E6F20170
unsigned short CSpoofSocket::GetPeerPort()
{
	return htons(m_ConnectedTo.sin_port);
}

//##ModelId=3B43E6F203DC
void CSpoofSocket::FinalIPHeader(LPIpHeader lpHead)
{
	//We don't do anything
}

//##ModelId=3B43E6F202CE
LPIpHeader CSpoofSocket::ConstructStaticIPHeader(unsigned char  ucProtocol,
												 unsigned short usFragmentationFlags,
												 unsigned char  ucTTL,
												 unsigned short usIdentification,
												 unsigned char  ucHeaderLength)
{
	try
	{
		//Need to construct the IP header
		LPIpHeader lpHead=new _IpHeader;

		//Header length (in 32 bits)
		lpHead->HeaderLength_Version=ucHeaderLength/4 + IpVersion*16;

		//Protocol
		lpHead->Protocol=ucProtocol;

		//Fragmentation flags
		lpHead->FragmentationFlags=htons(usFragmentationFlags);

		//Time to live
		lpHead->TTL=ucTTL;

		//Checksum - set to 0
		lpHead->CheckSum=0;

		//Identification
		lpHead->Identification=htons(usIdentification);

		//Precedence
		lpHead->TypeOfService=IpService_ROUTINE;

		//Return IP to user
		return lpHead;
	}
	ERROR_HANDLER_STATIC_RETURN(CSpoofSocket_LOGNAME,"ConstructIPHeader",NULL)
}

⌨️ 快捷键说明

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