Retail products


Traffic interception SDK

Control every TCP/IP network connection

  • Route connections via proxy
  • Redirect connections and modify the data
  • Block connections and applications
SSL interception SDK

View SSL in plaintext and modify it

  • View the SSL stream decrypted in plaintext
  • Redirect SSL connection and modify decrypted data
  • Browser shows "SSL lock" without warnings

Documentation


CTCPSocket Class Reference

#include <TCPSocket.h>

Inheritance diagram for CTCPSocket:
Collaboration diagram for CTCPSocket:

List of all members.


Public Types

enum  _SocketShutdown { ssReceive, ssSend, ssBoth }
typedef enum
CSpoofSocket::_SocketShutdown 
SocketShutdown

Public Member Functions

BOOL SetNagle (BOOL bNagle)
virtual BOOL Close ()
BOOL IsConnected () const
virtual int Send (const char *pBuffer, unsigned long ulBufferLength)
BOOL Accept (CTCPSocket *pNewSocket)
CTCPSocketAccept ()
virtual BOOL Listen (unsigned long ulBackLog=5)
CTCPOptionsGetTCPOptions () const
virtual BOOL Connect (unsigned short usSourcePort, IP aDestinationAddress, unsigned short usDestinationPort)
virtual BOOL Connect (unsigned short usSourcePort, const std::string &rDestinationAddress, unsigned short usDestinationPort)
virtual BOOL Connect (IP aDestinationAddress, unsigned short usDestinationPort)
virtual BOOL Connect (const std::string &rDestinationAddress, unsigned short usDestinationPort)
virtual BOOL Create ()
void SetTCPOptions (BOOL bOptions)
 CTCPSocket (BOOL bRawSocket)
virtual ~CTCPSocket ()
BOOL SetReceiveTimeout (unsigned long ulMS)
SOCKET GetHandle () const
BOOL SetBroadcast (BOOL bBroadcast)
BOOL IsCreated () const
BOOL CanWrite () const
BOOL CanRead () const
unsigned short GetPeerPort () const
BOOL Shutdown (SocketShutdown eHow)
long GetPeerAddress () const
virtual BOOL Sniff (BOOL bSniff)
virtual int Receive (char *pBuffer, unsigned long ulBufferLength)
CIPOptionsGetOptions () const
void SetOptions (BOOL bOptions)
void SetTTL (unsigned char ucTTL)
unsigned short CalculatePseudoChecksum (const char *pBuffer, int iBufferLength, IP aDestinationAddress, int iPacketLength) const
virtual void SetSourceAddress (IP aSourceAddress)
virtual void SetSourceAddress (const std::string &rSourceAddress)
virtual BOOL Bind (const std::string &rSourceAddress, unsigned short usPort)
virtual BOOL Bind (IP aSourceAddress, unsigned short usPort)
virtual int Send (IP aDestinationAddress, const char *pBuffer, unsigned long ulBufferLength, unsigned short usDestinationPort=0)
virtual int Send (const std::string &rDestinationAddress, const char *pBuffer, unsigned long ulBufferLength, unsigned short usDestinationPort=0)
virtual int SendRawBuffer (IP aDestinationAddress, const char *pBuffer, unsigned long ulBufferLength, unsigned short usDestinationPort)
BOOL Create (int iProtocol)
bool operator== (const CSpoofSocket &rSocket) const
bool operator< (const CSpoofSocket &rSocket) const
int GetSystemLastError () const
int GetLastError () const
void SetLocalLog (CErrorLog *pLog)

Static Public Member Functions

static long ResolveDNS (const std::string &rAddress)
static BOOL ValidAddress (const std::string &rAddress)
static LPIpHeader ConstructStaticIPHeader (unsigned char ucProtocol, unsigned short usFragmentationFlags, unsigned char ucTTL, unsigned short usIdentification, unsigned char ucHeaderLength)
static unsigned short CalculateChecksum (const unsigned short *pBuffer, int iSize)
static int GetErrorCode ()
static BOOL IsInitialized ()
static unsigned long StringToLong (const std::string &rAddress)
static char FAR * LongToString (unsigned long ulAddr)
static std::string LongToStdString (unsigned long ulAddr)
static BOOL InitializeSockets (BOOL bMultiThreaded=TRUE, unsigned long ulNumberOfThreads=10)
static BOOL InitializeSocketsNoMap (BOOL bMultiThreaded=TRUE, unsigned long ulNumberOfThreads=10)
static BOOL ShutdownSockets ()
static unsigned long GetNumberOfThreads ()
static BOOL IsMultiThreaded ()
static CGenericCriticalSectionGetGlobalCriticalSection ()
static std::string GetCurrentDateTime ()
static std::string ErrorCodeToString (DWORD dwErrorCode)
static void SetLog (CErrorLog *pLog)

Protected Member Functions

virtual void BeforeAccept ()
virtual BOOL IsAsyncClass () const
void SetConnectionStatus (BOOL bConnected)
virtual void Accepted ()
virtual LPTCPHeader ConstructTCPHeader (unsigned short usSourcePort, unsigned short usDestinationPort, unsigned char ucHeaderLength) const
virtual void FinalTCPHeader (LPTCPHeader lpHead) const
virtual int SendRaw (unsigned short usSourcePort, IP aDestinationAddress, unsigned short usDestinationPort, const char *pBuffer, unsigned long ulBufferLength, unsigned char ucFlags=0)
virtual int SendRaw (unsigned short usSourcePort, const std::string &rDestinationAddress, unsigned short usDestinationPort, const char *pBuffer, unsigned long ulBufferLength, unsigned char ucFlags=0)
void SetConnectedTo (const sockaddr_in &rAddress)
IP GetSourceAddress () const
unsigned char GetTTL () const
unsigned char GetProtocol () const
BOOL HasOptions () const
virtual LPIpHeader ConstructIPHeader (unsigned char ucProtocol, unsigned short usFragmentationFlags, unsigned char ucTTL, unsigned short usIdentification, unsigned char ucHeaderLength) const
BOOL CheckSocketValid () const
void AssignSocket (SOCKET aNewSocket, unsigned char ucProtocol=IPPROTO_TCP)
BOOL IsRaw () const
void SetProtocol (unsigned char iProtocol)
BOOL ValidSocket () const
virtual void InitializeIP ()
virtual void SetIPHeaderAddress (LPIpHeader lpHead, IP aSourceAddress, IP aDestinationAddress) const
virtual void FinalIPHeader (LPIpHeader lpHead) const
virtual int ReceiveFrom (char *pBuffer, unsigned long ulBufferLength, IP &rIP, unsigned short &rSourcePort)
virtual void NotifyShutdown ()
void RegisterShutdown (CSpoofBase *pBase)
void SetLastError (const std::string &rMethod) const
void SetLastError (const std::string &, int iErrorCode) const
const std::string & GetClassName () const
void WriteMessage (const std::string &rMethod, const std::string &rMessage, LogPriority aPriority=lpMessage)
void WriteMessage (const std::string &rMethod, const std::string &rMessage, DWORD dwAdditionalData, LogPriority aPriority=lpMessage)
virtual void ReportError (const std::string &rMethod) const
virtual void ReportError (const std::string &rMethod, const std::string &rMessage) const
virtual void ReportError (const std::string &rMethod, const std::string &rMessage, DWORD dwAdditionalData) const
virtual void ReportError (const std::string &rMethod, int iErrorCode) const
virtual void ReportError (const std::string &rMethod, const std::string &rMessage, int iErrorCode) const
virtual void ReportErrorOS (const std::string &rMethod, const std::string &rMessage) const
void SetName (const std::string &rName) const

Static Protected Member Functions

static void WriteStaticMessage (const std::string &rClass, const std::string &rMethod, const std::string &rMessage, LogPriority aPriority=lpMessage)
static void WriteStaticMessage (const std::string &rClass, const std::string &rMethod, const std::string &rMessage, DWORD dwAdditionalData, LogPriority aPriority=lpMessage)
static void ReportStaticError (const std::string &rClass, const std::string &rMethod)
static void ReportStaticError (const std::string &rClass, const std::string &rMethod, const std::string &rMessage)
static void ReportStaticError (const std::string &rClass, const std::string &rMethod, const std::string &rMessage, DWORD dwAdditionalData)

Static Protected Attributes

static CGenericCriticalSectionm_pCSection = NULL

Friends

class CIPCrafter

Detailed Description

Definition at line 121 of file TCPSocket.h.


Member Typedef Documentation


Member Enumeration Documentation

enum CErrorHandler::_LogPriority [inherited]

Enumerator:
lpDebug 
lpMessage 
lpCritical 
lpError 

Definition at line 53 of file ErrorHandler.h.

00054     {
00055         lpDebug,
00056         lpMessage,
00057         lpCritical,
00058         lpError
00059     } LogPriority;

Enumerator:
ssReceive 
ssSend 
ssBoth 

Definition at line 444 of file SpoofSocket.h.

00445     {
00446         ssReceive,
00447         ssSend,
00448         ssBoth
00449     } SocketShutdown;


Constructor & Destructor Documentation

CTCPSocket::CTCPSocket ( BOOL  bRawSocket  ) 

Definition at line 182 of file TCPSocket.cpp.

00182                                       : CSpoofSocket(bRawSocket)
00183 {
00184     try
00185     {
00186         //Set our name
00187         SetName(CTCPSocket_LOGNAME);
00188 
00189         //Initialize the TCP
00190         InitializeTCP();
00191     }
00192     ERROR_HANDLER("CTCPSocket")
00193 }

CTCPSocket::~CTCPSocket (  )  [virtual]

Definition at line 208 of file TCPSocket.cpp.

00209 {
00210     try
00211     {
00212         //Delete the options
00213         SetTCPOptions(FALSE);
00214     }
00215     ERROR_HANDLER("~CTCPSocket")
00216 }


Member Function Documentation

CTCPSocket * CTCPSocket::Accept (  ) 

Definition at line 458 of file TCPSocket.cpp.

00459 {
00460     try
00461     {
00462         //Quit if not ok
00463         if (!CheckSocketValid())
00464             return FALSE;
00465 
00466         //First accept the socket
00467         SOCKET aSocket;
00468         
00469         //Where we are connected to
00470         sockaddr_in aConnected;
00471         
00472         //Size of the structure
00473         int iSize;
00474         iSize=sizeof(aConnected);
00475 
00476         //Accept it
00477         aSocket=accept(GetHandle(),
00478                        (sockaddr*)&aConnected,
00479                        &iSize);
00480 
00481         //Is all OK
00482         if (aSocket!=INVALID_SOCKET)
00483         {
00484             //Create the new tcp socket
00485             CTCPSocket* pSocket;
00486             pSocket=new CTCPSocket(aSocket);
00487 
00488             //Set the address
00489             pSocket->SetConnectedTo(aConnected);
00490             pSocket->SetConnectionStatus(TRUE);
00491 
00492             //Done
00493             return pSocket;
00494         }
00495         else
00496         {
00497             //Error
00498             SetLastError("Accept");
00499 
00500             //Exit
00501             return NULL;
00502         }
00503     }
00504     ERROR_HANDLER_RETURN("Accept",NULL)
00505 }

BOOL CTCPSocket::Accept ( CTCPSocket pNewSocket  ) 

Definition at line 521 of file TCPSocket.cpp.

