优化多线程与分发

Signed-off-by: fong <wuwenfengmi@outlook.com>
This commit is contained in:
fong
2024-01-30 17:14:24 +08:00
parent ce64cc2f5b
commit 958500acd7
5 changed files with 593 additions and 32 deletions
+110 -8
View File
@@ -26,11 +26,25 @@ quint32 ipv4str_to_int(const QString& ipstr)
}
}
trytry::trytry()
{
}
void trytry::run()
{
qDebug()<<this->ipstr<<":"<<this->ipint;
sleep(1);
}
dispatch::dispatch()
{
@@ -45,8 +59,11 @@ void dispatch::run()
QStringList str_list_more;
quint32 ipa,ipb;
QStringList str_port_list = port_list.split("\n");
QStringList str_ports_list;
QStringList str_ports_temp;
QStringList str_porttoport_temp;
quint32 porta,portb;
QList <quint32> ports_list;
quint64 ports_num=0;
quint64 ips_num=0;
QRegExp ex_ipv4 ("^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$");
QRegExp ex_ipv4_more("^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)-((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$");
@@ -121,16 +138,101 @@ void dispatch::run()
}
qDebug() << str_ips_list.size();
for(int ii=0;ii<str_ips_list.size();ii++)
{
qDebug() << str_ips_list.at(ii);
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++)
{
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;
while(this->now_thread_num>this->set_thread_num);
connecttry=new trytry;
connecttry->timeout=this->timeout;
connecttry->ipstr=str_ips_list.at(ii);
connecttry->ipint=ports_list.at(iii);
this->now_thread_num+=1;
//connect(connecttry,&trytry::started,[=]{this->now_thread_num+=1;});
connect(connecttry,&trytry::finished,[=]{this->now_thread_num-=1;});
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;
}
}
emit dispatch_finish();
}