Class CIPCrafter::
GetCraftedPacket()
Base ClassesData ItemsConstructorsDestructorsFunctionsCustom CodeGo to hierarchy chart    Prev page: ConstructCraftedIPHeaderNext page: operator =    Show member index
Public Function Declared in:
IPCrafter.h

'Declaration' icon -- Shortcut to top of page. Declaration

char * GetCraftedPacket(
    const CSpoofSocket* pSocket,
    unsigned long ulDestinationAddress,
    const char* pBuffer,
    unsigned short usBufferSize,
    unsigned short& usTotalSize) const;

'Description' icon -- Shortcut to top of page. Description

Get the memory of a crafted packet (returns an allocated buffer with the packet)

'Function Body' icon -- Shortcut to top of page. Function Body

try
{
    //Check if the length is too big
    if (IpHeaderLength+(long)usBufferSize>65535)
    {
        //Report it
        ReportError("GetCraftedPacket","Packet can't be greater then 65k!");

        //Exit
        return NULL;
    }

    //Header length
    unsigned char ucHeaderLength=IpHeaderLength;

    if (pSocket->HasOptions())
        ucHeaderLength+=pSocket->GetOptions()->GetBufferLength();

    //First construct the packet
    LPIpHeader lpHead=pSocket->ConstructIPHeader(pSocket->GetProtocol(),
                                                 IpFragFlag_DONT_FRAG,
                                                 pSocket->GetTTL(),
                                                 (unsigned short)GetCurrentProcessId(),
                                                 ucHeaderLength);

    //Set the address
    pSocket->SetIPHeaderAddress(lpHead,
                                pSocket->GetSourceAddress(),
                                ulDestinationAddress);

    //Now add some more options
    unsigned short usTotalLength;
    usTotalLength=ucHeaderLength+usBufferSize;

    //Set the header
    lpHead->usTotalLength=htons(usTotalLength);

    //Need to construct a new packet
    char* pNewBuf;
    pNewBuf=new char[usTotalLength];

    //Copy two buffers
    memcpy(pNewBuf,
           lpHead,
           IpHeaderLength);

    //Do we need to copy options ?
    if (pSocket->HasOptions())
        memcpy(pNewBuf+IpHeaderLength,
               pSocket->GetOptions()->GetBuffer(),
               pSocket->GetOptions()->GetBufferLength());

    //Only if not null
    if (pBuffer)
        memcpy(pNewBuf+ucHeaderLength,
               pBuffer,
               usBufferSize);

    //Calculate the checksum
    lpHead->usChecksum=pSocket->CalculateChecksum((unsigned short*)pNewBuf,
                                                  ucHeaderLength);

    //Alert everyone this is the final header
    pSocket->FinalIPHeader(lpHead);

    //Recopy the ip
    memcpy(pNewBuf,
           lpHead,
           IpHeaderLength);

    //Set the total size
    usTotalSize=usTotalLength;

    //Return to the user
    return pNewBuf;
}
ERROR_HANDLER_RETURN("GetCraftedPacket",NULL)

'See Also' icon -- Shortcut to top of page. See Also

Class Overview Class Overview  |  Private base class CSpoofBase  |  Hierarchy Chart Hierarchy Chart


Get Surveyor!This web site was generated using Surveyor V4.50.811.1.  Click here for more information. Site content copyright © 2003 Komodia LTD.. See the About page for additional notices. This page last updated: 24 Feb 2003.