00522 {
00523     try
00524     {
00525         //Quit if not ok
00526         if (!CheckSocketValid())
00527             return FALSE;
00528 
00529         //First accept the socket
00530         SOCKET aNewSocket;
00531         
00532         //Where we are connected to
00533         sockaddr_in aAddress;
00534         
00535         //Size of the structure
00536         int iSize;
00537         iSize=sizeof(aAddress);
00538 
00539         //Accept it
00540         aNewSocket=accept(GetHandle(),
00541                           (sockaddr*)&aAddress,
00542                           &iSize);
00543 
00544         //Is it OK
00545         if (aNewSocket!=INVALID_SOCKET)
00546         {
00547             //Call before accept routing
00548             pNewSocket->BeforeAccept();
00549 
00550             //Set the socket data
00551             pNewSocket->SetConnectedTo(aAddress);
00552             pNewSocket->AssignSocket(aNewSocket);
00553             pNewSocket->SetConnectionStatus(TRUE);
00554             pNewSocket->Accepted();
00555 
00556             //Exit
00557             return TRUE;
00558         }
00559         else
00560         {
00561             //Error
00562             SetLastError("Accept");
00563 
00564             //Exit
00565             return FALSE;
00566         }
00567     }
00568     ERROR_HANDLER_RETURN("Accept",FALSE)
00569 }

void CTCPSocket::Accepted (  )  [protected, virtual]

Definition at line 600 of file TCPSocket.cpp.

00601 {
00602 }

void CSpoofSocket::AssignSocket ( SOCKET  aNewSocket,
unsigned char  ucProtocol = IPPROTO_TCP 
) [protected, inherited]

Definition at line 1127 of file SpoofSocket.cpp.

01128 {
01129     try
01130     {
01131         //Sets the protocol
01132         m_ucProtocol=ucProtocol;
01133 
01134         //Binds to a socket
01135         m_aSpoofSocket=aNewSocket;
01136     }
01137     ERROR_HANDLER("AssignSocket")
01138 }

void CTCPSocket::BeforeAccept (  )  [protected, virtual]

Definition at line 868 of file TCPSocket.cpp.

00869 {
00870 }

BOOL CSpoofSocket::Bind ( IP  aSourceAddress,
unsigned short  usPort 
) [virtual, inherited]

Definition at line 852 of file SpoofSocket.cpp.

00854 {
00855     try
00856     {
00857         //Quit if not ok
00858         if (!CheckSocketValid())
00859             return FALSE;
00860 
00861         //Create the local address
00862         sockaddr_in soSrc;
00863 
00864         //Set to 0
00865         memset(&soSrc,0,sizeof(soSrc));
00866         soSrc.sin_family=AF_INET;
00867 
00868         //Populate the connection data
00869         if (aSourceAddress)
00870             soSrc.sin_addr.s_addr=aSourceAddress;
00871         else
00872             soSrc.sin_addr.s_addr=ADDR_ANY ;
00873 
00874         soSrc.sin_port=htons(usPort);
00875 
00876         //Now we need to bind it
00877         if (bind(GetHandle(),
00878                  (sockaddr*)&soSrc,
00879                  sizeof(soSrc)))
00880         {
00881             //Error
00882             SetLastError("Bind");
00883 
00884             //Exit
00885             return FALSE;
00886         }
00887         else
00888             //Save the address
00889             m_aConnectedTo=soSrc;
00890 
00891         //If already has a source address then don't change it
00892         if (!m_ulSourceAddress)
00893             //Save it as the source address (spoofing options only)
00894             m_ulSourceAddress=aSourceAddress;
00895 
00896         return TRUE;
00897     }
00898     ERROR_HANDLER_RETURN("Bind",FALSE)
00899 }

BOOL CSpoofSocket::Bind ( const std::string &  rSourceAddress,
unsigned short  usPort 
) [virtual, inherited]

Definition at line 901 of file SpoofSocket.cpp.

00903 {
00904     try
00905     {
00906         //Quit if not ok
00907         if (!CheckSocketValid())
00908             return FALSE;
00909 
00910         if (rSourceAddress.empty())
00911             return Bind((IP)0,
00912                         usPort);
00913         else
00914             return Bind(inet_addr(rSourceAddress.c_str()),
00915                         usPort);
00916     }
00917     ERROR_HANDLER_RETURN("Bind",FALSE)
00918 }

unsigned short CSpoofSocket::CalculateChecksum ( const unsigned short *  pBuffer,
int  iSize 
) [static, inherited]

Definition at line 824 of file SpoofSocket.cpp.

00826 {
00827     try
00828     {
00829         unsigned long usChksum=0;
00830 
00831         //Calculate the checksum
00832         while (iSize>1)
00833         {
00834             usChksum+=*pBuffer++;
00835             iSize-=sizeof(unsigned short);
00836         }
00837 
00838         //If we have one char left
00839         if (iSize)
00840             usChksum+=*(unsigned char*)pBuffer;
00841 
00842         //Complete the calculations
00843         usChksum=(usChksum >> 16) + (usChksum & 0xffff);
00844         usChksum+=(usChksum >> 16);
00845 
00846         //Return the value (inversed)
00847         return (unsigned short)(~usChksum);
00848     }
00849     ERROR_HANDLER_STATIC_RETURN(CSpoofSocket_LOGNAME,"CalculateChecksum",0)
00850 }

unsigned short CSpoofSocket::CalculatePseudoChecksum ( const char *  pBuffer,
int  iBufferLength,
IP  aDestinationAddress,
int  iPacketLength 
) const [inherited]

Definition at line 997 of file SpoofSocket.cpp.

01001 {
01002     try
01003     {
01004         //Calculate the checksum
01005         LPPseudoHeader lpPseudo;
01006         lpPseudo=new PseudoHeader;
01007 
01008         //Protect it
01009         std::auto_ptr<PseudoHeader> pProtection(lpPseudo);
01010 
01011         //Set the values
01012         lpPseudo->ulDestinationAddress=aDestinationAddress;
01013         lpPseudo->ulSourceAddress=m_ulSourceAddress;
01014         lpPseudo->ucZeros=0;
01015         lpPseudo->ucPTCL=m_ucProtocol;
01016         lpPseudo->usLength=htons(iPacketLength);
01017 
01018         //Calculate checksum of all
01019         int iTotalLength;
01020         iTotalLength=PseudoHeaderLength+iBufferLength;
01021 
01022         //Allocate the buffer
01023         char* pNewBuffer;
01024         pNewBuffer=new char[iTotalLength];
01025 
01026         //Protect the new buffer
01027         CArray_ptr<char> pBufferProtection(pNewBuffer);
01028 
01029         //Copy pseudo
01030         memcpy(pNewBuffer,lpPseudo,PseudoHeaderLength);
01031 
01032         //Copy header
01033         memcpy(pNewBuffer+PseudoHeaderLength,
01034                pBuffer,
01035                iBufferLength);
01036 
01037         //Calculate the checksum
01038         unsigned short usChecksum;
01039         usChecksum=CalculateChecksum((unsigned short*)pNewBuffer,iTotalLength);
01040 
01041         //Return checksum
01042         return usChecksum;
01043     }
01044     ERROR_HANDLER_RETURN("CalculatePseudoChecksum",0)
01045 }

BOOL CSpoofSocket::CanRead (  )  const [inherited]

Definition at line 1437 of file SpoofSocket.cpp.

01438 {
01439     try
01440     {
01441         //Quit if not ok
01442         if (!CheckSocketValid())
01443             return FALSE;
01444 
01445         //Create our structure
01446         fd_set aDescriptor;
01447         FD_ZERO(&aDescriptor);
01448 
01449         //Add our socket
01450         FD_SET(GetHandle(),&aDescriptor);
01451 
01452         //And create the timeval
01453         timeval aTime;
01454         aTime.tv_sec=0;
01455         aTime.tv_usec=0;
01456 
01457         //And run the select
01458         int iRetVal;
01459         iRetVal=select(NULL,&aDescriptor,NULL,NULL,&aTime);
01460 
01461         //Check if we had an error
01462         if (iRetVal==GetErrorCode())
01463         {
01464             //Report it
01465             SetLastError("CanRead");
01466 
01467             //Exit
01468             return FALSE;
01469         }
01470         else
01471             //Check is our socket set
01472             return FD_ISSET(GetHandle(),&aDescriptor);
01473     }
01474     ERROR_HANDLER_RETURN("CanRead",FALSE)
01475 }

BOOL CSpoofSocket::CanWrite (  )  const [inherited]

Definition at line 1477 of file SpoofSocket.cpp.

01478 {
01479     try
01480     {
01481         //Quit if not ok
01482         if (!CheckSocketValid())
01483             return FALSE;
01484 
01485         //Create our structure
01486         fd_set aDescriptor;
01487         FD_ZERO(&aDescriptor);
01488 
01489         //Add our socket
01490         FD_SET(GetHandle(),&aDescriptor);
01491 
01492         //And create the timeval
01493         timeval aTime;
01494         aTime.tv_sec=0;
01495         aTime.tv_usec=0;
01496 
01497         //And run the select
01498         int iRetVal;
01499         iRetVal=select(NULL,NULL,&aDescriptor,NULL,&aTime);
01500 
01501         //Check if we had an error
01502         if (iRetVal==GetErrorCode())
01503         {
01504             //Report it
01505             SetLastError("CanWrite");
01506 
01507             //Exit
01508             return FALSE;
01509         }
01510         else
01511             //Check is our socket set
01512             return FD_ISSET(GetHandle(),&aDescriptor);
01513     }
01514     ERROR_HANDLER_RETURN("CanWrite",FALSE)
01515 }

BOOL CSpoofSocket::CheckSocketValid (  )  const [protected, inherited]

Definition at line 925 of file SpoofSocket.cpp.

00926 {
00927     try
00928     {
00929         //Check if socket is invalid
00930         if (!ValidSocket())
00931         {
00932             //Report it
00933             ReportError("CheckSocketValid","Operation made on non existant socket!");
00934 
00935             //Exit
00936             return FALSE;
00937         }   
00938 
00939         //OK
00940         return TRUE;
00941     }
00942     ERROR_HANDLER_RETURN("CheckSocketValid",FALSE)
00943 }

BOOL CTCPSocket::Close (  )  [virtual]

Reimplemented from CSpoofSocket.

Reimplemented in CTCPSocketAsync.

Definition at line 845 of file TCPSocket.cpp.

00846 {
00847     try
00848     {
00849         //Quit if not ok
00850         if (!CheckSocketValid())
00851             return FALSE;
00852 
00853         //Check if the father can close
00854         if (CSpoofSocket::Close())
00855         {
00856             //Set the connection status
00857             SetConnectionStatus(FALSE);
00858 
00859             //And exit
00860             return TRUE;
00861         }
00862         else
00863             return FALSE;
00864     }
00865     ERROR_HANDLER_RETURN("Close",FALSE)
00866 }

BOOL CTCPSocket::Connect ( const std::string &  rDestinationAddress,
unsigned short  usDestinationPort 
) [virtual]

Definition at line 249 of file TCPSocket.cpp.

00251 {
00252     try
00253     {
00254         return Connect(0,
00255                        rDestinationAddress,
00256                        usDestinationPort);
00257     }
00258     ERROR_HANDLER_RETURN("Connect",FALSE)
00259 }

BOOL CTCPSocket::Connect ( IP  aDestinationAddress,
unsigned short  usDestinationPort 
) [virtual]

Definition at line 237 of file TCPSocket.cpp.

00239 {
00240     try
00241     {
00242         return Connect(0,
00243                        aDestinationAddress,
00244                        usDestinationPort);
00245     }
00246     ERROR_HANDLER_RETURN("Connect",FALSE)
00247 }

