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


CRealIPResolver Class Reference

#include <RealIPResolver.h>

Inheritance diagram for CRealIPResolver:
Collaboration diagram for CRealIPResolver:

List of all members.


Public Member Functions

IP Resolve (IP aInternetIP=83974850, const std::string &rTestURL="www.google.com", unsigned short usPort=80)
BOOL IsNATAddress (IP aIP) const
 CRealIPResolver ()
virtual ~CRealIPResolver ()
void SetLocalLog (CErrorLog *pLog)
void WriteError (const std::string &rClass, const std::string &rMethod, const std::string &rError) const
void WriteMessage (const std::string &rClass, const std::string &rMethod, const std::string &rMessage) const

Static Public Member Functions

static std::string GetCurrentDateTime ()
static std::string ErrorCodeToString (DWORD dwErrorCode)
static void RegisterError (DWORD dwErrorCode, const std::string &rDescription)
static void SetLog (CErrorLog *pLog)
static void WriteStaticError (const std::string &rClass, const std::string &rMethod, const std::string &rError)
static std::string FormatData (const std::string &rClass, const std::string &rMethod, const std::string &rMsgOrError, bool bError=true)

Protected Member Functions

const std::string & GetClassName () const
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, const std::string &rMessage, const std::string &rAdditionalData) 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 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 void ReportStaticErrorOS (const std::string &rClass, const std::string &rMethod, const std::string &rMessage)

Detailed Description

Definition at line 52 of file RealIPResolver.h.


Constructor & Destructor Documentation

CRealIPResolver::CRealIPResolver (  ) 

Definition at line 56 of file RealIPResolver.cpp.

00056                                  : CErrorHandler()
00057 {
00058     try
00059     {
00060         //Set our name
00061         SetName(CRealIPResolver_Class);
00062     }
00063     ERROR_HANDLER_RETHROW("CRealIPResolver")
00064 }

CRealIPResolver::~CRealIPResolver (  )  [virtual]

Definition at line 66 of file RealIPResolver.cpp.

00067 {
00068 }


Member Function Documentation

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

Definition at line 218 of file ErrorHandler.cpp.

00219 {
00220     try
00221     {
00222         //Try to look it in the errors
00223         if (!CErrorsRepository::GetInstance().GetErrorsMap().empty())
00224         {
00225             //Search
00226             CErrorsRepository::ErrorMap::const_iterator aIterator;
00227             aIterator=CErrorsRepository::GetInstance().GetErrorsMap().find(dwErrorCode);
00228 
00229             //Do we have it
00230             if (aIterator!=CErrorsRepository::GetInstance().GetErrorsMap().end())
00231                 return aIterator->second;
00232         }
00233 
00234         //Get the error string
00235         LPVOID lpMsgBuf;
00236         FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
00237                       FORMAT_MESSAGE_FROM_SYSTEM | 
00238                       FORMAT_MESSAGE_IGNORE_INSERTS,
00239                       NULL,
00240                       dwErrorCode,
00241                       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
00242                       (LPTSTR) &lpMsgBuf,
00243                       0,
00244                       NULL);
00245 
00246         //Save it
00247         std::string sMessage;
00248 
00249         //Do we have the message?
00250         if (lpMsgBuf)
00251         {
00252             //Save it
00253             sMessage=(char*)lpMsgBuf;
00254             
00255             //Release the buffer
00256             LocalFree(lpMsgBuf);
00257         }
00258         else
00259             //Failed to find
00260             sMessage="No error description found!";
00261 
00262         //Done
00263         return sMessage;
00264     }
00265     catch (...)
00266     {
00267         return "Unknown";
00268     }
00269 }

std::string CErrorHandler::FormatData ( const std::string &  rClass,
const std::string &  rMethod,
const std::string &  rMsgOrError,
bool  bError = true 
) [static, inherited]

Definition at line 140 of file ErrorHandler.cpp.

00144 {
00145     //Our message
00146     std::string sMsg;
00147 
00148     //Is it an error?
00149     if (bError)
00150         sMsg="*** Error *** ";
00151     else
00152         sMsg="###  Msg  ### ";
00153 
00154     //Add the data now
00155     sMsg+="in "+rClass;
00156     sMsg+=":"+rMethod;
00157     sMsg+=" - " + rMsgOrError;
00158 
00159     //Done
00160     return sMsg;
00161 }

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

