keine Komplettlösung, aber ich bin schon ziemlich weit, finde ich.
Ich hab auf QWidget umgestellt, weil ich glaube, dass Qt Netzwerk erst geht, nachdem die Mainloop mit app.exec
gestartet wurde.
Code:
<b>main.cpp</b>
#include <qapplication.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
#include "scan.h"
int main( int argc, char* argv[] )
{
// Starte mal portscan <deineIP> 79 81
// und drück ein paar mal den Knopf, dann solle dein Webserver schon gefunden werden
if( argc!=4 ) { cout<<"Usage: "<<argv[0]<<" <host> <startport> <endport> "<<endl; exit(0); }
QApplication app( argc, argv );
Scan scano( argv[1],atoi(argv[2]),atoi(argv[3]) ); // <-- Das sollte kein Pointer sein, wer löscht den denn?
app.setMainWidget(&scano);
scano.resize(120,100);
scano.show();
return app.exec();
}
Code:
<b>scan.h</b>
#ifndef SCAN_H
#define SCAN_H
/// #include <qobject.h>
#include <qwidget.h>
class QSocket;
class Scan : public QWidget {
Q_OBJECT
public:
Scan(const char* hostname, int start, int end);
private:
QString _hostname;
int _start, _end;
QSocket *socket;
private slots:
void scanPorts();
void portOpen();
};
#endif
Code:
<b>scan.cpp</b>
#include <qsocket.h>
#include <qstring.h>
#include <iostream>
#include <cstdio>
#include <qpushbutton.h>
using namespace std;
#include "scan.h"
Scan::Scan( const char* hostname, int start, int end ) : QWidget(0,0), _hostname(hostname), _start(start), _end(end)
{
socket = new QSocket( this );
QString host( hostname );
cout<<"Starting Scan on "<<_hostname.latin1()<<" from "<<start<<" to "<<end<<endl;
connect( socket, SIGNAL( connected() ), this,SLOT( portOpen() ) );
//scanPorts( host, startport, endport );
QPushButton* btnScan = new QPushButton("Scan !", this);
connect( btnScan, SIGNAL( clicked() ), this,SLOT( scanPorts() ) );
}
void Scan::scanPorts( ) {
for( Q_UINT16 port=_start; port < _end; ++port ) {
socket->connectToHost( _hostname, port ); // <-- Ich nehme an, das du dir hier die Verbindung gleich wieder kaputt haust
cout<<"trying to connect to " <<_hostname.latin1()<<":"<<port<<endl;
}
}
void Scan::portOpen() {
//printf("%uh ist open\n", socket->port());
cout << (socket->port()) << " is open" <<endl; // <-- Hier kommen Fantasiezahlen raus
}
Lesezeichen