BOOL CTCPSocket::Connect ( unsigned short  usSourcePort,
const std::string &  rDestinationAddress,
unsigned short  usDestinationPort 
) [virtual]

Definition at line 341 of file TCPSocket.cpp.

00344 {
00345     try
00346     {
00347         //Quit if not ok
00348         if (!CheckSocketValid())
00349             return FALSE;
00350 
00351         //Delegate the call
00352         return Connect(usSourcePort,
00353                        StringToLong(rDestinationAddress),
00354                        usDestinationPort);
00355     }
00356     ERROR_HANDLER_RETURN("Connect",FALSE)
00357 }

BOOL CTCPSocket::Connect ( unsigned short  usSourcePort,
IP  aDestinationAddress,
unsigned short  usDestinationPort 
) [virtual]

Special handling for raw sockets

Definition at line 261 of file TCPSocket.cpp.

00264 {
00265     try
00266     {
00267         //Quit if not ok
00268         if (!CheckSocketValid())
00269             return FALSE;
00270 
00271         ///Special handling for raw sockets
00272         if (IsRaw())
00273             return SendRaw(usSourcePort,
00274                            aDestinationAddress,
00275                            usDestinationPort,
00276                            NULL,
00277                            0,
00278                            TCPFlag_SYN);
00279         else
00280         {
00281             //Set async notification
00282             int iResult;
00283             
00284             //Create the address
00285             sockaddr_in aSrc;
00286         
00287             //Set to 0
00288             memset(&aSrc,
00289                    0,
00290                    sizeof(aSrc));
00291             aSrc.sin_family=AF_INET;
00292             aSrc.sin_addr.s_addr=aDestinationAddress;
00293             aSrc.sin_port=htons(usDestinationPort);
00294 
00295             //Connect
00296             iResult=connect(GetHandle(),
00297                             (sockaddr*)&aSrc,
00298                             sizeof(aSrc));
00299 
00300             //Did we have a blocked error
00301             BOOL bBlocked;
00302             bBlocked=FALSE;
00303 
00304             //Check the result
00305             if (iResult==GetErrorCode())
00306             {
00307                 //Check is it blocking error so we can ignore
00308                 if (WSAGetLastError()!=WSAEWOULDBLOCK)
00309                     SetLastError("Connect");
00310                 else
00311                 {
00312                     //Indicate it's blocked error
00313                     bBlocked=TRUE;
00314                     iResult=!GetErrorCode();
00315                 }
00316             }
00317             else
00318                 //Report the error
00319                 SetLastError("Connect");
00320             
00321             if (iResult!=GetErrorCode())
00322             {
00323                 //Check if we are a sync socket
00324                 if (!IsAsyncClass())
00325                     SetConnectionStatus(TRUE);
00326 
00327                 //Save where we are connected
00328                 SetConnectedTo(aSrc);
00329             }
00330 
00331             //Done
00332             if (!bBlocked)
00333                 return iResult!=GetErrorCode();
00334             else
00335                 return FALSE;
00336         }
00337     }
00338     ERROR_HANDLER_RETURN("Connect",FALSE)
00339 }

LPIpHeader CSpoofSocket::ConstructIPHeader ( unsigned char  ucProtocol,
unsigned short  usFragmentationFlags,
unsigned char  ucTTL,
unsigned short  usIdentification,
unsigned char  ucHeaderLength 
) const [protected, virtual, inherited]

Reimplemented in CICMPCrafter, CTCPCrafter, and CUDPCrafter.

Definition at line 778 of file SpoofSocket.cpp.

00783 {
00784     return ConstructStaticIPHeader(ucProtocol,
00785                                    usFragmentationFlags,
00786                                    ucTTL,
00787                                    usIdentification,
00788                                    ucHeaderLength);                
00789 }

LPIpHeader CSpoofSocket::ConstructStaticIPHeader ( unsigned char  ucProtocol,
unsigned short  usFragmentationFlags,
unsigned char  ucTTL,
unsigned short  usIdentification,
unsigned char  ucHeaderLength 
) [static, inherited]

Definition at line 1398 of file SpoofSocket.cpp.

01403 {
01404     try
01405     {
01406         //Need to construct the IP header
01407         LPIpHeader lpHead=new _IpHeader;
01408 
01409         //Header length (in 32 bits)
01410         lpHead->ucHeaderLength_Version=(ucHeaderLength >> 2) |
01411                                        (IpVersion << 4);
01412 
01413         //Protocol
01414         lpHead->ucProtocol=ucProtocol;
01415 
01416         //Fragmentation flags
01417         lpHead->usFragmentationFlags=htons(usFragmentationFlags);
01418 
01419         //Time to live
01420         lpHead->ucTTL=ucTTL;
01421 
01422         //Checksum - set to 0
01423         lpHead->usChecksum=0;
01424 
01425         //Identification
01426         lpHead->usIdentification=htons(usIdentification);
01427 
01428         //Precedence
01429         lpHead->ucTypeOfService=IpService_ROUTINE;
01430 
01431         //Return IP to user
01432         return lpHead;
01433     }
01434     ERROR_HANDLER_STATIC_RETURN(CSpoofSocket_LOGNAME,"ConstructIPHeader",NULL)
01435 }

LPTCPHeader CTCPSocket::ConstructTCPHeader ( unsigned short  usSourcePort,
unsigned short  usDestinationPort,
unsigned char  ucHeaderLength 
) const [protected, virtual]

Reimplemented in CTCPCrafter.

Definition at line 359 of file TCPSocket.cpp.

00362 {
00363     try
00364     {
00365         //Construct the header
00366         LPTCPHeader lpHead=new _TCPHeader;
00367         
00368         //Set source and destination port
00369         lpHead->usSourcePort=htons(usSourcePort);
00370         lpHead->usDestinationPort=htons(usDestinationPort);
00371 
00372         //No checksums yet
00373         lpHead->usChecksum=0;
00374 
00375         //Set windows to 3.0k
00376         lpHead->usWindows=htons(512);
00377 
00378         //Set the packet number
00379         lpHead->ulAcknowledgeNumber=0;
00380 
00381         //And the sequence
00382         lpHead->ulSequenceNumber=htonl(m_uiSequence++);
00383 
00384         //Data offset
00385         lpHead->ucDataOffset=(ucHeaderLength >> 2) << 4;
00386 
00387         //Flags
00388         lpHead->ucFlags=0;
00389 
00390         //Urgent pointer
00391         lpHead->usUrgentPointer=0;
00392 
00393         //Return it to the user
00394         return lpHead;
00395     }
00396     ERROR_HANDLER_RETURN("ConstructTCPHeader",NULL)
00397 }

BOOL CSpoofSocket::Create ( int  iProtocol  )  [inherited]

Definition at line 475 of file SpoofSocket.cpp.

00476 {
00477     //Close the socket if open
00478     if (ValidSocket())
00479         Close();
00480 
00481     try
00482     {
00483         //Are we overlapped
00484         if (!m_bOverlapped)
00485         {
00486             //Here we create the raw socket
00487             if (m_bRaw || iProtocol==IPPROTO_ICMP)
00488                 m_aSpoofSocket=socket(AF_INET,
00489                                       SOCK_RAW,
00490                                       iProtocol);
00491             else
00492                 if (iProtocol==IPPROTO_TCP)
00493                     m_aSpoofSocket=socket(AF_INET,
00494                                           SOCK_STREAM,
00495                                           iProtocol);
00496                 else if (iProtocol==IPPROTO_UDP)
00497                     m_aSpoofSocket=socket(AF_INET,
00498                                           SOCK_DGRAM,
00499                                           iProtocol);
00500         }
00501         else
00502         {
00503             //Here we create the raw socket
00504             if (m_bRaw || iProtocol==IPPROTO_ICMP)
00505                 m_aSpoofSocket=WSASocket(AF_INET,
00506                                          SOCK_RAW,
00507                                          iProtocol,
00508                                          NULL,
00509                                          NULL,
00510                                          WSA_FLAG_OVERLAPPED);
00511             else
00512                 if (iProtocol==IPPROTO_TCP)
00513                     m_aSpoofSocket=WSASocket(AF_INET,
00514                                              SOCK_STREAM,
00515                                              iProtocol,
00516                                              NULL,
00517                                              NULL,
00518                                              WSA_FLAG_OVERLAPPED);
00519                 else if (iProtocol==IPPROTO_UDP)
00520                     m_aSpoofSocket=WSASocket(AF_INET,
00521                                              SOCK_DGRAM,
00522                                              iProtocol,
00523                                              NULL,
00524                                              NULL,
00525                                              WSA_FLAG_OVERLAPPED);
00526         }
00527 
00528         //Check for socket validity
00529         if (m_aSpoofSocket==INVALID_SOCKET)
00530         {
00531             //Error
00532             SetLastError("Create");
00533 
00534             //Done
00535             return FALSE;
00536         }
00537 
00538         if (m_bRaw)
00539         {
00540             //Set that the application will send the IP header
00541             unsigned int iTrue=1;
00542 
00543             if(setsockopt(m_aSpoofSocket,
00544                           IPPROTO_IP,
00545                           IP_HDRINCL,
00546                           (char*)&iTrue,
00547                           sizeof(iTrue))==GetErrorCode())
00548             {
00549                 //Check for options error
00550                 SetLastError("Create");
00551 
00552                 //Exit
00553                 return FALSE;
00554             }
00555         }
00556 
00557         //Done
00558         return TRUE;
00559     }
00560     ERROR_HANDLER_RETURN("Create",FALSE)
00561 }

BOOL CTCPSocket::Create (  )  [virtual]

Reimplemented in CTCPSocketAsync, and CWhoisSocket.

Definition at line 218 of file TCPSocket.cpp.

00219 {
00220     try
00221     {
00222         //Initialize our data
00223         InitializeTCP();
00224 
00225         //Create it
00226         SetProtocol(IPPROTO_TCP);
00227 
00228         //Are we raw?
00229         if (IsRaw())
00230             return CSpoofSocket::Create(IPPROTO_IP); //Can't create working raw TCP socket
00231         else
00232             return CSpoofSocket::Create(IPPROTO_TCP);
00233     }
00234     ERROR_HANDLER_RETURN("Create",FALSE)
00235 }

std::string CErrorHandler::ErrorCodeToString ( DWORD  dwErrorCode  )  [static, inherited]

Definition at line 122 of file ErrorHandler.cpp.

00123 {
00124     try
00125     {
00126         //Get the error string
00127         LPVOID lpMsgBuf;
00128         FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
00129                       FORMAT_MESSAGE_FROM_SYSTEM | 
00130                       FORMAT_MESSAGE_IGNORE_INSERTS,
00131                       NULL,
00132                       dwErrorCode,
00133                       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
00134                       (LPTSTR) &lpMsgBuf,
00135                       0,
00136                       NULL);
00137 
00138         //Save it
00139         std::string sMessage;
00140         sMessage+=(char*)lpMsgBuf;
00141         
00142         //Release the buffer
00143         LocalFree(lpMsgBuf);
00144 
00145         //Done
00146         return sMessage;
00147     }
00148     catch (...)
00149     {
00150         return "Unknown";
00151     }
00152 }

void CSpoofSocket::FinalIPHeader ( LPIpHeader  lpHead  )  const [protected, virtual, inherited]

Reimplemented in CICMPCrafter, CTCPCrafter, and CUDPCrafter.

Definition at line 1393 of file SpoofSocket.cpp.