Reimplemented in CSocketThreadManager.

Definition at line 567 of file ErrorHandler.cpp.

00568 {
00569     return m_sClassName;
00570 }

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

Definition at line 572 of file ErrorHandler.cpp.

00573 {
00574     try
00575     {
00576         //Our string
00577         std::string sDate;
00578 
00579         //Our tmp buf
00580         char cTmp[128];
00581 
00582         //Get date
00583         _strdate(cTmp);
00584         sDate=cTmp;
00585         sDate+=' ';
00586 
00587         //Get time
00588         _strtime(cTmp);
00589         sDate+=cTmp;
00590 
00591         //Done
00592         return sDate;
00593     }
00594     ERROR_HANDLER_STATIC_RETURN(CErrorHandler_Class,"GetCurrentDateTime","")
00595 }

BOOL CRealIPResolver::IsNATAddress ( IP  aIP  )  const

Definition at line 317 of file RealIPResolver.cpp.

00318 {
00319     try
00320     {
00321         //Our NAT addresses data
00322         static const iNatCount=4;
00323         static const std::string sNat[iNatCount*2]={"10.0.0.0","10.255.255.255",
00324                                                     "127.0.0.0","127.255.255.255",
00325                                                     "172.16.0.0","172.31.255.255",
00326                                                     "192.168.0.0","192.168.255.255"};
00327 
00328         //Our address
00329         IP aTestIP;
00330         aTestIP=htonl(aIP);
00331 
00332         //Run a test
00333         for (int iCount=0;
00334              iCount<iNatCount;
00335              ++iCount)
00336         {
00337             //Translate the addresses
00338             IP aFromIP;
00339             aFromIP=htonl(CSocketBase::StringToLong(sNat[iCount*2]));
00340 
00341             //To address
00342             IP aToIP;
00343             aToIP=htonl(CSocketBase::StringToLong(sNat[iCount*2+1]));
00344 
00345             //Is it NAT
00346             if (aFromIP<=aTestIP &&
00347                 aToIP>=aTestIP)
00348                 return TRUE;
00349         }
00350 
00351         //Not NAT
00352         return FALSE;
00353     }
00354     ERROR_HANDLER_RETURN("IsNATAddress",FALSE)
00355 }

void CErrorHandler::RegisterError ( DWORD  dwErrorCode,
const std::string &  rDescription 
) [static, inherited]

Definition at line 597 of file ErrorHandler.cpp.

00599 {
00600     try
00601     {
00602         //Add the error
00603         CErrorsRepository::GetInstance().GetErrorsMap().insert(CErrorsRepository::ErrorMap::value_type(dwErrorCode,rDescription));
00604     }
00605     ERROR_HANDLER_STATIC(CErrorHandler_Class,"RegisterError")
00606 }

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

Definition at line 271 of file ErrorHandler.cpp.

00274 {
00275     if (!GetLog())
00276         return;
00277 
00278     try
00279     {
00280         //Convert the error code
00281         char aTmp[11];
00282         sprintf(aTmp,"%d",iErrorCode);
00283 
00284         //Get the string for it
00285         std::string sError;
00286         sError=rMessage;
00287         sError+=", and Socket error: ";
00288         sError+=aTmp;
00289         sError+=", ";
00290         sError+=ErrorCodeToString(iErrorCode);
00291 
00292         //Report to the log
00293         WriteError(m_sClassName,
00294                    rMethod,
00295                    sError);
00296     }
00297     ERROR_UNKNOWN("ReportError")
00298 }

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

Definition at line 300 of file ErrorHandler.cpp.

00302 {
00303     if (!GetLog())
00304         return;
00305 
00306     try
00307     {
00308         //Convert the error code
00309         char aTmp[11];
00310         sprintf(aTmp,"%d",iErrorCode);
00311 
00312         //Get the string for it
00313         std::string sError;
00314         sError="Socket error: ";
00315         sError+=aTmp;
00316         sError+=", ";
00317         sError+=ErrorCodeToString(iErrorCode);
00318 
00319         //Report to the log
00320         WriteError(m_sClassName,
00321                    rMethod,
00322                    sError);
00323     }
00324     ERROR_UNKNOWN("ReportError")
00325 }

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

