+134
-78
@@ -26,6 +26,38 @@ quint32 ipv4str_to_int(const QString& ipstr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trytryping::trytryping()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void trytryping::run()
|
||||||
|
{
|
||||||
|
emit try_one(1);
|
||||||
|
qint16 exitCode;
|
||||||
|
QString ip=this->ipstr;
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
QString strArg = "ping " + ip + " -n 1 -i 2";
|
||||||
|
exitCode = QProcess::execute(strArg);
|
||||||
|
#else
|
||||||
|
//其他平台(Linux或Mac)
|
||||||
|
exitCode = QProcess::execute("ping", QStringList() << "-c 1" << "-t 2" << ip));
|
||||||
|
#endif
|
||||||
|
if(0 == exitCode)
|
||||||
|
{
|
||||||
|
//it's alive
|
||||||
|
qDebug() << "shell ping " + ip + " sucessed!";
|
||||||
|
emit connect_ok(this->ipstr);
|
||||||
|
//发射该IP在线的信号
|
||||||
|
|
||||||
|
} else {
|
||||||
|
qDebug() << "shell ping " + ip + " failed!";
|
||||||
|
//发射IP离线的信号
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
emit try_one(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
trytry::trytry()
|
trytry::trytry()
|
||||||
@@ -156,90 +188,23 @@ void dispatch::run()
|
|||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QRegExp ex_port ("^(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
|
|
||||||
QRegExp ex_porttoport("^(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])-(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
|
|
||||||
//QRegExp ex_portmore ("^(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]);$");
|
|
||||||
for (int i = 0; i < str_port_list.size(); ++i)
|
|
||||||
{
|
|
||||||
str_ports_temp=str_port_list.at(i).split(";");
|
|
||||||
for (int ii = 0; ii < str_ports_temp.size(); ++ii)
|
|
||||||
{
|
|
||||||
if(ex_port.exactMatch(str_ports_temp.at(ii)))
|
|
||||||
{
|
|
||||||
qDebug()<<str_ports_temp.at(ii)<<" norlmore port";
|
|
||||||
ports_list.append(str_ports_temp.at(ii).toInt());
|
|
||||||
ports_num+=1;
|
|
||||||
|
|
||||||
}else if(ex_porttoport.exactMatch(str_ports_temp.at(ii)))
|
|
||||||
{
|
|
||||||
qDebug()<<str_ports_temp.at(ii)<<" port to port";
|
|
||||||
str_porttoport_temp=str_ports_temp.at(ii).split("-");
|
|
||||||
porta=str_porttoport_temp.at(0).toInt();
|
|
||||||
portb=str_porttoport_temp.at(1).toInt();
|
|
||||||
if(porta>portb)
|
|
||||||
{
|
|
||||||
for(;portb<=porta;portb++)
|
|
||||||
{
|
|
||||||
ports_list.append(portb);
|
|
||||||
ports_num+=1;
|
|
||||||
|
|
||||||
}
|
|
||||||
}else if(portb>porta)
|
|
||||||
{
|
|
||||||
for(;porta<=portb;porta++)
|
|
||||||
{
|
|
||||||
ports_list.append(porta);
|
|
||||||
ports_num+=1;
|
|
||||||
|
|
||||||
}
|
|
||||||
}else//=
|
|
||||||
{
|
|
||||||
ports_list.append(porta);
|
|
||||||
ports_num+=1;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
quint64 scantimes=ips_num*ports_num,now_scan=0;
|
|
||||||
|
|
||||||
qDebug() << "IP: "<<ips_num;
|
|
||||||
qDebug() << "port :"<<ports_num;
|
|
||||||
qDebug() << "scan times :"<<scantimes;
|
|
||||||
quint16 jindu=0,jindu_old=0;
|
quint16 jindu=0,jindu_old=0;
|
||||||
for(quint64 ii=0;ii<ips_num;ii++)
|
|
||||||
|
if(pingonly)
|
||||||
{
|
{
|
||||||
for(quint64 iii=0;iii<ports_num;iii++)
|
for(quint64 ii=0;ii<ips_num;ii++)
|
||||||
{
|
{
|
||||||
|
trytry_ping=new trytryping;
|
||||||
//qDebug() <<str_ips_list.at(ii)<<":"<< ports_list.at(iii);
|
trytry_ping->timeout=this->timeout;
|
||||||
|
trytry_ping->ipstr=str_ips_list.at(ii);
|
||||||
//qDebug()<<"now:"<<this->now_thread_num<<" - set:"<<this->set_thread_num;
|
|
||||||
|
|
||||||
|
|
||||||
connecttry=new trytry;
|
|
||||||
connecttry->timeout=this->timeout;
|
|
||||||
connecttry->ipstr=str_ips_list.at(ii);
|
|
||||||
connecttry->ipint=ports_list.at(iii);
|
|
||||||
|
|
||||||
|
connect(trytry_ping,&trytryping::try_one,this,&dispatch::f_one);
|
||||||
|
connect(trytry_ping,&trytryping::connect_ok,[=](QString temp){emit connect_ok(temp);});
|
||||||
|
trytry_ping->start();
|
||||||
|
|
||||||
connect(connecttry,&trytry::try_one,this,&dispatch::f_one);
|
jindu=(quint16)(((qfloat16)(ii)/(qfloat16)(ips_num))*100);
|
||||||
connect(connecttry,&trytry::connect_ok,[=](QString temp){emit connect_ok(temp);});
|
|
||||||
/*
|
|
||||||
connect(connecttry,&trytry::finished,[=]{
|
|
||||||
connecttry->disconnect();
|
|
||||||
connecttry->quit();
|
|
||||||
connecttry->wait();
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
connecttry->start();
|
|
||||||
|
|
||||||
jindu=(quint16)(((qfloat16)(now_scan)/(qfloat16)(scantimes))*100);
|
|
||||||
if(jindu!=jindu_old)
|
if(jindu!=jindu_old)
|
||||||
{
|
{
|
||||||
jindu_old=jindu;
|
jindu_old=jindu;
|
||||||
@@ -248,18 +213,109 @@ void dispatch::run()
|
|||||||
emit return_jindu(jindu);
|
emit return_jindu(jindu);
|
||||||
}
|
}
|
||||||
|
|
||||||
now_scan+=1;
|
|
||||||
|
|
||||||
while(this->now_thread_num>this->set_thread_num);
|
while(this->now_thread_num>this->set_thread_num);
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
QRegExp ex_port ("^(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
|
||||||
|
QRegExp ex_porttoport("^(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])-(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$");
|
||||||
|
//QRegExp ex_portmore ("^(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]);$");
|
||||||
|
for (int i = 0; i < str_port_list.size(); ++i)
|
||||||
|
{
|
||||||
|
str_ports_temp=str_port_list.at(i).split(";");
|
||||||
|
for (int ii = 0; ii < str_ports_temp.size(); ++ii)
|
||||||
|
{
|
||||||
|
if(ex_port.exactMatch(str_ports_temp.at(ii)))
|
||||||
|
{
|
||||||
|
qDebug()<<str_ports_temp.at(ii)<<" norlmore port";
|
||||||
|
ports_list.append(str_ports_temp.at(ii).toInt());
|
||||||
|
ports_num+=1;
|
||||||
|
|
||||||
|
}else if(ex_porttoport.exactMatch(str_ports_temp.at(ii)))
|
||||||
|
{
|
||||||
|
qDebug()<<str_ports_temp.at(ii)<<" port to port";
|
||||||
|
str_porttoport_temp=str_ports_temp.at(ii).split("-");
|
||||||
|
porta=str_porttoport_temp.at(0).toInt();
|
||||||
|
portb=str_porttoport_temp.at(1).toInt();
|
||||||
|
if(porta>portb)
|
||||||
|
{
|
||||||
|
for(;portb<=porta;portb++)
|
||||||
|
{
|
||||||
|
ports_list.append(portb);
|
||||||
|
ports_num+=1;
|
||||||
|
|
||||||
|
}
|
||||||
|
}else if(portb>porta)
|
||||||
|
{
|
||||||
|
for(;porta<=portb;porta++)
|
||||||
|
{
|
||||||
|
ports_list.append(porta);
|
||||||
|
ports_num+=1;
|
||||||
|
|
||||||
|
}
|
||||||
|
}else//=
|
||||||
|
{
|
||||||
|
ports_list.append(porta);
|
||||||
|
ports_num+=1;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
quint64 scantimes=ips_num*ports_num,now_scan=0;
|
||||||
|
|
||||||
|
qDebug() << "IP: "<<ips_num;
|
||||||
|
qDebug() << "port :"<<ports_num;
|
||||||
|
qDebug() << "scan times :"<<scantimes;
|
||||||
|
|
||||||
|
for(quint64 ii=0;ii<ips_num;ii++)
|
||||||
|
{
|
||||||
|
for(quint64 iii=0;iii<ports_num;iii++)
|
||||||
|
{
|
||||||
|
|
||||||
|
//qDebug() <<str_ips_list.at(ii)<<":"<< ports_list.at(iii);
|
||||||
|
|
||||||
|
//qDebug()<<"now:"<<this->now_thread_num<<" - set:"<<this->set_thread_num;
|
||||||
|
|
||||||
|
|
||||||
|
connecttry=new trytry;
|
||||||
|
connecttry->timeout=this->timeout;
|
||||||
|
connecttry->ipstr=str_ips_list.at(ii);
|
||||||
|
connecttry->ipint=ports_list.at(iii);
|
||||||
|
|
||||||
|
|
||||||
|
connect(connecttry,&trytry::try_one,this,&dispatch::f_one);
|
||||||
|
connect(connecttry,&trytry::connect_ok,[=](QString temp){emit connect_ok(temp);});
|
||||||
|
connecttry->start();
|
||||||
|
|
||||||
|
jindu=(quint16)(((qfloat16)(now_scan)/(qfloat16)(scantimes))*100);
|
||||||
|
if(jindu!=jindu_old)
|
||||||
|
{
|
||||||
|
jindu_old=jindu;
|
||||||
|
//qDebug() <<jindu;
|
||||||
|
|
||||||
|
emit return_jindu(jindu);
|
||||||
|
}
|
||||||
|
|
||||||
|
now_scan+=1;
|
||||||
|
|
||||||
|
while(this->now_thread_num>this->set_thread_num);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
emit dispatch_finish();
|
emit dispatch_finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+18
-1
@@ -11,6 +11,22 @@
|
|||||||
#include <QPlainTextEdit>
|
#include <QPlainTextEdit>
|
||||||
#include <qmath.h>
|
#include <qmath.h>
|
||||||
#include <QFloat16>
|
#include <QFloat16>
|
||||||
|
#include <QtCore/QProcess>
|
||||||
|
class trytryping : public QThread
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
trytryping();
|
||||||
|
|
||||||
|
quint16 timeout;
|
||||||
|
QString ipstr;
|
||||||
|
|
||||||
|
void run();
|
||||||
|
signals:
|
||||||
|
void try_one(qint16);
|
||||||
|
void connect_ok(QString);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
class trytry : public QThread
|
class trytry : public QThread
|
||||||
{
|
{
|
||||||
@@ -44,8 +60,9 @@ public:
|
|||||||
QString port_list;
|
QString port_list;
|
||||||
|
|
||||||
trytry *connecttry;
|
trytry *connecttry;
|
||||||
|
trytryping *trytry_ping;
|
||||||
|
|
||||||
|
bool pingonly=false;
|
||||||
void run();
|
void run();
|
||||||
void f_one(qint16 temp);
|
void f_one(qint16 temp);
|
||||||
signals:
|
signals:
|
||||||
|
|||||||
+64
-39
@@ -78,59 +78,84 @@ Widget::Widget(QWidget *parent)
|
|||||||
ui->outputlist->setReadOnly(true);
|
ui->outputlist->setReadOnly(true);
|
||||||
ui->stard_scan->setText("start scan");
|
ui->stard_scan->setText("start scan");
|
||||||
|
|
||||||
connect(this,&Widget::start_scan,[=]{
|
|
||||||
scan_flag=1;
|
|
||||||
keyboard_en(true);
|
|
||||||
|
|
||||||
ui->stard_scan->setText("stop scan");
|
|
||||||
dispatch_thread = new dispatch;//线程分发
|
|
||||||
dispatch_thread->ip_list=ui->IP_list->toPlainText();
|
|
||||||
dispatch_thread->port_list=ui->port_list->toPlainText();
|
|
||||||
dispatch_thread->set_thread_num = ui->threads->value();
|
|
||||||
dispatch_thread->now_thread_num = 0;
|
|
||||||
dispatch_thread->timeout = ui->timeout->value();
|
|
||||||
connect(dispatch_thread,&dispatch::dispatch_finish,[=]{
|
|
||||||
emit stop_scan();
|
|
||||||
});
|
|
||||||
connect(dispatch_thread,&dispatch::return_jindu,this,&Widget::jindu_chuli,Qt::QueuedConnection);
|
|
||||||
connect(dispatch_thread,&dispatch::connect_ok,this,&Widget::output_chuli,Qt::QueuedConnection);
|
|
||||||
ui->progressBar->setValue(0);
|
|
||||||
dispatch_thread->start();
|
|
||||||
ui->stard_scan->setDisabled(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
connect(this,&Widget::stop_scan,[=]{
|
|
||||||
scan_flag=0;
|
|
||||||
keyboard_en(false);
|
|
||||||
|
|
||||||
ui->stard_scan->setText("start scan");
|
|
||||||
|
|
||||||
//dispatch_thread->disconnect();
|
|
||||||
dispatch_thread->quit();
|
|
||||||
dispatch_thread->wait();
|
|
||||||
//delete dispatch_thread;
|
|
||||||
ui->stard_scan->setDisabled(false);
|
|
||||||
qDebug() << "tray_exit";
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
connect(ui->pushButton_20, &QPushButton::pressed, [=]()
|
connect(ui->pushButton_20, &QPushButton::pressed, [=]()
|
||||||
{
|
{
|
||||||
|
if(scan_flag==0)
|
||||||
|
{
|
||||||
|
scan_flag=1;
|
||||||
|
keyboard_en(true);
|
||||||
|
ui->stard_scan->setDisabled(true);
|
||||||
|
ui->pushButton_20->setText("Stop Ping");
|
||||||
|
dispatch_thread = new dispatch;//线程分发
|
||||||
|
dispatch_thread->pingonly=true;
|
||||||
|
dispatch_thread->ip_list=ui->IP_list->toPlainText();
|
||||||
|
dispatch_thread->port_list=ui->port_list->toPlainText();
|
||||||
|
dispatch_thread->set_thread_num = ui->threads->value();
|
||||||
|
dispatch_thread->now_thread_num = 0;
|
||||||
|
dispatch_thread->timeout = ui->timeout->value();
|
||||||
|
connect(dispatch_thread,&dispatch::dispatch_finish,[=]{
|
||||||
|
scan_flag=0;
|
||||||
|
keyboard_en(false);
|
||||||
|
ui->stard_scan->setDisabled(false);
|
||||||
|
ui->pushButton_20->setText("Ping Olny");
|
||||||
|
dispatch_thread->quit();
|
||||||
|
//dispatch_thread->wait();
|
||||||
|
});
|
||||||
|
connect(dispatch_thread,&dispatch::return_jindu,this,&Widget::jindu_chuli,Qt::QueuedConnection);
|
||||||
|
connect(dispatch_thread,&dispatch::connect_ok,this,&Widget::output_chuli,Qt::QueuedConnection);
|
||||||
|
ui->progressBar->setValue(0);
|
||||||
|
dispatch_thread->start();
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
scan_flag=0;
|
||||||
|
keyboard_en(false);
|
||||||
|
ui->stard_scan->setDisabled(false);
|
||||||
|
ui->pushButton_20->setText("Ping Olny");
|
||||||
|
dispatch_thread->terminate();
|
||||||
|
dispatch_thread->quit();
|
||||||
|
//dispatch_thread->wait();
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ui->stard_scan, &QPushButton::pressed, [=]()
|
connect(ui->stard_scan, &QPushButton::pressed, [=]()
|
||||||
{
|
{
|
||||||
ui->stard_scan->setDisabled(true);
|
|
||||||
if(scan_flag==0)
|
if(scan_flag==0)
|
||||||
{
|
{
|
||||||
emit start_scan();
|
scan_flag=1;
|
||||||
|
keyboard_en(true);
|
||||||
|
ui->pushButton_20->setDisabled(true);
|
||||||
|
ui->stard_scan->setText("stop scan");
|
||||||
|
dispatch_thread = new dispatch;//线程分发
|
||||||
|
dispatch_thread->pingonly=false;
|
||||||
|
dispatch_thread->ip_list=ui->IP_list->toPlainText();
|
||||||
|
dispatch_thread->port_list=ui->port_list->toPlainText();
|
||||||
|
dispatch_thread->set_thread_num = ui->threads->value();
|
||||||
|
dispatch_thread->now_thread_num = 0;
|
||||||
|
dispatch_thread->timeout = ui->timeout->value();
|
||||||
|
connect(dispatch_thread,&dispatch::dispatch_finish,[=]{
|
||||||
|
scan_flag=0;
|
||||||
|
keyboard_en(false);
|
||||||
|
ui->pushButton_20->setDisabled(false);
|
||||||
|
ui->stard_scan->setText("start scan");
|
||||||
|
dispatch_thread->quit();
|
||||||
|
//dispatch_thread->wait();
|
||||||
|
});
|
||||||
|
connect(dispatch_thread,&dispatch::return_jindu,this,&Widget::jindu_chuli,Qt::QueuedConnection);
|
||||||
|
connect(dispatch_thread,&dispatch::connect_ok,this,&Widget::output_chuli,Qt::QueuedConnection);
|
||||||
|
ui->progressBar->setValue(0);
|
||||||
|
dispatch_thread->start();
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
|
scan_flag=0;
|
||||||
|
keyboard_en(false);
|
||||||
|
ui->pushButton_20->setDisabled(false);
|
||||||
|
ui->stard_scan->setText("start scan");
|
||||||
dispatch_thread->terminate();
|
dispatch_thread->terminate();
|
||||||
emit stop_scan();
|
dispatch_thread->quit();
|
||||||
|
//dispatch_thread->wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
});//'scan button pass'
|
});//'scan button pass'
|
||||||
|
|||||||
@@ -81,7 +81,7 @@
|
|||||||
<number>999</number>
|
<number>999</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<number>100</number>
|
<number>80</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
|
|||||||
Reference in New Issue
Block a user