01394 {
01395     //We don't do anything
01396 }

void CTCPSocket::FinalTCPHeader ( LPTCPHeader  lpHead  )  const [protected, virtual]

Reimplemented in CTCPCrafter.

Definition at line 604 of file TCPSocket.cpp.

00605 {
00606 }

const std::string & CErrorHandler::GetClassName (  )  const [protected, inherited]

Reimplemented in CSocketThreadManager.

Definition at line 516 of file ErrorHandler.cpp.

00517 {
00518     return m_sClassName;
00519 }

std::string CErrorHandler::GetCurrentDateTime (  )  [static, inherited]

Definition at line 521 of file ErrorHandler.cpp.

00522 {
00523     try
00524     {
00525         //Our string
00526         std::string sDate;
00527 
00528         //Our tmp buf
00529         char cTmp[128];
00530 
00531         //Get date
00532         _strdate(cTmp);
00533         sDate=cTmp;
00534         sDate+=' ';
00535 
00536         //Get time
00537         _strtime(cTmp);
00538         sDate+=cTmp;
00539 
00540         //Done
00541         return sDate;
00542     }
00543     ERROR_HANDLER_STATIC_RETURN(CErrorHandler_Class,"GetCurrentDateTime","")
00544 }

int CSpoofBase::GetErrorCode (  )  [static, inherited]

Definition at line 488 of file SpoofBase.cpp.

00489 {
00490     return SOCKET_ERROR;
00491 }

CGenericCriticalSection * CSpoofBase::GetGlobalCriticalSection (  )  [static, inherited]

Definition at line 483 of file SpoofBase.cpp.

00484 {
00485     return m_pCSection;
00486 }

SOCKET CSpoofSocket::GetHandle (  )  const [inherited]

Definition at line 920 of file SpoofSocket.cpp.

00921 {
00922     return m_aSpoofSocket;
00923 }

int CSpoofBase::GetLastError (  )  const [inherited]

Definition at line 138 of file SpoofBase.cpp.

00139 {
00140     return m_iLastError;
00141 }

unsigned long CSpoofBase::GetNumberOfThreads (  )  [static, inherited]

Definition at line 463 of file SpoofBase.cpp.

00464 {
00465     return m_ulNumberOfThreads;
00466 }

CIPOptions * CSpoofSocket::GetOptions (  )  const [inherited]

Definition at line 196 of file SpoofSocket.cpp.

00197 {
00198     return m_pIPOptions;
00199 }

long CSpoofSocket::GetPeerAddress (  )  const [inherited]

Definition at line 1349 of file SpoofSocket.cpp.

01350 {
01351     //Get the address we are connected to
01352     return m_aConnectedTo.sin_addr.S_un.S_addr;
01353 }

unsigned short CSpoofSocket::GetPeerPort (  )  const [inherited]

Definition at line 1388 of file SpoofSocket.cpp.

01389 {
01390     return htons(m_aConnectedTo.sin_port);
01391 }

unsigned char CSpoofSocket::GetProtocol (  )  const [protected, inherited]

Definition at line 1564 of file SpoofSocket.cpp.

01565 {
01566     return m_ucProtocol;
01567 }

IP CSpoofSocket::GetSourceAddress (  )  const [protected, inherited]

Definition at line 1554 of file SpoofSocket.cpp.

01555 {
01556     return m_ulSourceAddress;
01557 }

int CSpoofBase::GetSystemLastError (  )  const [inherited]

Definition at line 478 of file SpoofBase.cpp.

00479 {
00480     return WSAGetLastError();
00481 }

CTCPOptions * CTCPSocket::GetTCPOptions (  )  const

Definition at line 425 of file TCPSocket.cpp.

00426 {
00427     return m_pTCPOptions;
00428 }

unsigned char CSpoofSocket::GetTTL (  )  const [protected, inherited]

Reimplemented in CPingSocket.

Definition at line 1549 of file SpoofSocket.cpp.

01550 {
01551     return m_ucTTL;
01552 }

BOOL CSpoofSocket::HasOptions (  )  const [protected, inherited]

Definition at line 1559 of file SpoofSocket.cpp.

01560 {
01561     return m_bOptions;
01562 }

void CSpoofSocket::InitializeIP (  )  [protected, virtual, inherited]

Definition at line 1094 of file SpoofSocket.cpp.

01095 {
01096     try
01097     {
01098         //Invalid the socket
01099         m_aSpoofSocket=INVALID_SOCKET;
01100 
01101         //More invalids
01102         m_ulSourceAddress=0;
01103 
01104         //Some defaults
01105         m_ucTTL=IP_DEF_TTL;
01106 
01107         //Set our options
01108         m_pIPOptions=NULL;
01109 
01110         //Not sniffing
01111         m_bSniffing=FALSE;
01112 
01113         //We are not overlapped
01114         m_bOverlapped=FALSE;
01115 
01116         //Not connected
01117         memset(&m_aConnectedTo,
01118                0,
01119                sizeof(m_aConnectedTo));
01120 
01121         //Set options to false
01122         SetOptions(FALSE);
01123     }
01124     ERROR_HANDLER("InitializeIP")
01125 }

BOOL CSpoofBase::InitializeSockets ( BOOL  bMultiThreaded = TRUE,
unsigned long  ulNumberOfThreads = 10 
) [static, inherited]

Definition at line 279 of file SpoofBase.cpp.

00281 {
00282     //To avoid double initialize
00283     if (m_bInitialized)
00284     {
00285         //Report it
00286         ReportStaticError(CSpoofBase_Class,"InitializeSockets","Already initialized!");
00287 
00288         //Exit
00289         return TRUE;
00290     }
00291 
00292     //Check that the number of threads are OK?
00293     if (ulNumberOfThreads>CLibConfig::GetInstance().GetMaxThreads())
00294     {
00295         //Report it
00296         ReportStaticError(CSpoofBase_Class,"InitializeSockets","Too many threads!");
00297 
00298         //Exit
00299         return FALSE;
00300     }
00301 
00302     //Do we have threads at all
00303     if (bMultiThreaded &&
00304         !ulNumberOfThreads)
00305     {
00306         //Report it
00307         ReportStaticError(CSpoofBase_Class,"InitializeSockets","Didn't receive any threads!");
00308 
00309         //Exit
00310         return FALSE;
00311     }
00312 
00313     try
00314     {
00315         //Initialize the sockets
00316         WORD wVersionRequested;
00317         wVersionRequested=MAKEWORD(2,2);
00318  
00319         //Try to initialize
00320         WSADATA wsaData;
00321         int iErr;
00322         iErr=WSAStartup(wVersionRequested, 
00323                         &wsaData);
00324 
00325         //Did we succeed?
00326         if (iErr!=0)
00327             /* Tell the user that we could not find a usable */
00328             /* WinSock DLL.                                  */
00329             return FALSE;
00330  
00331         /* Confirm that the WinSock DLL supports 2.2.*/
00332         /* Note that if the DLL supports versions greater    */
00333         /* than 2.2 in addition to 2.2, it will still return */
00334         /* 2.2 in wVersion since that is the version we      */
00335         /* requested.                                        */
00336  
00337         if (LOBYTE(wsaData.wVersion)!=2 || 
00338             HIBYTE(wsaData.wVersion)!=2)
00339         {
00340             /* Tell the user that we could not find a usable */
00341             /* WinSock DLL.                                  */
00342             WSACleanup();
00343 
00344             //Exit
00345             return FALSE;
00346         }
00347 
00348         //Save the threading information
00349         m_bMultiThreaded=bMultiThreaded;
00350         m_ulNumberOfThreads=ulNumberOfThreads;
00351 
00352         //Create the critical section
00353         m_pCSection=COSManager::CreateCriticalSection();
00354 
00355         //And we are initialized
00356         m_bInitialized=TRUE;
00357 
00358         return TRUE;
00359     }
00360     ERROR_HANDLER_STATIC_RETURN(CSpoofBase_Class,"InitializeSockets",FALSE)
00361 }

BOOL CSpoofBase::InitializeSocketsNoMap ( BOOL  bMultiThreaded = TRUE,
unsigned long  ulNumberOfThreads = 10 
) [static, inherited]

Definition at line 202 of file SpoofBase.cpp.

00204 {
00205     //To avoid double initialize
00206     if (m_bInitialized)
00207     {
00208         //Report it
00209         ReportStaticError(CSpoofBase_Class,"InitializeSocketsNoMap","Already initialized!");
00210 
00211         //Exit
00212         return TRUE;
00213     }
00214 
00215     //Check that the number of threads are OK?
00216     if (ulNumberOfThreads>CLibConfig::GetInstance().GetMaxThreads())
00217     {
00218         //Report it
00219         ReportStaticError(CSpoofBase_Class,"InitializeSocketsNoMap","Too many threads!");
00220 
00221         //Exit
00222         return FALSE;
00223     }
00224 
00225     //Do we have threads at all
00226     if (bMultiThreaded &&
00227         !ulNumberOfThreads)
00228     {
00229         //Report it
00230         ReportStaticError(CSpoofBase_Class,"InitializeSocketsNoMap","Didn't receive any threads!");
00231 
00232         //Exit
00233         return FALSE;
00234     }
00235 
00236     try
00237     {
00238         //Create the thread data
00239         ThreadData* pThreadData;
00240         pThreadData=new ThreadData;
00241 
00242         //Populate the data
00243         pThreadData->pEvent=COSManager::CreateEvent();
00244         pThreadData->bMultiThreaded=bMultiThreaded;
00245         pThreadData->ulNumberOfThreads=ulNumberOfThreads;
00246 
00247         //Create the thread
00248         m_pThread=new CManagedThread(InitProc);
00249         m_pThread->Start((LPVOID)pThreadData);
00250 
00251         //Wait on the event
00252         if (pThreadData->pEvent->Wait(THREAD_TIMEOUT))
00253         {
00254             //Report it
00255             ReportStaticError(CSpoofBase_Class,"InitializeSocketsNoMap","Timeout waiting for thread");
00256 
00257             //Delete the thread
00258             delete m_pThread;
00259             m_pThread=NULL;
00260 
00261             //Exit
00262             return FALSE;
00263         }
00264 
00265         //Are we initialized
00266         if (!IsInitialized())
00267         {
00268             //Delete the thread
00269             delete m_pThread;
00270             m_pThread=NULL;
00271         }
00272 
00273         //Done
00274         return IsInitialized();
00275     }
00276     ERROR_HANDLER_STATIC_RETURN(CSpoofBase_Class,"InitializeSocketsNoMap",FALSE)
00277 }

BOOL CTCPSocket::IsAsyncClass (  )  const [protected, virtual]

Reimplemented in CTCPSocketAsync.

Definition at line 803 of file TCPSocket.cpp.

00804 {
00805     return FALSE;
00806 }

BOOL CTCPSocket::IsConnected (  )  const

Definition at line 798 of file TCPSocket.cpp.

00799 {
00800     return m_bConnected;
00801 }

BOOL CSpoofSocket::IsCreated (  )  const [inherited]

Definition at line 1517 of file SpoofSocket.cpp.

01518 {
01519     return ValidSocket();
01520 }

BOOL CSpoofBase::IsInitialized (  )  [static, inherited]

Definition at line 468 of file SpoofBase.cpp.

00469 {
00470     return m_bInitialized;
00471 }

BOOL CSpoofBase::IsMultiThreaded (  )  [static, inherited]

Definition at line 458 of file SpoofBase.cpp.