Definition at line 416 of file ErrorHandler.cpp.

00419 {
00420     if (!GetLog())
00421         return;
00422 
00423     try
00424     {
00425         //Create the new message
00426         std::string sNewMessage(rMessage);
00427         sNewMessage+=", Additional data: ";
00428         sNewMessage+=rAdditionalData;
00429 
00430         //Report to the log
00431         WriteError(m_sClassName,
00432                    rMethod,
00433                    sNewMessage);
00434     }
00435     ERROR_UNKNOWN("ReportError")
00436 }

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

Definition at line 438 of file ErrorHandler.cpp.

00441 {
00442     if (!GetLog())
00443         return;
00444 
00445     try
00446     {
00447         //Convert the number
00448         char aTmp[11];
00449         ltoa(dwAdditionalData,aTmp,10);
00450 
00451         //Create the new message
00452         std::string sNewMessage(rMessage);
00453         sNewMessage+=", Additional data: ";
00454         sNewMessage+=aTmp;
00455 
00456         //Report to the log
00457         WriteError(m_sClassName,
00458                    rMethod,
00459                    sNewMessage);
00460     }
00461     ERROR_UNKNOWN("ReportError")
00462 }

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

Definition at line 327 of file ErrorHandler.cpp.

00329 {
00330     if (!GetLog())
00331         return;
00332 
00333     try
00334     {
00335         //Report to the log
00336         WriteError(m_sClassName,
00337                    rMethod,
00338                    rMessage);
00339     }
00340     ERROR_UNKNOWN("ReportError")
00341 }

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

Definition at line 470 of file ErrorHandler.cpp.

00471 {
00472     if (!GetLog())
00473         return;
00474 
00475     try
00476     {
00477         //Get the last error
00478         DWORD dwLastError;
00479         dwLastError=GetLastError();
00480 
00481         //Report the error
00482         WriteError(m_sClassName,
00483                    rMethod,
00484                    ErrorCodeToString(dwLastError));
00485     }
00486     ERROR_UNKNOWN("ReportError")
00487 }

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

Definition at line 378 of file ErrorHandler.cpp.

00380 {
00381     if (!GetLog())
00382         return;
00383 
00384     try
00385     {
00386         //Get the last error
00387         DWORD dwLastError;
00388         dwLastError=GetLastError();
00389 
00390         //Format the message
00391         std::string sMessage;
00392         sMessage=rMessage;
00393         sMessage+=", with error code: ";
00394 
00395         //Convert the error code
00396         char aTmp[11];
00397         itoa(dwLastError,aTmp,10);
00398 
00399         //Add it again
00400         sMessage+=aTmp;
00401         sMessage+=" ";
00402         sMessage+=ErrorCodeToString(dwLastError);
00403         
00404         //Get the log
00405         CErrorLog* pLog;
00406         pLog=GetLog();
00407 
00408         //Report to the log
00409         WriteError(m_sClassName,
00410                    rMethod,
00411                    sMessage);
00412     }
00413     ERROR_UNKNOWN("ReportErrorOS")
00414 }

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

Definition at line 540 of file ErrorHandler.cpp.

00544 {
00545     if (!m_pLog)
00546         return;
00547 
00548     try
00549     {
00550         //Convert the number
00551         char aTmp[11];
00552         ltoa(dwAdditionalData,aTmp,10);
00553 
00554         //Create the new message
00555         std::string sNewMessage(rMessage);
00556         sNewMessage+=", Additional data: ";
00557         sNewMessage+=aTmp;
00558 
00559         //Report to the log
00560         WriteStaticError(rClass,
00561                          rMethod,
00562                          sNewMessage);
00563     }
00564     ERROR_UNKNOWN("ReportStaticError")
00565 }

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

Definition at line 523 of file ErrorHandler.cpp.

00526 {
00527     if (!m_pLog)
00528         return;
00529 
00530     try
00531     {
00532         //Report to the log
00533         WriteStaticError(rClass,
00534                          rMethod,
00535                          rMessage);
00536     }
00537     ERROR_UNKNOWN("ReportStaticError")
00538 }

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

Definition at line 503 of file ErrorHandler.cpp.

