Portscanner,Thread->CAsyncSocket::Create()



  • Hallo
    ich schreibe grad einen kleinen Portscanner.

    Aufgebaut habe ich das Teil so:
    Ich habe ein Dialog in dem sich 3 CIPAddressCtrls befinden,
    das erste für die StartIP, das zweite für die letzte IP die gescannt werden soll und das dritte zeigt immer an welche Ip gerade gescannt wird.

    Jetzt habe ich einen Thread (CWinThread) namens "MyPortScanThread" in mein Projekt aufgenommen.

    In diesem Thread werden in InitInstance meine ganzen IPs die er scannen soll in mehreren Schleifen durchgegangen und in dem Feld dass jeweils die aktuell zu scannende anzeigen soll, angezeigt.

    So nun sollen meine ganzen IPs ja auch gescannt werden, also hab ich in mein Projekt die Klasse CScanSocket vom Typ CAsyncSocket aufgenommen.
    damit ich ein Socket habe mit dem ich überhaupt versuchen kann eine Verbindung mit dem jeweiligen Port und der IP herzustellen.

    So nun bin ich hergegangen und habe in meinen Thread eine Funktion geschrieben:

    ScanPort(BYTE BLOCK1,BYTE BLOCK2,BYTE BLOCK3,BYTE BLOCK4,int Port)
    

    diese Funktion muss ich nun immer aufrufen wenn ich eine IP scannen will.
    Damit diese Funktion aber überhaupt auf mein Socket zugreifen kann, bin ich in die Header Datei meines threads gegangen und habe die Variable m_sScanSocket deklariert("ScanSocket.h" ist natürlich vorher includiert worden):

    CScanSocket *m_sScanSocket;
    

    nun kann ich meine Scan funktion komplett schreiben: sie sieht am Ende so aus:

    void MyPortScanThread::ScanPort(BYTE BLOCK1,BYTE BLOCK2,BYTE BLOCK3,BYTE BLOCK4,int Port)
    {
    	 m_sScanSocket = new CScanSocket;
    	 CString strIP; 
         strIP.Format("%d.%d.%d.%d",BLOCK1,BLOCK2,BLOCK3,BLOCK4); 
    	 m_sScanSocket->Create();
         m_sScanSocket->Connect(strIP,Port);
    	 m_sScanSocket->Close();
    	 delete m_sScanSocket;
    }
    

    Bisher alles Korrekt?
    Ne Leider Nicht weil sobald ich in meiner Funktion ScanPort

    m_sScanSocket->Create();
    

    aufrufe stürzt meine Anwendung ab.

    Und sagt mir:

    Unhandled exception at 0x00549cec in Portscanner.exe: 0xC0000005: Access violation reading location 0x00000004.

    ein Teil des Codes wo er stehen bleibt wenn ich bei der Fehlermeldung auf Breake drücke:

    void* CMapPtrToPtr::GetValueAt(void* key) const
    // find value (or return NULL -- NULL values not different as a result)
    {
    	if (m_pHashTable == NULL) //Hier drauf steht der gelbe Pfeil 		return NULL;
    
    	UINT nHash = HashKey(key) % m_nHashTableSize;
    
    	// see if it exists
    	CAssoc* pAssoc;
    

    Was ist Falsch? kann mir jemand helfen?

    hier mal meine Cpp vom Socket noch

    // ScanSocket.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "Portscanner.h"
    #include "ScanSocket.h"
    
    // CScanSocket
    
    CScanSocket::CScanSocket()
    {
    	//Create();
    	//AfxMessageBox("test");
    }
    
    CScanSocket::~CScanSocket()
    {
    	//Close();
    }
    
    void CScanSocket::OnConnect(int nErrorCode)
    {
    
    	CString IP;
    	UINT Port;
    	GetPeerName(IP,Port);
    	AfxMessageBox(IP+"\n Positive resonanz!");
    
       CAsyncSocket::OnConnect(nErrorCode);
    }
    

    Bitte helft mir, ich weis nimmer was los ist 😞



  • Hat glaub ich was mit den Threads zu tun.
    Machs doch einfach so:

    void MyPortScanThread::ScanPort(BYTE BLOCK1,BYTE BLOCK2,BYTE BLOCK3,BYTE BLOCK4,int Port) 
    { 
         CScanSocket sScanSocket;
         CString strIP;  
         strIP.Format("%d.%d.%d.%d",BLOCK1,BLOCK2,BLOCK3,BLOCK4);  
         sScanSocket.Create(); 
         sScanSocket.Connect(strIP,Port); 
         sScanSocket.Close(); 
    }
    


  • Jo hat was mit den Threads zu tun, geht bzw ging aus den threads raus nicht, auf KEINE WEISE.

    Mein Kumpel hat sowas schon gemacht und hat mir mal seine Lösung gegeben, selbst damit gings nicht.

    Erst Als ich die Klasse CAsyncSoocket in eine Klasse von codeproject CAsyncSocketEx geändert habe hats funktioniert.


Anmelden zum Antworten