00459 {
00460     return m_bMultiThreaded;
00461 }

BOOL CSpoofSocket::IsRaw (  )  const [protected, inherited]

Definition at line 1089 of file SpoofSocket.cpp.

01090 {
01091     return m_bRaw;
01092 }

BOOL CTCPSocket::Listen ( unsigned long  ulBackLog = 5  )  [virtual]

Reimplemented in CTCPSocketAsync.

Definition at line 430 of file TCPSocket.cpp.

00431 {
00432     try
00433     {
00434         //Quit if not ok
00435         if (!CheckSocketValid())
00436             return FALSE;
00437 
00438         //Try to listen
00439         int iResult;
00440         iResult=listen(GetHandle(),
00441                        ulBackLog);
00442 
00443         //Is all OK
00444         if (iResult)
00445         {
00446             //Report it
00447             SetLastError("Listen");
00448 
00449             //Exit
00450             return FALSE;
00451         }
00452         else
00453             return TRUE;
00454     }
00455     ERROR_HANDLER_RETURN("Listen",FALSE)
00456 }

std::string CSpoofBase::LongToStdString ( unsigned long  ulAddr  )  [static, inherited]

Definition at line 420 of file SpoofBase.cpp.

00421 {
00422     try
00423     {
00424         //First create the address
00425         in_addr addr;
00426 
00427         //Assign it
00428         addr.S_un.S_addr=ulAddr;
00429 
00430         //Enter the critical section
00431         CCriticalAutoRelease aRelease(m_pCSection);
00432 
00433         //Return the value
00434         return inet_ntoa(addr);
00435     }
00436     ERROR_HANDLER_STATIC_RETURN(CSpoofBase_Class,"LongToStdString","0.0.0.0")
00437 }

char FAR * CSpoofBase::LongToString ( unsigned long  ulAddr  )  [static, inherited]

Definition at line 439 of file SpoofBase.cpp.

00440 {
00441     try
00442     {
00443         //First create the address
00444         in_addr addr;
00445 
00446         //Assign it
00447         addr.S_un.S_addr=ulAddr;
00448 
00449         //Enter the critical section
00450         CCriticalAutoRelease aRelease(m_pCSection);
00451 
00452         //Return the value
00453         return inet_ntoa(addr);
00454     }
00455     ERROR_HANDLER_STATIC_RETURN(CSpoofBase_Class,"LongToString",NULL)
00456 }

void CSpoofBase::NotifyShutdown (  )  [protected, virtual, inherited]

Definition at line 402 of file SpoofBase.cpp.

00403 {
00404 }

bool CSpoofSocket::operator< ( const CSpoofSocket rSocket  )  const [inherited]

Definition at line 1601 of file SpoofSocket.cpp.

01602 {
01603     return m_aSpoofSocket<rSocket.m_aSpoofSocket;
01604 }

bool CSpoofSocket::operator== ( const CSpoofSocket rSocket  )  const [inherited]

Definition at line 1596 of file SpoofSocket.cpp.

01597 {
01598     return m_aSpoofSocket==rSocket.m_aSpoofSocket;
01599 }

int CSpoofSocket::Receive ( char *  pBuffer,
unsigned long  ulBufferLength 
) [virtual, inherited]

Reimplemented in CTCPSocketAsync, and CUDPSocket.

Definition at line 1210 of file SpoofSocket.cpp.

01212 {
01213     try
01214     {
01215         if (!ValidSocket() ||
01216             !pBuffer ||
01217             !ulBufferLength)
01218             return GetErrorCode();
01219 
01220         //Receive data
01221         int iResult;
01222 
01223         //Receive
01224         if (m_ucProtocol!=IPPROTO_TCP && 
01225             !m_bSniffing)
01226         {
01227             //Get the remote address
01228             sockaddr saConnected;
01229 
01230             int iTmp;
01231             iTmp=sizeof(saConnected);
01232 
01233             //Accept it
01234             iResult=recvfrom(GetHandle(),
01235                              pBuffer,
01236                              ulBufferLength,
01237                              NULL,
01238                              &saConnected,
01239                              &iTmp);
01240 
01241             //If OK set it
01242             if (iResult!=GetErrorCode())
01243                 //Take the connected to data
01244                 memcpy(&m_aConnectedTo,
01245                        &saConnected,
01246                        sizeof(saConnected));
01247         }
01248         else
01249             //Do a regular receive
01250             iResult=recv(GetHandle(),
01251                          pBuffer,
01252                          ulBufferLength,
01253                          NULL);
01254 
01255         //Check if error
01256         if (iResult==GetErrorCode() &&
01257             GetSystemLastError()!=WSAEWOULDBLOCK)
01258             //Error
01259             SetLastError("Receive");
01260 
01261         //Number of bytes received
01262         return iResult;
01263     }
01264     ERROR_HANDLER_RETURN("Receive",GetErrorCode())
01265 }

int CSpoofSocket::ReceiveFrom ( char *  pBuffer,
unsigned long  ulBufferLength,
IP rIP,
unsigned short &  rSourcePort 
) [protected, virtual, inherited]

Definition at line 1140 of file SpoofSocket.cpp.

01144 {
01145     try
01146     {
01147         if (!ValidSocket() ||
01148             !pBuffer ||
01149             !ulBufferLength)
01150             return GetErrorCode();
01151 
01152         //Receive data
01153         int iResult;
01154 
01155         //Receive
01156         if (m_ucProtocol!=IPPROTO_TCP && 
01157             !m_bSniffing)
01158         {
01159             //Get the remote address
01160             sockaddr saConnected;
01161 
01162             int iTmp;
01163             iTmp=sizeof(saConnected);
01164 
01165             //Accept it
01166             iResult=recvfrom(GetHandle(),
01167                              pBuffer,
01168                              ulBufferLength,
01169                              NULL,
01170                              &saConnected,
01171                              &iTmp);
01172 
01173             //If OK set it
01174             if (iResult!=GetErrorCode())
01175             {
01176                 //Address
01177                 rIP=((sockaddr_in*)&saConnected)->sin_addr.S_un.S_addr;
01178 
01179                 //Port
01180                 rSourcePort=htons(((sockaddr_in*)&saConnected)->sin_port);
01181 
01182                 //Done
01183                 return iResult;
01184             }
01185             else
01186             {
01187                 //Error
01188                 SetLastError("Receive");
01189 
01190                 //Reset the data
01191                 rIP=0;
01192                 rSourcePort=0;
01193 
01194                 //Done
01195                 return iResult;
01196             }
01197         }
01198         else
01199         {
01200             //Report it
01201             ReportError("Receive","Can't run on TCP socket!");
01202 
01203             //Exit
01204             return GetErrorCode();
01205         }
01206     }
01207     ERROR_HANDLER_RETURN("Receive",GetErrorCode())
01208 }

void CSpoofBase::RegisterShutdown ( CSpoofBase pBase  )  [protected, inherited]

Definition at line 406 of file SpoofBase.cpp.

00407 {
00408     try
00409     {
00410         //Check if we already have a class
00411         if (m_pShutdownClass)
00412             delete m_pShutdownClass;
00413 
00414         //Take it
00415         m_pShutdownClass=pBase;
00416     }
00417     ERROR_HANDLER("RegisterShutdown")
00418 }

void CErrorHandler::ReportError ( const std::string &  rMethod,
const std::string &  rMessage,
int  iErrorCode 
) const [protected, virtual, inherited]

Definition at line 154 of file ErrorHandler.cpp.

00157 {
00158     if (!GetLog())
00159         return;
00160 
00161     try
00162     {
00163         //Get the log
00164         CErrorLog* pLog;
00165         pLog=GetLog();
00166 
00167         //Convert the error code
00168         char aTmp[11];
00169         sprintf(aTmp,"%d",iErrorCode);
00170 
00171         //Get the string for it
00172         std::string sError;
00173         sError=rMessage;
00174         sError+=", and Socket error: ";
00175         sError+=aTmp;
00176         sError+=", ";
00177         sError+=ErrorCodeToString(iErrorCode);
00178 
00179         //Report to the log
00180         pLog->ReportError(m_sClassName,
00181                           rMethod,
00182                           sError);
00183     }
00184     ERROR_UNKNOWN("ReportError")
00185 }

void CErrorHandler::ReportError ( const std::string &  rMethod,
int  iErrorCode 
) const [protected, virtual, inherited]

Definition at line 187 of file ErrorHandler.cpp.

00189 {
00190     if (!GetLog())
00191         return;
00192 
00193     try
00194     {
00195         //Get the log
00196         CErrorLog* pLog;
00197         pLog=GetLog();
00198 
00199         //Convert the error code
00200         char aTmp[11];
00201         sprintf(aTmp,"%d",iErrorCode);
00202 
00203         //Get the string for it
00204         std::string sError;
00205         sError="Socket error: ";
00206         sError+=aTmp;
00207         sError+=", ";
00208         sError+=ErrorCodeToString(iErrorCode);
00209 
00210         //Report to the log
00211         pLog->ReportError(m_sClassName,
00212                           rMethod,
00213                           sError);
00214     }
00215     ERROR_UNKNOWN("ReportError")
00216 }

void CErrorHandler::ReportError ( const std::string &  rMethod,
const std::string &  rMessage,
DWORD  dwAdditionalData 
) const [protected, virtual, inherited]

Definition at line 275 of file ErrorHandler.cpp.

00278 {
00279     if (!GetLog())
00280         return;
00281 
00282     try
00283     {
00284         //Get the log
00285         CErrorLog* pLog;
00286         pLog=GetLog();
00287 
00288         //Convert the number
00289         char aTmp[11];
00290         ltoa(dwAdditionalData,aTmp,10);
00291 
00292         //Create the new message
00293         std::string sNewMessage(rMessage);
00294         sNewMessage+="Additional data: ";
00295         sNewMessage+=aTmp;
00296 
00297         //Report to the log
00298         pLog->ReportError(m_sClassName,
00299                           rMethod,
00300                           sNewMessage);
00301     }
00302     ERROR_UNKNOWN("ReportError")
00303 }

void CErrorHandler::ReportError ( const std::string &  rMethod,
const std::string &  rMessage 
) const [protected, virtual, inherited]

Definition at line 218 of file ErrorHandler.cpp.

00220 {
00221     if (!GetLog())
00222         return;
00223 
00224     try
00225     {
00226         CErrorLog* pLog;
00227         pLog=GetLog();
00228 
00229         //Report to the log
00230         pLog->ReportError(m_sClassName,
00231                           rMethod,
00232                           rMessage);
00233     }
00234     ERROR_UNKNOWN("ReportError")
00235 }

void CErrorHandler::ReportError ( const std::string &  rMethod  )  const [protected, virtual, inherited]

Definition at line 311 of file ErrorHandler.cpp.

00312 {
00313     if (!GetLog())
00314         return;
00315 
00316     try
00317     {
00318 #ifdef WIN32
00319         //Get the last error
00320         DWORD dwLastError;
00321         dwLastError=GetLastError();
00322 
00323         //Report the error
00324         GetLog()->ReportError(m_sClassName,
00325                               rMethod,
00326                               ErrorCodeToString(dwLastError));
00327 
00328 #else
00329         GetLog()->ReportCatchError(m_sClassName,
00330                                    rMethod,
00331                                    "Unknown error!");
00332 #endif
00333     }
00334     ERROR_UNKNOWN("ReportError")
00335 }

void CErrorHandler::ReportErrorOS ( const std::string &  rMethod,
const std::string &  rMessage 
) const [protected, virtual, inherited]