00505 {
00506     if (!m_pLog)
00507         return;
00508 
00509     try
00510     {
00511         //Get the last error
00512         DWORD dwLastError;
00513         dwLastError=GetLastError();
00514 
00515         //Report the error
00516         WriteStaticError(rClass,
00517                           rMethod,
00518                           ErrorCodeToString(dwLastError));
00519     }
00520     ERROR_UNKNOWN("ReportStaticError")
00521 }

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

Definition at line 343 of file ErrorHandler.cpp.

00346 {
00347     if (!m_pLog)
00348         return;
00349 
00350     try
00351     {
00352         //Get the last error
00353         DWORD dwLastError;
00354         dwLastError=GetLastError();
00355 
00356         //Format the message
00357         std::string sMessage;
00358         sMessage=rMessage;
00359         sMessage+=", with error code: ";
00360 
00361         //Convert the error code
00362         char aTmp[11];
00363         itoa(dwLastError,aTmp,10);
00364 
00365         //Add it again
00366         sMessage+=aTmp;
00367         sMessage+=" ";
00368         sMessage+=ErrorCodeToString(dwLastError);
00369         
00370         //Report to the log
00371         WriteStaticError(rClass,
00372                          rMethod,
00373                          sMessage);
00374     }
00375     ERROR_UNKNOWN("ReportStaticError")
00376 }

IP CRealIPResolver::Resolve ( IP  aInternetIP = 83974850,
const std::string &  rTestURL = "www.google.com",
unsigned short  usPort = 80 
)

Definition at line 70 of file RealIPResolver.cpp.

00073 {
00074     try
00075     {
00076         //Get it
00077         DWORD dwResult;
00078         DWORD dwIndex;
00079         dwResult=GetBestInterface(aInternetIP,
00080                                   &dwIndex);
00081 
00082         //Did we manage?
00083         if (dwResult!=NO_ERROR)
00084         {
00085             //Report it
00086             ReportErrorOS("Resolve","Failed to call routing command! (GetBestInterface)");
00087 
00088             //Exit
00089             return 0;
00090         }
00091 
00092         //Get the length of data
00093         DWORD dwLength;
00094         dwLength=0;
00095         dwResult=GetInterfaceInfo(NULL,
00096                                   &dwLength);
00097         
00098         if (dwResult!=NO_ERROR &&
00099             dwResult!=ERROR_INSUFFICIENT_BUFFER)
00100         {
00101             //Report it
00102             ReportErrorOS("Resolve","Failed to call routing command! (GetInterfaceInfo, NULL)");
00103 
00104             //Exit
00105             return 0;
00106         }
00107 
00108         //Allocate the data
00109         char* pData;
00110         pData=new char[dwLength];
00111 
00112         //Protect it
00113         CArray_ptr<char> pProtection(pData);
00114 
00115         //Recall
00116         if (GetInterfaceInfo((PIP_INTERFACE_INFO)pData,
00117                              &dwLength)!=NO_ERROR)
00118         {
00119             //Report it
00120             ReportErrorOS("Resolve","Failed to call routing command! (GetInterfaceInfo)");
00121 
00122             //Exit
00123             return 0;
00124         }
00125 
00126         //The Interface name
00127         WCHAR pName[MAX_ADAPTER_NAME];
00128         pName[0]=0;
00129         pName[1]=0;
00130 
00131         //Get the data
00132         PIP_INTERFACE_INFO pInfo;
00133         pInfo=(PIP_INTERFACE_INFO)pData;
00134 
00135         //Start to iterate the interfaces
00136         for (int iCount=0;
00137              iCount<pInfo->NumAdapters;
00138              ++iCount)
00139             if (pInfo->Adapter[iCount].Index==dwIndex)
00140             {
00141                 //Copy the data
00142                 wcscpy(pName,
00143                        pInfo->Adapter[iCount].Name);
00144 
00145                 //Exit
00146                 break;
00147             }
00148 
00149         //Do we have it?
00150         if (!pName[0])
00151             //Nop
00152             return 0;
00153 
00154         //Further iterations
00155         //Now get adapters information
00156         dwLength=0;
00157         dwResult=GetAdaptersInfo(NULL,
00158                                  &dwLength);
00159 
00160         if (dwResult!=NO_ERROR &&
00161             dwResult!=ERROR_BUFFER_OVERFLOW)
00162         {
00163             //Report it
00164             ReportErrorOS("Resolve","Failed to call routing command! (GetAdaptersInfo, NULL)");
00165 
00166             //Exit
00167             return 0;
00168         }
00169 
00170         //Reallocate the data
00171         char* pAdapterRawInfo;
00172         pAdapterRawInfo=new char[dwLength];
00173 
00174         //Protect it
00175         CArray_ptr<char> pProtection2(pAdapterRawInfo);
00176 
00177         //And get it
00178         if (GetAdaptersInfo((PIP_ADAPTER_INFO)pAdapterRawInfo,
00179                             &dwLength)!=NO_ERROR)
00180         {
00181             //Report it
00182             ReportErrorOS("Resolve","Failed to call routing command! (GetAdaptersInfo)");
00183 
00184             //Exit
00185             return 0;
00186         }
00187 
00188         //Get the name we want
00189         std::string sSymbolicToFind;
00190         sSymbolicToFind=ConvertSymbolic((const char*)pName);
00191 
00192         //Our info
00193         PIP_ADAPTER_INFO pAdapterInfo;
00194         pAdapterInfo=(PIP_ADAPTER_INFO)pAdapterRawInfo;
00195 
00196         //The IP we want
00197         IPVector aVector;
00198 
00199         do
00200         {
00201             //Get the symbolic
00202             std::string sSymbolic;
00203             sSymbolic=pAdapterInfo->AdapterName;
00204 
00205             //Is it?
00206             if (sSymbolic==sSymbolicToFind)
00207             {
00208                 //Get the IPs
00209                 aVector=ExtractIP((const void*)pAdapterInfo);
00210 
00211                 //Exit the loop
00212                 break;
00213             }
00214 
00215             //Next
00216             pAdapterInfo=pAdapterInfo->Next;
00217         } while (pInfo);
00218 
00219         //Do we have addresses?
00220         if (aVector.empty())
00221             return 0;
00222 
00223         //Do we have only one address?
00224         if (aVector.size()==1)
00225             //Do we need to test it?
00226             if (!rTestURL.empty())
00227                 if (TestAddress(aVector[0],
00228                                 CSocketBase::StringToLong(rTestURL),
00229                                 usPort))
00230                     return aVector[0];
00231                 else
00232                     return 0;
00233             else
00234                 return aVector[0];
00235 
00236         //We need to traverse the vetor
00237         return 0;
00238 
00239     }
00240     ERROR_HANDLER_RETURN("Resolve",0)
00241 }

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

