UDPScanner.hGo to the documentation of this file.00001 /* 00002 * Copyright (c) 2000-2003 Barak Weichselbaum <barak@komodia.com> 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 00014 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 00015 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00016 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00017 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 00018 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00019 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00020 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00021 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00022 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00023 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00024 * SUCH DAMAGE. 00025 * 00026 * Contact info: 00027 * ------------- 00028 * 00029 * Site: http://www.komodia.com 00030 * Main contact: barak@komodia.com 00031 * For custom projects, 00032 * consulting, or other 00033 * paid services: sales@komodia.com 00034 */ 00035 00036 #if !defined(AFX_UDPSCANNER_H__68F910AA_B996_41E7_8565_1923981A9B54__INCLUDED_) 00037 #define AFX_UDPSCANNER_H__68F910AA_B996_41E7_8565_1923981A9B54__INCLUDED_ 00038 00039 #if _MSC_VER > 1000 00040 #pragma once 00041 #endif // _MSC_VER > 1000 00042 00043 #include "ICMPSocketAsync.h" 00044 00045 #include "TCPPortScannerStealth.h" 00046 00047 KOMODIA_NAMESPACE_START 00048 00049 class CUDPSocket; 00050 00051 class CUDPScanner : public CTCPPortScannerStealth 00052 { 00053 public: 00054 //Do the scan 00055 virtual BOOL Scan(const std::string& rDestinationAddress); 00056 virtual BOOL Scan(IP aTarget); 00057 00058 //Ctor and Dtor 00059 CUDPScanner(IP aBindInterface); 00060 CUDPScanner(const std::string& rBindInterface); 00061 virtual ~CUDPScanner(); 00062 protected: 00063 //Actual a new socket 00064 //Derived class should override this for their sockets 00065 virtual CTCPSocketAsync* AllocateSocket(unsigned short usPort)const; 00066 00067 //Unallocate the socket 00068 virtual void DestroySocket(CTCPSocketAsync* pSocket)const; 00069 00070 //Scan is done (for library) 00071 virtual void TCPScanDoneLib(BOOL bError); 00072 private: 00073 //Our TCP socket, that encapsulates the UDP socket 00074 class CTCPScanner : public CTCPSocketAsync 00075 { 00076 public: 00077 //Overide the connect 00078 virtual BOOL Connect(unsigned short usSourcePort, 00079 IP aDestinationAddress, 00080 unsigned short usDestinationPort, 00081 BOOL bDisableAsync=FALSE, 00082 BOOL bForceErrorEvent=FALSE); 00083 00084 //Create the socket 00085 virtual BOOL Create(); 00086 00087 //Ctor and Dtor 00088 CTCPScanner(); 00089 virtual ~CTCPScanner(); 00090 protected: 00091 //No events 00092 NO_OnSocketAccept 00093 NO_OnSocketOOB 00094 NO_OnSocketWrite 00095 NO_OnSocketTimeout 00096 NO_OnSocketConnect 00097 NO_OnSocketClose 00098 NO_OnSocketReceive 00099 private: 00100 //Our UDP socket 00101 CUDPSocket* m_pSocket; 00102 }; 00103 private: 00104 //Our sniffing socket 00105 class CSniffingSocket : public CICMPSocketAsync 00106 { 00107 public: 00108 //Ctor and Dtor 00109 CSniffingSocket(CUDPScanner* pScanner); 00110 virtual ~CSniffingSocket(); 00111 protected: 00112 //No events 00113 NO_OnSocketAccept 00114 NO_OnSocketOOB 00115 NO_OnSocketWrite 00116 NO_OnSocketTimeout 00117 NO_OnSocketConnect 00118 NO_OnSocketClose 00119 00120 //Our sniff handler 00121 virtual BOOL OnSocketReceive(int iErrorCode); 00122 private: 00123 //Our father 00124 CUDPScanner* m_pFather; 00125 }; 00126 00127 friend CSniffingSocket; 00128 private: 00129 //No copy Ctor 00130 CUDPScanner(const CUDPScanner& rScanner); 00131 00132 //No copy operator 00133 CUDPScanner& operator=(const CUDPScanner& rScanner); 00134 00135 //Create the sniffer socket 00136 BOOL CreateSniffer(); 00137 00138 //Our socket 00139 CTCPScanner* m_pScanner; 00140 00141 //Our sniffer socket 00142 CSniffingSocket* m_pSniffer; 00143 }; 00144 00145 KOMODIA_NAMESPACE_END 00146 00147 #endif // !defined(AFX_UDPSCANNER_H__68F910AA_B996_41E7_8565_1923981A9B54__INCLUDED_) |