Definition at line 237 of file ErrorHandler.cpp.

00239 {
00240     if (!GetLog())
00241         return;
00242 
00243     try
00244     {
00245         //Get the last error
00246         DWORD dwLastError;
00247         dwLastError=GetLastError();
00248 
00249         //Format the message
00250         std::string sMessage;
00251         sMessage=rMessage;
00252         sMessage+=", with error code: ";
00253 
00254         //Convert the error code
00255         char aTmp[11];
00256         itoa(dwLastError,aTmp,10);
00257 
00258         //Add it again
00259         sMessage+=aTmp;
00260         sMessage+=" ";
00261         sMessage+=ErrorCodeToString(dwLastError);
00262         
00263         //Get the log
00264         CErrorLog* pLog;
00265         pLog=GetLog();
00266 
00267         //Report to the log
00268         pLog->ReportError(m_sClassName,
00269                           rMethod,
00270                           sMessage);
00271     }
00272     ERROR_UNKNOWN("ReportErrorOS")
00273 }

void CErrorHandler::ReportStaticError ( const std::string &  rClass,
const std::string &  rMethod,
const std::string &  rMessage,
DWORD  dwAdditionalData 
) [static, protected, inherited]

Definition at line 489 of file ErrorHandler.cpp.

00493 {
00494     if (!m_pLog)
00495         return;
00496 
00497     try
00498     {
00499         //Convert the number
00500         char aTmp[11];
00501         ltoa(dwAdditionalData,aTmp,10);
00502 
00503         //Create the new message
00504         std::string sNewMessage(rMessage);
00505         sNewMessage+="Additional data: ";
00506         sNewMessage+=aTmp;
00507 
00508         //Report to the log
00509         m_pLog->ReportError(rClass,
00510                             rMethod,
00511                             sNewMessage);
00512     }
00513     ERROR_UNKNOWN("ReportStaticError")
00514 }

void CErrorHandler::ReportStaticError ( const std::string &  rClass,
const std::string &  rMethod,
const std::string &  rMessage 
) [static, protected, inherited]

Definition at line 472 of file ErrorHandler.cpp.

00475 {
00476     if (!m_pLog)
00477         return;
00478 
00479     try
00480     {
00481         //Report to the log
00482         m_pLog->ReportError(rClass,
00483                             rMethod,
00484                             rMessage);
00485     }
00486     ERROR_UNKNOWN("ReportStaticError")
00487 }

void CErrorHandler::ReportStaticError ( const std::string &  rClass,
const std::string &  rMethod 
) [static, protected, inherited]

Definition at line 446 of file ErrorHandler.cpp.

00448 {
00449     if (!m_pLog)
00450         return;
00451 
00452     try
00453     {
00454 #ifdef WIN32
00455         //Get the last error
00456         DWORD dwLastError;
00457         dwLastError=GetLastError();
00458 
00459         //Report the error
00460         m_pLog->ReportError(rClass,
00461                             rMethod,
00462                             ErrorCodeToString(dwLastError));
00463 #else
00464         m_pLog->ReportError(rClass,
00465                             rMethod,
00466                             "Unknown error!");
00467 #endif
00468     }
00469     ERROR_UNKNOWN("ReportStaticError")
00470 }

long CSpoofSocket::ResolveDNS ( const std::string &  rAddress  )  [static, inherited]

Definition at line 1300 of file SpoofSocket.cpp.

01301 {
01302     try
01303     {
01304         //Resolve the DNS
01305         sockaddr_in aAddr;
01306         aAddr=InternalResolveDNS(rAddress.c_str());
01307 
01308         //Check if valid
01309         if (aAddr.sin_addr.S_un.S_addr==0)
01310             //Error
01311             return 0;
01312         else
01313             return aAddr.sin_addr.S_un.S_addr;
01314     }
01315     ERROR_HANDLER_STATIC_RETURN(CSpoofSocket_LOGNAME,"ResolveDNS",0)
01316 }

int CSpoofSocket::Send ( const std::string &  rDestinationAddress,
const char *  pBuffer,
unsigned long  ulBufferLength,
unsigned short  usDestinationPort = 0 
) [virtual, inherited]

Definition at line 759 of file SpoofSocket.cpp.

00763 {
00764     try
00765     {
00766         //Quit if not ok
00767         if (!CheckSocketValid())
00768             return GetErrorCode();
00769 
00770         return Send(inet_addr(rDestinationAddress.c_str()),
00771                     pBuffer,
00772                     ulBufferLength,
00773                     usDestinationPort);
00774     }
00775     ERROR_HANDLER_RETURN("Send",GetErrorCode())
00776 }

int CSpoofSocket::Send ( IP  aDestinationAddress,
const char *  pBuffer,
unsigned long  ulBufferLength,
unsigned short  usDestinationPort = 0 
) [virtual, inherited]

Definition at line 604 of file SpoofSocket.cpp.

00608 {
00609     try
00610     {
00611         //Quit if not ok
00612         if (!CheckSocketValid())
00613             return GetErrorCode();
00614 
00615         //Is it a valid size
00616         if (ulBufferLength &&
00617             !pBuffer)
00618             return GetErrorCode();
00619 
00620         //Define the target address
00621         sockaddr_in aTargetAddress;
00622         memset(&aTargetAddress,
00623                0,
00624                sizeof(aTargetAddress));
00625 
00626         aTargetAddress.sin_family=AF_INET;
00627         aTargetAddress.sin_addr.s_addr=aDestinationAddress;
00628         aTargetAddress.sin_port=htons(usDestinationPort);
00629 
00630         //packet send status ?
00631         int iResult;
00632 
00633         //Only if allowing raw headers !!
00634         if (m_bRaw)
00635         {
00636             //Header length
00637             unsigned char ucHeaderLength;
00638             ucHeaderLength=IpHeaderLength;
00639 
00640             //Do we have options?
00641             if (m_bOptions)
00642                 ucHeaderLength+=m_pIPOptions->GetBufferLength();
00643             
00644             //First construct the packet
00645             LPIpHeader lpHead=ConstructIPHeader(m_ucProtocol,
00646                                                 IpFragFlag_DONT_FRAG,
00647                                                 m_ucTTL,
00648                                                 (unsigned short)GetCurrentProcessId(),
00649                                                 ucHeaderLength);
00650 
00651             //Protect the header
00652             std::auto_ptr<IpHeader> pProtection(lpHead);
00653 
00654             //Set the address
00655             SetIPHeaderAddress(lpHead,
00656                                m_ulSourceAddress,
00657                                aDestinationAddress);
00658 
00659             //Now add some more options
00660             int iTotalLength;
00661             iTotalLength=ucHeaderLength+ulBufferLength;
00662 
00663             //Set the header
00664             lpHead->usTotalLength=htons(iTotalLength);
00665 
00666             //Need to construct a new packet
00667             char* pNewBuffer;
00668             pNewBuffer=new char[iTotalLength];
00669 
00670             //Protect the buffer
00671             CArray_ptr<char> pBufferProtection(pNewBuffer);
00672 
00673             //Copy two buffers
00674             memcpy(pNewBuffer,
00675                    lpHead,
00676                    IpHeaderLength);
00677 
00678             //Do we need to copy options ?
00679             if (m_bOptions)
00680                 memcpy(pNewBuffer+IpHeaderLength,
00681                        m_pIPOptions->GetBuffer(),
00682                        m_pIPOptions->GetBufferLength());
00683 
00684             //Only if not null
00685             if (pBuffer)
00686                 memcpy(pNewBuffer+ucHeaderLength,
00687                        pBuffer,
00688                        ulBufferLength);
00689             
00690             //Calculate the checksum
00691             lpHead->usChecksum=CalculateChecksum((unsigned short*)pNewBuffer,
00692                                                  ucHeaderLength);
00693 
00694             //Alert everyone this is the final header
00695             FinalIPHeader(lpHead);
00696 
00697             //Recopy the ip
00698             memcpy(pNewBuffer,
00699                    lpHead,
00700                    IpHeaderLength);
00701             
00702             //Send the data
00703             iResult=sendto(GetHandle(),
00704                            (const char*)pNewBuffer,
00705                            iTotalLength,
00706                            0,
00707                            (sockaddr*)&aTargetAddress,
00708                            sizeof(aTargetAddress));
00709 
00710             //Is all OK
00711             if (iResult==GetErrorCode() &&
00712                 GetSystemLastError()!=WSAEWOULDBLOCK)
00713                 //Set the error
00714                 SetLastError("Send - Raw");
00715         }
00716         else
00717         {
00718             //Set to no error
00719             iResult=!GetErrorCode();
00720 
00721             //Insert options
00722             /*if (m_bOptions)
00723                 iResult=setsockopt(GetHandle(),
00724                                    IPPROTO_IP,
00725                                    IP_OPTIONS,
00726                                    m_pIPOptions->GetBuffer(),
00727                                    m_pIPOptions->GetBufferLength());
00728             else
00729                 //No options
00730                 iResult=setsockopt(GetHandle(),
00731                                    IPPROTO_IP,
00732                                    IP_OPTIONS,
00733                                    NULL,
00734                                    0);*/
00735 
00736             //Check if we had an error
00737             if (iResult!=GetErrorCode())
00738                 //Use regular send !!!
00739                 iResult=sendto(GetHandle(),
00740                                (const char*)pBuffer,
00741                                ulBufferLength,
00742                                0,
00743                                (sockaddr*)&aTargetAddress,
00744                                sizeof(aTargetAddress));
00745             
00746             //Is all OK?
00747             if (iResult==GetErrorCode() &&
00748                 GetSystemLastError()!=WSAEWOULDBLOCK)
00749                 //Set the error
00750                 SetLastError("Send");
00751         }
00752         
00753         //Done
00754         return iResult;
00755     }
00756     ERROR_HANDLER_RETURN("Send",GetErrorCode())
00757 }

int CTCPSocket::Send ( const char *  pBuffer,
unsigned long  ulBufferLength 
) [virtual]

Reimplemented in CTCPSocketAsync.

Definition at line 571 of file TCPSocket.cpp.

00573 {
00574     try
00575     {
00576         //Quit if not ok
00577         if (!CheckSocketValid())
00578             return FALSE;
00579 
00580         //Send the data
00581         int iResult;
00582 
00583         //And send it
00584         iResult=send(GetHandle(),
00585                      pBuffer,
00586                      ulBufferLength,
00587                      NULL);
00588 
00589         //Did we succeed ?
00590         if (iResult==GetErrorCode())
00591             //Set the error code
00592             SetLastError("Send");
00593 
00594         //Done
00595         return iResult;
00596     }
00597     ERROR_HANDLER_RETURN("Send",FALSE)
00598 }

int CTCPSocket::SendRaw ( unsigned short  usSourcePort,
const std::string &  rDestinationAddress,
unsigned short  usDestinationPort,
const char *  pBuffer,
unsigned long  ulBufferLength,
unsigned char  ucFlags = 0 
) [protected, virtual]

Reimplemented in CTCPCrafter.

Definition at line 608 of file TCPSocket.cpp.

00614 {
00615     try
00616     {
00617         //Quit if not ok
00618         if (!CheckSocketValid())
00619             return FALSE;
00620 
00621         return SendRaw(usSourcePort,
00622                        StringToLong(rDestinationAddress),
00623                        usDestinationPort,
00624                        pBuffer,
00625                        ulBufferLength,
00626                        ucFlags);
00627     }
00628     ERROR_HANDLER_RETURN("SendRaw",GetErrorCode())
00629 }

