加入ping ip功能

Signed-off-by: fong <wuwenfengmi@outlook.com>
This commit is contained in:
fong
2024-01-30 21:00:29 +08:00
parent 564ce3a423
commit c5b48ffdac
4 changed files with 217 additions and 119 deletions
+134 -78
View File
@@ -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()
@@ -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;
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++)
{
//qDebug() <<str_ips_list.at(ii)<<":"<< ports_list.at(iii);
//qDebug()<<"now:"<<this->now_thread_num<<" - set:"<<this->set_thread_num;
trytry_ping=new trytryping;
trytry_ping->timeout=this->timeout;
trytry_ping->ipstr=str_ips_list.at(ii);
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);
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);
jindu=(quint16)(((qfloat16)(ii)/(qfloat16)(ips_num))*100);
if(jindu!=jindu_old)
{
jindu_old=jindu;
@@ -248,18 +213,109 @@ void dispatch::run()
emit return_jindu(jindu);
}
now_scan+=1;
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();
}
+18 -1
View File
@@ -11,6 +11,22 @@
#include <QPlainTextEdit>
#include <qmath.h>
#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
{
@@ -44,8 +60,9 @@ public:
QString port_list;
trytry *connecttry;
trytryping *trytry_ping;
bool pingonly=false;
void run();
void f_one(qint16 temp);
signals:
+64 -39
View File
@@ -78,59 +78,84 @@ Widget::Widget(QWidget *parent)
ui->outputlist->setReadOnly(true);
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, [=]()
{
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, [=]()
{
ui->stard_scan->setDisabled(true);
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
{
scan_flag=0;
keyboard_en(false);
ui->pushButton_20->setDisabled(false);
ui->stard_scan->setText("start scan");
dispatch_thread->terminate();
emit stop_scan();
dispatch_thread->quit();
//dispatch_thread->wait();
}
});//'scan button pass'
+1 -1
View File
@@ -81,7 +81,7 @@
<number>999</number>
</property>
<property name="value">
<number>100</number>
<number>80</number>
</property>
</widget>
<widget class="QLabel" name="label_4">