Definition at line 498 of file ErrorHandler.cpp.

00499 {
00500     m_pLocalLog=pLog;
00501 }

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

Definition at line 464 of file ErrorHandler.cpp.

00465 {
00466     //Save the new log
00467     m_pLog=pLog;
00468 }

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

Definition at line 134 of file ErrorHandler.cpp.

00135 {
00136     //Save the class name
00137     m_sClassName=rName;
00138 }

void CErrorHandler::WriteError ( const std::string &  rClass,
const std::string &  rMethod,
const std::string &  rError 
) const [inherited]

Definition at line 163 of file ErrorHandler.cpp.

00166 {
00167     //Do we have a log?
00168     if (!GetLog())
00169         return;
00170 
00171     //Format the msg
00172     std::string sError;
00173     sError=FormatData(rClass,
00174                       rMethod,
00175                       rError);
00176 
00177     //Write it
00178     GetLog()->WriteError(sError);
00179 }

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

Definition at line 199 of file ErrorHandler.cpp.

00202 {
00203     //Do we have a log?
00204     if (!GetLog())
00205         return;
00206 
00207     //Format the msg
00208     std::string sMsg;
00209     sMsg=FormatData(rClass,
00210                     rMethod,
00211                     rMessage,
00212                     true);
00213 
00214     //Write it
00215     GetLog()->WriteMessage(sMsg);
00216 }

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

Definition at line 181 of file ErrorHandler.cpp.

00184 {
00185     //Do we have a log?
00186     if (!m_pLog)
00187         return;
00188 
00189     //Format the msg
00190     std::string sError;
00191     sError=FormatData(rClass,
00192                       rMethod,
00193                       rError);
00194 
00195     //Write it
00196     m_pLog->WriteError(sError);
00197 }


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