int CTCPSocket::SendRaw ( unsigned short  usSourcePort,
IP  aDestinationAddress,
unsigned short  usDestinationPort,
const char *  pBuffer,
unsigned long  ulBufferLength,
unsigned char  ucFlags = 0 
) [protected, virtual]

Reimplemented in CTCPCrafter.

Definition at line 631 of file TCPSocket.cpp.

00637 {
00638     try
00639     {
00640         //Quit if not ok
00641         if (!CheckSocketValid())
00642             return FALSE;
00643 
00644         if (IsRaw())
00645         {
00646             //Let's try our first attack
00647             LPTCPHeader lpHead;
00648 
00649             //Header length
00650             int iHeaderLength;
00651             iHeaderLength=TCPHeaderLength;
00652 
00653             //If we have TCP options
00654             if (m_bOptions)
00655                 iHeaderLength+=m_pTCPOptions->GetBufferLength();
00656 
00657             //Create the header
00658             lpHead=ConstructTCPHeader(usSourcePort,
00659                                       usDestinationPort,
00660                                       iHeaderLength);
00661 
00662             //Protect the header
00663             std::auto_ptr<TCPHeader> pProtection(lpHead);
00664 
00665             //Set the flags
00666             if (ucFlags)
00667                 //Set the flags
00668                 SetHeaderFlag(lpHead,ucFlags);
00669             
00670             //Result 
00671             int iResult;
00672 
00673             //Construct diffrently if we have options
00674             if (m_bOptions)
00675             {
00676                 //Allocate the data
00677                 char* pOptionBuffer;
00678                 pOptionBuffer=new char[iHeaderLength+ulBufferLength];
00679 
00680                 //Protect the buffer
00681                 CArray_ptr<char> pBufferProtection(pOptionBuffer);
00682 
00683                 //Copy header
00684                 memcpy(pOptionBuffer,
00685                        lpHead,
00686                        TCPHeaderLength);
00687             
00688                 //Copy options
00689                 memcpy(pOptionBuffer+TCPHeaderLength,
00690                        m_pTCPOptions->GetBuffer(),
00691                        m_pTCPOptions->GetBufferLength());
00692 
00693                 //Do we have the buffer
00694                 if (ulBufferLength)
00695                     //Copy the data
00696                     memcpy(pOptionBuffer+
00697                              TCPHeaderLength+
00698                              m_pTCPOptions->GetBufferLength(),
00699                            pBuffer,
00700                            ulBufferLength);
00701 
00702                 //Calculate the total length
00703                 int iTotalLength;
00704                 iTotalLength=iHeaderLength+ulBufferLength;
00705 
00706                 //Change the header
00707                 lpHead->ucDataOffset=(iTotalLength >> 2) << 4;
00708 
00709                 //Checksum it
00710                 lpHead->usChecksum=CalculatePseudoChecksum(pOptionBuffer,
00711                                                            iTotalLength,
00712                                                            aDestinationAddress,
00713                                                            iTotalLength);
00714                 
00715                 //Last change to the header
00716                 FinalTCPHeader(lpHead);
00717 
00718                 //Recopy header
00719                 memcpy(pOptionBuffer,
00720                        lpHead,
00721                        TCPHeaderLength);
00722 
00723                 //Send the data
00724                 iResult=CSpoofSocket::Send(aDestinationAddress,
00725                                            pOptionBuffer,
00726                                            iHeaderLength,
00727                                            usDestinationPort);
00728             }
00729             else
00730             {
00731                 //Our total length
00732                 unsigned long ulTotalLength;
00733                 ulTotalLength=iHeaderLength+ulBufferLength;
00734 
00735                 //Allocate the buffer
00736                 char* pNewBuffer;
00737                 pNewBuffer=new char[ulTotalLength];
00738 
00739                 //Protect the buffer
00740                 CArray_ptr<char> pBufferProtection(pNewBuffer);
00741 
00742                 //Copy the header
00743                 memcpy(pNewBuffer,
00744                        lpHead,
00745                        ulTotalLength);
00746 
00747                 //Copy the data
00748                 if (ulBufferLength)
00749                     //Copy the data
00750                     memcpy(pNewBuffer+iHeaderLength,
00751                            pBuffer,
00752                            ulBufferLength);
00753 
00754                 //Calculate the checksum
00755                 lpHead->usChecksum=CalculatePseudoChecksum(pNewBuffer,
00756                                                            ulTotalLength,
00757                                                            aDestinationAddress,
00758                                                            ulTotalLength);
00759 
00760                 //Last change to the header
00761                 FinalTCPHeader(lpHead);
00762 
00763                 //Copy the header
00764                 memcpy(pNewBuffer,
00765                        lpHead,
00766                        iHeaderLength);
00767 
00768                 //Send the data
00769                 iResult=CSpoofSocket::Send(aDestinationAddress,
00770                                            pNewBuffer,
00771                                            ulTotalLength,
00772                                            usDestinationPort);
00773             }
00774 
00775             //Set the last error
00776             SetLastError("Connect");
00777 
00778             //Exit
00779             return iResult;
00780         }
00781         else
00782         {
00783             //Report it
00784             ReportError("SendRaw","Packet not in raw mode!");
00785 
00786             //Exit
00787             return GetErrorCode();
00788         }
00789     }
00790     ERROR_HANDLER_RETURN("SendRaw",GetErrorCode())
00791 }

int CSpoofSocket::SendRawBuffer ( IP  aDestinationAddress,
const char *  pBuffer,
unsigned long  ulBufferLength,
unsigned short  usDestinationPort 
) [virtual, inherited]

Definition at line 563 of file SpoofSocket.cpp.

00567 {
00568     try
00569     {
00570         //Quit if not ok
00571         //Make things the fastest
00572         if (m_aSpoofSocket==INVALID_SOCKET ||
00573             !m_bRaw)
00574             return FALSE;
00575 
00576         //Define the target address
00577         sockaddr_in m_TargetAddress;
00578 
00579         m_TargetAddress.sin_family=AF_INET;
00580         m_TargetAddress.sin_addr.s_addr=aDestinationAddress;
00581         m_TargetAddress.sin_port=htons(usDestinationPort);
00582         memset(&m_TargetAddress.sin_zero,0,sizeof(m_TargetAddress.sin_zero));
00583 
00584         //And send the data
00585         //Send the data
00586         int iResult;
00587         iResult=sendto(GetHandle(),
00588                        pBuffer,
00589                        ulBufferLength,
00590                        0,
00591                        (sockaddr*)&m_TargetAddress,
00592                        sizeof(m_TargetAddress));
00593 
00594         if (iResult==GetErrorCode())
00595             //Set the error
00596             SetLastError("SendRawBuffer");
00597 
00598         //Done
00599         return iResult;
00600     }
00601     ERROR_HANDLER_RETURN("SendRawBuffer",GetErrorCode())
00602 }

BOOL CSpoofSocket::SetBroadcast ( BOOL  bBroadcast  )  [inherited]

Definition at line 1522 of file SpoofSocket.cpp.

01523 {
01524     try
01525     {
01526         //Quit if not ok
01527         if (!CheckSocketValid())
01528             return FALSE;
01529 
01530         //Set broadcast option
01531         if(setsockopt(GetHandle(),
01532                       SOL_SOCKET,
01533                       SO_BROADCAST,
01534                       (char*)&bBroadcast,
01535                       sizeof(bBroadcast))==GetErrorCode())
01536         {
01537             //Check for options error
01538             SetLastError("SetBroadcast");
01539 
01540             //Exit
01541             return FALSE;
01542         }   
01543 
01544         return TRUE;
01545     }
01546     ERROR_HANDLER_RETURN("SetBroadcast",FALSE)
01547 }

void CSpoofSocket::SetConnectedTo ( const sockaddr_in &  rAddress  )  [protected, inherited]

Definition at line 1606 of file SpoofSocket.cpp.

01607 {
01608     m_aConnectedTo=rAddress;
01609 }

void CTCPSocket::SetConnectionStatus ( BOOL  bConnected  )  [protected]

Definition at line 793 of file TCPSocket.cpp.

00794 {
00795     m_bConnected=bConnected;
00796 }

void CSpoofSocket::SetIPHeaderAddress ( LPIpHeader  lpHead,
IP  aSourceAddress,
IP  aDestinationAddress 
) const [protected, virtual, inherited]

Definition at line 791 of file SpoofSocket.cpp.

00794 {
00795     try
00796     {
00797         //We need to place the header
00798         //If source is NULL then we need to use default source
00799         if (!aSourceAddress || !aDestinationAddress)
00800         {
00801             //Report it
00802             ReportError("SetIPHeaderAddress","Recieved empty source or destination address!");
00803 
00804             //Exit
00805             return;
00806         }
00807 
00808         //Place source address
00809         lpHead->ulSourceAddress=aSourceAddress;
00810 
00811         //Place destination address
00812         lpHead->ulDestinationAddress=aDestinationAddress;
00813 
00814         //Done
00815     }
00816     ERROR_HANDLER("SetIPHeaderAddress")
00817 }

void CSpoofBase::SetLastError ( const std::string &  rMethod,
int  iErrorCode 
) const [protected, inherited]

Definition at line 122 of file SpoofBase.cpp.

00124 {
00125     try
00126     {
00127         //First set the error
00128         m_iLastError=iErrorCode;
00129 
00130         //Check if there is an error
00131         if (m_iLastError)
00132             ReportError(rMethod,
00133                         m_iLastError);
00134     }
00135     ERROR_HANDLER("SetLastError")
00136 }

void CSpoofBase::SetLastError ( const std::string &  rMethod  )  const [protected, inherited]

Definition at line 103 of file SpoofBase.cpp.

00104 {
00105     try
00106     {
00107 #ifdef WIN32
00108         //First set the error
00109         m_iLastError=WSAGetLastError();
00110 #else
00111         m_iLastError=errno();
00112 #endif
00113 
00114         //Check if there is an error
00115         if (m_iLastError)
00116             ReportError(rMethod,
00117                         m_iLastError);
00118     }
00119     ERROR_HANDLER("SetLastError")
00120 }

void CErrorHandler::SetLocalLog ( CErrorLog pLog  )  [inherited]

Definition at line 441 of file ErrorHandler.cpp.

00442 {
00443     m_pLocalLog=pLog;
00444 }

void CErrorHandler::SetLog ( CErrorLog pLog  )  [static, inherited]

Definition at line 305 of file ErrorHandler.cpp.

00306 {
00307     //Save the new log
00308     m_pLog=pLog;
00309 }

BOOL CTCPSocket::SetNagle ( BOOL  bNagle  ) 

Definition at line 808 of file TCPSocket.cpp.

00809 {
00810     try
00811     {
00812         //Quit if not ok
00813         if (!CheckSocketValid())
00814             return FALSE;
00815 
00816         //Invert the flag (convert to true bool)
00817         if (bNagle)
00818             bNagle=FALSE;
00819         else
00820             bNagle=TRUE;
00821 
00822         //Try to set the option
00823         if (setsockopt(GetHandle(),
00824                        IPPROTO_TCP,
00825                        TCP_NODELAY,
00826                        (const char*)&bNagle,
00827                        sizeof(bNagle))==GetErrorCode())
00828         {
00829             //Report it
00830             ReportError("SetNagle","Failed to set nagle");
00831 
00832             //Set it
00833             SetLastError("SetNagle");
00834         
00835             //Exit
00836             return FALSE;
00837         }
00838 
00839         //Done
00840         return TRUE;
00841     }
00842     ERROR_HANDLER_RETURN("SetNagle",FALSE)
00843 }

