![]() |
SendRaw() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
| Protected Function |
Declared in: TCPSocket.h |
Declaration
virtual BOOL SendRaw(
unsigned short usSourcePort,
LPCSTR lpDestinationAddress,
unsigned short usDestinationPort,
char* buf,
int BufLength,
unsigned char ucFlags=0);
DescriptionSend raw packet
Function Body
try
{
//Quit if not ok
if (!CheckSocketValid())
return FALSE;
if (isRaw())
{
//Let's try our first attack
LPTCPHeader lpHead;
//Header length
int iHeaderLength;
iHeaderLength=TCPHeaderLength;
//If we have TCP options
if (m_Options)
iHeaderLength+=m_TCPOptions->GetBufferLength();
//Create the header
lpHead=ConstructTCPHeader(usSourcePort,usDestinationPort,iHeaderLength);
if (ucFlags)
//Set the flags
SetHeaderFlag(lpHead,ucFlags);
//Result
BOOL bResult;
//Construct diffrently if we have options
if (m_Options)
{
char* oBuf;
oBuf=new char[iHeaderLength+BufLength];
//Copy header
memcpy(oBuf,lpHead,TCPHeaderLength);
//Copy options
memcpy(oBuf+TCPHeaderLength,m_TCPOptions->GetBuffer(),m_TCPOptions->GetBufferLength());
if (BufLength)
//Copy the data
memcpy(oBuf+TCPHeaderLength+m_TCPOptions->GetBufferLength(),buf,BufLength);
int iTotalLength;
iTotalLength=iHeaderLength+BufLength;
//Checksum it
lpHead->Checksum=CalculatePseudoChecksum(oBuf,iTotalLength,lpDestinationAddress,iTotalLength);
//Last change to the header
FinalTCPHeader(lpHead);
//Recopy header
memcpy(oBuf,lpHead,TCPHeaderLength);
//Send the data
bResult=CSpoofSocket::Send(lpDestinationAddress,oBuf,iHeaderLength,usDestinationPort);
//Dispose
delete [] oBuf;
}
else
{
//Our total length
int iTotalLength;
iTotalLength=iHeaderLength+BufLength;
char* cBuf;
cBuf=new char[iTotalLength];
//Copy the header
memcpy(cBuf,lpHead,iHeaderLength);
//Copy the data
if (BufLength)
//Copy the data
memcpy(cBuf+iHeaderLength,buf,BufLength);
//Calculate the checksum
lpHead->Checksum=CalculatePseudoChecksum(cBuf,iTotalLength,lpDestinationAddress,iTotalLength);
//Last change to the header
FinalTCPHeader(lpHead);
//Copy the header
memcpy(cBuf,lpHead,iHeaderLength);
//Send the data
bResult=CSpoofSocket::Send(lpDestinationAddress,cBuf,iTotalLength,usDestinationPort);
//Delete the buffer
delete [] cBuf;
}
//Set the last error
SetLastError("Connect");
//Dispose the header
delete lpHead;
return bResult;
}
else
{
ReportError("SendRaw","Packet not in raw mode!");
return FALSE;
}
}
ERROR_HANDLER_RETURN("SendRaw",FALSE)
See Also
This web site was generated
using Surveyor V4.50.811.1. Click
here
for more information. |
Site content copyright © 2001 Barak Weichselbaum. See the About page for additional notices. This page last updated: 27 Jun 2001. |