void CErrorHandler::SetName ( const std::string &  rName  )  const [protected, inherited]

Definition at line 116 of file ErrorHandler.cpp.

00117 {
00118     //Save the class name
00119     m_sClassName=rName;
00120 }

void CSpoofSocket::SetOptions ( BOOL  bOptions  )  [inherited]

Definition at line 1068 of file SpoofSocket.cpp.

01069 {
01070     try
01071     {
01072         //Do we want options, normaly not
01073         m_bOptions=bOptions;
01074 
01075         //Do we have older options?
01076         if (m_pIPOptions)
01077         {
01078             delete m_pIPOptions;
01079             m_pIPOptions=NULL;
01080         }
01081 
01082         //Do we need to reallocate the options
01083         if (bOptions)
01084             m_pIPOptions=new CIPOptions;
01085     }
01086     ERROR_HANDLER("SetOptions")
01087 }

void CSpoofSocket::SetProtocol ( unsigned char  iProtocol  )  [protected, inherited]

Definition at line 974 of file SpoofSocket.cpp.

00975 {
00976     m_ucProtocol=ucProtocol;
00977 }

BOOL CSpoofSocket::SetReceiveTimeout ( unsigned long  ulMS  )  [inherited]

Definition at line 1569 of file SpoofSocket.cpp.

01570 {
01571     try
01572     {
01573         //Quit if not ok
01574         if (!CheckSocketValid())
01575             return FALSE;
01576 
01577         //Set it
01578         if(setsockopt(GetHandle(),
01579                       SOL_SOCKET,
01580                       SO_RCVTIMEO,
01581                       (char*)&ulMS,
01582                       sizeof(ulMS))==GetErrorCode())
01583         {
01584             //Check for options error
01585             SetLastError("SetReceiveTimeout");
01586 
01587             //Exit
01588             return FALSE;
01589         }
01590         else
01591             return TRUE;
01592     }
01593     ERROR_HANDLER_RETURN("SetReceiveTimeout",FALSE)
01594 }

void CSpoofSocket::SetSourceAddress ( const std::string &  rSourceAddress  )  [virtual, inherited]

Definition at line 984 of file SpoofSocket.cpp.

00985 {
00986     try
00987     {
00988         //Set the source address, in case we want to spoof it
00989         if (rSourceAddress.empty())
00990             m_ulSourceAddress=0;
00991         else
00992             m_ulSourceAddress=inet_addr(rSourceAddress.c_str());
00993     }
00994     ERROR_HANDLER("SetSourceAddress")
00995 }

void CSpoofSocket::SetSourceAddress ( IP  aSourceAddress  )  [virtual, inherited]

Definition at line 979 of file SpoofSocket.cpp.

00980 {
00981     m_ulSourceAddress=aSourceAddress;
00982 }

void CTCPSocket::SetTCPOptions ( BOOL  bOptions  ) 

Definition at line 405 of file TCPSocket.cpp.

00406 {
00407     try
00408     {
00409         //Do we want options, normaly not
00410         m_bOptions=bOptions;
00411 
00412         //Do we need to delete old options
00413         if (m_pTCPOptions)
00414         {
00415             delete m_pTCPOptions;
00416             m_pTCPOptions=NULL;
00417         }
00418 
00419         if (bOptions)
00420             m_pTCPOptions=new CTCPOptions;
00421     }
00422     ERROR_HANDLER("SetTCPOptions")
00423 }

void CSpoofSocket::SetTTL ( unsigned char  ucTTL  )  [inherited]

Definition at line 1047 of file SpoofSocket.cpp.

01048 {
01049     try
01050     {
01051         //Quit if not ok
01052         if (!CheckSocketValid())
01053             return;
01054 
01055         if (m_bRaw)
01056             //Set the ttl
01057             m_ucTTL=ucTTL;
01058         else if(setsockopt(GetHandle(),
01059                            IPPROTO_IP,
01060                            IP_TTL,
01061                            (const char*)&ucTTL,
01062                            sizeof(ucTTL)))
01063             SetLastError("SetTTL");
01064     }
01065     ERROR_HANDLER("SetTTL")
01066 }

BOOL CSpoofSocket::Shutdown ( SocketShutdown  eHow  )  [inherited]

Definition at line 1355 of file SpoofSocket.cpp.

01356 {
01357     if (!CheckSocketValid())
01358         return FALSE;
01359 
01360     try
01361     {
01362         int iHow;
01363 
01364         //Convert the how to a real flag
01365         if (eHow==ssReceive)
01366             iHow=SD_RECEIVE;
01367         else if (eHow==ssSend)
01368             iHow=SD_SEND;
01369         else
01370             iHow=SD_BOTH;
01371 
01372         //Do it
01373         if (shutdown(GetHandle(),iHow))
01374         {
01375             //Report it
01376             SetLastError("Shutdown");
01377 
01378             //Exit
01379             return FALSE;
01380         }
01381 
01382         //Done
01383         return TRUE;
01384     }
01385     ERROR_HANDLER_RETURN("Shutdown",FALSE)
01386 }

BOOL CSpoofBase::ShutdownSockets (  )  [static, inherited]

Definition at line 363 of file SpoofBase.cpp.

00364 {
00365     //Only if initialized
00366     if (!m_bInitialized)
00367         return TRUE;
00368 
00369     try
00370     {
00371         //Do we have a thread?
00372         if (m_pThread)
00373         {
00374             //Delete it
00375             delete m_pThread;
00376             m_pThread=NULL;
00377         }
00378 
00379         //Delete the CS
00380         delete m_pCSection;
00381         m_pCSection=NULL;
00382 
00383         //Notify shutdown class
00384         if (m_pShutdownClass)
00385         {
00386             m_pShutdownClass->NotifyShutdown();
00387             delete m_pShutdownClass;
00388         }
00389 
00390         if (WSACleanup()==GetErrorCode())
00391             return FALSE;
00392 
00393         //Not initialized anymore
00394         m_bInitialized=FALSE;
00395 
00396         //Done
00397         return TRUE;
00398     }
00399     ERROR_HANDLER_STATIC_RETURN(CSpoofBase_Class,"ShutdownSockets",FALSE)
00400 }

BOOL CSpoofSocket::Sniff ( BOOL  bSniff  )  [virtual, inherited]

Reimplemented in CSniffSocket.

Definition at line 1318 of file SpoofSocket.cpp.

01319 {
01320     //Start sniffing
01321     if (!ValidSocket())
01322         return FALSE;
01323 
01324     try
01325     {
01326 #ifdef WIN32
01327         unsigned long ulBytes;
01328         if (WSAIoctl(GetHandle(),SIO_RCVALL,&bSniff,sizeof(bSniff),NULL,0,&ulBytes,NULL,NULL))
01329         {
01330             //Error
01331             SetLastError("Sniff");
01332 
01333             //Exit
01334             return FALSE;
01335         }
01336 
01337         //Set sniffer status
01338         m_bSniffing=bSniff;
01339 
01340         //Done
01341         return TRUE;
01342 #else
01343         return FALSE;
01344 #endif
01345     }
01346     ERROR_HANDLER_RETURN("Sniff",FALSE)
01347 }

unsigned long CSpoofBase::StringToLong ( const std::string &  rAddress  )  [static, inherited]

Definition at line 473 of file SpoofBase.cpp.

00474 {
00475     return inet_addr(rAddress.c_str());
00476 }

BOOL CSpoofSocket::ValidAddress ( const std::string &  rAddress  )  [static, inherited]

Definition at line 1267 of file SpoofSocket.cpp.

01268 {
01269     try
01270     {
01271         return inet_addr(rAddress.c_str())!=INADDR_NONE;
01272     }
01273     ERROR_HANDLER_STATIC_RETURN(CSpoofSocket_LOGNAME,"ValidAddress",FALSE)
01274 }

BOOL CSpoofSocket::ValidSocket (  )  const [protected, inherited]

Definition at line 819 of file SpoofSocket.cpp.

00820 {
00821     return m_aSpoofSocket!=INVALID_SOCKET;
00822 }

void CErrorHandler::WriteMessage ( const std::string &  rMethod,
const std::string &  rMessage,
DWORD  dwAdditionalData,
LogPriority  aPriority = lpMessage 
) [protected, inherited]

Definition at line 355 of file ErrorHandler.cpp.

00359 {
00360     if (!GetLog())
00361         return;
00362 
00363     try
00364     {
00365         //Convert the number
00366         char aTmp[11];
00367         ltoa(dwAdditionalData,aTmp,10);
00368 
00369         //Create the new message
00370         std::string sNewMessage(rMessage);
00371         sNewMessage+="Additional data: ";
00372         sNewMessage+=aTmp;
00373 
00374         //Delegate the call
00375         GetLog()->WriteMessage(m_sClassName,
00376                                rMethod,
00377                                sNewMessage,
00378                                aPriority);
00379     }
00380     ERROR_UNKNOWN("WriteMessage")
00381 }

void CErrorHandler::WriteMessage ( const std::string &  rMethod,
const std::string &  rMessage,
LogPriority  aPriority = lpMessage 
) [protected, inherited]

Definition at line 337 of file ErrorHandler.cpp.

00340 {
00341     if (!GetLog())
00342         return;
00343 
00344     try
00345     {
00346         //Delegate the call
00347         GetLog()->WriteMessage(m_sClassName,
00348                                rMethod,
00349                                rMessage,
00350                                aPriority);
00351     }
00352     ERROR_UNKNOWN("WriteMessage")
00353 }

void CErrorHandler::WriteStaticMessage ( const std::string &  rClass,
const std::string &  rMethod,
const std::string &  rMessage,
DWORD  dwAdditionalData,
LogPriority  aPriority = lpMessage 
) [static, protected, inherited]

Definition at line 403 of file ErrorHandler.cpp.

00408 {
00409     if (!m_pLog)
00410         return;
00411 
00412     try
00413     {
00414         //Convert the number
00415         char aTmp[11];
00416         ltoa(dwAdditionalData,aTmp,10);
00417 
00418         //Create the new message
00419         std::string sNewMessage(rMessage);
00420         sNewMessage+="Additional data: ";
00421         sNewMessage+=aTmp;
00422 
00423         //Delegate the call
00424         m_pLog->WriteMessage(rClass,
00425                              rMethod,
00426                              sNewMessage,
00427                              aPriority);
00428     }
00429     ERROR_UNKNOWN("WriteStaticMessage")
00430 }

void CErrorHandler::WriteStaticMessage ( const std::string &  rClass,
const std::string &  rMethod,
const std::string &  rMessage,
LogPriority  aPriority = lpMessage 
) [static, protected, inherited]

Definition at line 383 of file ErrorHandler.cpp.

00388 {
00389     if (!m_pLog)
00390         return;
00391 
00392     try
00393     {
00394         //Delegate the call
00395         m_pLog->WriteMessage(rClass,
00396                              rMethod,
00397                              rMessage,
00398                              aPriority);
00399     }
00400     ERROR_UNKNOWN("WriteStaticMessage")
00401 }


Friends And Related Function Documentation

friend class CIPCrafter [friend, inherited]

Definition at line 452 of file SpoofSocket.h.


Member Data Documentation

CGenericCriticalSection * CSpoofBase::m_pCSection = NULL [static, protected, inherited]

Definition at line 124 of file SpoofBase.h.


The documentation for this class was generated from the following files: