Projects STRLCPY sub3suite Commits 12335e05
🤬
  • ■ ■ ■ ■
    README.md
    skipped 45 lines
    46 46  ## Credits
    47 47   
    48 48  - HTML parser by Google's [gumbo-parser](https://github.com/google/gumbo-parser)
    49  -- Crash-Handler by Google's [breakpad](https://github.com/google/breakpad)
     49 +- Crash handler by Google's [breakpad](https://github.com/google/breakpad)
    50 50   
    51 51  ## Developers
    52 52   
    skipped 1 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/Dialogs/ApiKeysDialog.cpp
    skipped 34 lines
    35 35   APIKEY.setValue("cloudflare", ui->lineEditCloudflare->text());
    36 36   APIKEY.setValue(OSINT_MODULE_GITHUB, ui->lineEditGithub->text());
    37 37   APIKEY.setValue("google", ui->lineEditGoogle->text());
    38  - APIKEY.setValue("hunter", ui->lineEditHunter->text());
     38 + APIKEY.setValue(OSINT_MODULE_HUNTER, ui->lineEditHunter->text());
    39 39   APIKEY.setValue("intelx", ui->lineEditIntelX->text());
    40 40   APIKEY.setValue("pentesttools", ui->lineEditPentestTools->text());
    41 41   APIKEY.setValue(OSINT_MODULE_PROJECTDISCOVERY, ui->lineEditProjectDiscovery->text());
    skipped 7 lines
    49 49   APIKEY.setValue("virustotal", ui->lineEditVirusTotal->text());
    50 50   APIKEY.setValue(OSINT_MODULE_BINARYEDGE, ui->lineEditBinaryEdge->text());
    51 51   APIKEY.setValue(OSINT_MODULE_C99, ui->lineEditC99->text());
    52  - APIKEY.setValue("ipapi", ui->lineEditIpApi->text());
     52 + APIKEY.setValue(OSINT_MODULE_IPAPI, ui->lineEditIpApi->text());
    53 53   APIKEY.setValue("ipinfo", ui->lineEditIpInfo->text());
    54 54   APIKEY.setValue(OSINT_MODULE_THREATBOOK, ui->lineEditThreatBook->text());
    55 55   APIKEY.setValue(OSINT_MODULE_WHOISXMLAPI, ui->lineEditWhoisXmlApi->text());
    skipped 13 lines
    69 69   APIKEY.setValue(OSINT_MODULE_ONYPHE, ui->lineEditOnyphe->text());
    70 70   APIKEY.setValue(OSINT_MODULE_FULLHUNT, ui->lineEditFullHunt->text());
    71 71   APIKEY.setValue(OSINT_MODULE_SPAMHAUS, ui->lineEditSpamHaus->text());
    72  - APIKEY.setValue("debounce", ui->lineEditDebounce->text());
     72 + APIKEY.setValue(OSINT_MODULE_DEBOUNCE, ui->lineEditDebounce->text());
    73 73   APIKEY.setValue(OSINT_MODULE_HAVEIBEENPAWNED, ui->lineEditHaveIBeenPawned->text());
    74 74   APIKEY.setValue(OSINT_MODULE_HOST, ui->lineEditHost->text());
    75 75   APIKEY.setValue(OSINT_MODULE_JSONWHOIS, ui->lineEditJsonWhois->text());
    skipped 5 lines
    81 81   APIKEY.setValue(OSINT_MODULE_SPYONWEB, ui->lineEditSpyOnWeb->text());
    82 82   APIKEY.setValue(OSINT_MODULE_WHATCMS, ui->lineEditWhatcms->text());
    83 83   APIKEY.setValue(OSINT_MODULE_WHOXY, ui->lineEditWhoxy->text());
    84  - APIKEY.setValue("emailcrawlr", ui->lineEditEmailCrawlr->text());
    85  - APIKEY.setValue("emailformat", ui->lineEditEmailFormat->text());
    86  - APIKEY.setValue("emailrep", ui->lineEditEmailRep->text());
    87  - APIKEY.setValue("snov", ui->lineEditSnov->text());
    88  - APIKEY.setValue("ipdata", ui->lineEditIpData->text());
     84 + APIKEY.setValue(OSINT_MODULE_EMAILCRAWLR, ui->lineEditEmailCrawlr->text());
     85 + APIKEY.setValue(OSINT_MODULE_EMAILFORMAT, ui->lineEditEmailFormat->text());
     86 + APIKEY.setValue(OSINT_MODULE_EMAILREP, ui->lineEditEmailRep->text());
     87 + APIKEY.setValue(OSINT_MODULE_SNOV, ui->lineEditSnov->text());
     88 + APIKEY.setValue(OSINT_MODULE_IPDATA, ui->lineEditIpData->text());
    89 89   APIKEY.setValue("ipgeolocation", ui->lineEditIpGeoLocation->text());
    90 90   APIKEY.setValue("ipregistry", ui->lineEditIpRegistry->text());
    91 91   APIKEY.setValue("ipstack", ui->lineEditIpStack->text());
    skipped 5 lines
    97 97   APIKEY.setValue("leaklookup", ui->lineEditLeakLookup->text());
    98 98   APIKEY.setValue(OSINT_MODULE_ZETALYTICS, ui->lineEditZETAlytics->text());
    99 99   APIKEY.setValue(OSINT_MODULE_WAPPALYZER, ui->lineEditWappalyzer->text());
     100 + APIKEY.setValue(OSINT_MODULE_IPFY, ui->lineEditIpfy->text());
    100 101   accept();
    101 102  }
    102 103   
    skipped 40 lines
    143 144   ui->lineEditGoogle->setText(key);
    144 145   ui->buttonGetGoogle->hide();
    145 146   }
    146  - key = APIKEY.value("hunter").toString();
     147 + key = APIKEY.value(OSINT_MODULE_HUNTER).toString();
    147 148   if(!key.isEmpty()){
    148 149   ui->lineEditHunter->setText(key);
    149 150   ui->buttonGetHunter->hide();
    skipped 86 lines
    236 237   ui->lineEditZoomEye->setText(key);
    237 238   ui->buttonGetZoomEye->hide();
    238 239   }
    239  - key = APIKEY.value("ipapi").toString();
     240 + key = APIKEY.value(OSINT_MODULE_IPAPI).toString();
    240 241   if(!key.isEmpty()){
    241 242   ui->lineEditIpApi->setText(key);
    242 243   ui->buttonGetIpApi->hide();
    skipped 74 lines
    317 318   ui->lineEditSpamHaus->setText(key);
    318 319   ui->buttonGetSpamHaus->hide();
    319 320   }
    320  - key = APIKEY.value("debounce").toString();
     321 + key = APIKEY.value(OSINT_MODULE_DEBOUNCE).toString();
    321 322   if(!key.isEmpty()){
    322 323   ui->lineEditDebounce->setText(key);
    323 324   ui->buttonGetDebounce->hide();
    skipped 52 lines
    376 377   ui->lineEditWhoxy->setText(key);
    377 378   ui->buttonGetWhoxy->hide();
    378 379   }
    379  - key = APIKEY.value("emailcrawlr").toString();
     380 + key = APIKEY.value(OSINT_MODULE_EMAILCRAWLR).toString();
    380 381   if(!key.isEmpty()){
    381 382   ui->lineEditEmailCrawlr->setText(key);
    382 383   ui->buttonGetEmailCrawlr->hide();
    383 384   }
    384  - key = APIKEY.value("emailformat").toString();
     385 + key = APIKEY.value(OSINT_MODULE_EMAILFORMAT).toString();
    385 386   if(!key.isEmpty()){
    386 387   ui->lineEditEmailFormat->setText(key);
    387 388   ui->buttonGetEmailFormat->hide();
    388 389   }
    389  - key = APIKEY.value("emailrep").toString();
     390 + key = APIKEY.value(OSINT_MODULE_EMAILREP).toString();
    390 391   if(!key.isEmpty()){
    391 392   ui->lineEditEmailRep->setText(key);
    392 393   ui->buttonGetEmailRep->hide();
    393 394   }
    394  - key = APIKEY.value("snov").toString();
     395 + key = APIKEY.value(OSINT_MODULE_SNOV).toString();
    395 396   if(!key.isEmpty()){
    396 397   ui->lineEditSnov->setText(key);
    397 398   ui->buttonGetSnov->hide();
    398 399   }
    399  - key = APIKEY.value("ipdata").toString();
     400 + key = APIKEY.value(OSINT_MODULE_IPDATA).toString();
    400 401   if(!key.isEmpty()){
    401 402   ui->lineEditIpData->setText(key);
    402 403   ui->buttonGetIpData->hide();
    skipped 46 lines
    449 450   if(!key.isEmpty()){
    450 451   ui->lineEditWappalyzer->setText(key);
    451 452   ui->buttonGetWappalyzer->hide();
     453 + }
     454 + key = APIKEY.value(OSINT_MODULE_IPFY).toString();
     455 + if(!key.isEmpty()){
     456 + ui->lineEditIpfy->setText(key);
     457 + ui->buttonGetIpfy->hide();
    452 458   }
    453 459  }
    454 460   
    skipped 249 lines
    704 710   QDesktopServices::openUrl(QUrl("https://community.riskiq.com/", QUrl::TolerantMode));
    705 711  }
    706 712   
     713 +void ApiKeysDialog::on_buttonGetIpfy_clicked(){
     714 + QDesktopServices::openUrl(QUrl("https://geo.ipify.org/pricing", QUrl::TolerantMode));
     715 +}
     716 + 
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/Dialogs/ApiKeysDialog.h
    skipped 90 lines
    91 91   
    92 92   void on_buttonGetPassiveTotal_clicked();
    93 93   
     94 + void on_buttonGetIpfy_clicked();
     95 + 
    94 96  private:
    95 97   Ui::ApiKeysDialog *ui;
    96 98   void m_loadApiKeys();
    skipped 4 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/Dialogs/ApiKeysDialog.ui
    skipped 62 lines
    63 63   <property name="geometry">
    64 64   <rect>
    65 65   <x>0</x>
    66  - <y>0</y>
     66 + <y>-1182</y>
    67 67   <width>626</width>
    68  - <height>2626</height>
     68 + <height>2663</height>
    69 69   </rect>
    70 70   </property>
    71 71   <layout class="QVBoxLayout" name="verticalLayout">
    skipped 2057 lines
    2129 2129   </item>
    2130 2130   <item>
    2131 2131   <widget class="QToolButton" name="buttonGetIpData">
     2132 + <property name="text">
     2133 + <string>Get...</string>
     2134 + </property>
     2135 + </widget>
     2136 + </item>
     2137 + </layout>
     2138 + </item>
     2139 + <item>
     2140 + <widget class="Line" name="line_62">
     2141 + <property name="orientation">
     2142 + <enum>Qt::Horizontal</enum>
     2143 + </property>
     2144 + </widget>
     2145 + </item>
     2146 + <item>
     2147 + <layout class="QHBoxLayout" name="horizontalLayout_71">
     2148 + <item>
     2149 + <widget class="QLabel" name="label_78">
     2150 + <property name="minimumSize">
     2151 + <size>
     2152 + <width>100</width>
     2153 + <height>0</height>
     2154 + </size>
     2155 + </property>
     2156 + <property name="font">
     2157 + <font>
     2158 + <weight>75</weight>
     2159 + <bold>true</bold>
     2160 + </font>
     2161 + </property>
     2162 + <property name="text">
     2163 + <string>Ipfy</string>
     2164 + </property>
     2165 + </widget>
     2166 + </item>
     2167 + <item>
     2168 + <widget class="QLineEdit" name="lineEditIpfy">
     2169 + <property name="minimumSize">
     2170 + <size>
     2171 + <width>0</width>
     2172 + <height>0</height>
     2173 + </size>
     2174 + </property>
     2175 + </widget>
     2176 + </item>
     2177 + <item>
     2178 + <widget class="QToolButton" name="buttonGetIpfy">
    2132 2179   <property name="text">
    2133 2180   <string>Get...</string>
    2134 2181   </property>
    skipped 1790 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/active/Active.ui
    skipped 390 lines
    391 391   <bool>true</bool>
    392 392   </attribute>
    393 393   <attribute name="horizontalHeaderMinimumSectionSize">
    394  - <number>100</number>
     394 + <number>50</number>
    395 395   </attribute>
    396 396   <attribute name="horizontalHeaderDefaultSectionSize">
    397  - <number>100</number>
     397 + <number>250</number>
    398 398   </attribute>
    399 399   <attribute name="horizontalHeaderShowSortIndicator" stdset="0">
    400 400   <bool>true</bool>
    skipped 5 lines
    406 406   <bool>false</bool>
    407 407   </attribute>
    408 408   <attribute name="verticalHeaderMinimumSectionSize">
    409  - <number>50</number>
     409 + <number>15</number>
    410 410   </attribute>
    411 411   <attribute name="verticalHeaderDefaultSectionSize">
    412  - <number>250</number>
     412 + <number>15</number>
    413 413   </attribute>
    414 414   <attribute name="verticalHeaderHighlightSections">
    415 415   <bool>true</bool>
    skipped 204 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/brute/Brute.ui
    skipped 444 lines
    445 445   <bool>true</bool>
    446 446   </attribute>
    447 447   <attribute name="horizontalHeaderMinimumSectionSize">
    448  - <number>100</number>
     448 + <number>50</number>
    449 449   </attribute>
    450 450   <attribute name="horizontalHeaderDefaultSectionSize">
    451  - <number>100</number>
     451 + <number>250</number>
    452 452   </attribute>
    453 453   <attribute name="horizontalHeaderStretchLastSection">
    454 454   <bool>true</bool>
    skipped 2 lines
    457 457   <bool>false</bool>
    458 458   </attribute>
    459 459   <attribute name="verticalHeaderMinimumSectionSize">
    460  - <number>50</number>
     460 + <number>15</number>
    461 461   </attribute>
    462 462   <attribute name="verticalHeaderDefaultSectionSize">
    463  - <number>250</number>
     463 + <number>15</number>
    464 464   </attribute>
    465 465   </widget>
    466 466   </item>
    skipped 118 lines
  • ■ ■ ■ ■
    sub3suite/src/engines/dns/Dns.ui
    skipped 461 lines
    462 462   <number>50</number>
    463 463   </attribute>
    464 464   <attribute name="headerDefaultSectionSize">
    465  - <number>100</number>
     465 + <number>200</number>
    466 466   </attribute>
    467 467   </widget>
    468 468   </item>
    skipped 110 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/dns/Dns_results.cpp
    skipped 35 lines
    36 36   if(m_scanConfig->autoSaveToProject)
    37 37   project->addActiveDNS(dns);
    38 38   
     39 + ui->labelResultsCount->setNum(proxyModel->rowCount());
    39 40   m_scanStats->resolved++;
    40 41  }
    41 42   
    skipped 12 lines
    54 55   if(m_scanConfig->autoSaveToProject)
    55 56   project->addActiveDNS(dns);
    56 57   
     58 + ui->labelResultsCount->setNum(proxyModel->rowCount());
    57 59   m_scanStats->resolved++;
    58 60  }
    59 61   
  • ■ ■ ■ ■ ■
    sub3suite/src/engines/osint/Osint.ui
    skipped 597 lines
    598 598   <bool>true</bool>
    599 599   </attribute>
    600 600   <attribute name="horizontalHeaderMinimumSectionSize">
    601  - <number>200</number>
     601 + <number>50</number>
    602 602   </attribute>
    603 603   <attribute name="horizontalHeaderDefaultSectionSize">
    604  - <number>220</number>
     604 + <number>250</number>
    605 605   </attribute>
    606 606   <attribute name="horizontalHeaderShowSortIndicator" stdset="0">
    607 607   <bool>true</bool>
    skipped 5 lines
    613 613   <bool>false</bool>
    614 614   </attribute>
    615 615   <attribute name="verticalHeaderMinimumSectionSize">
    616  - <number>50</number>
     616 + <number>15</number>
    617 617   </attribute>
    618 618   <attribute name="verticalHeaderDefaultSectionSize">
    619  - <number>250</number>
     619 + <number>15</number>
    620 620   </attribute>
    621 621   </widget>
    622 622   </item>
    skipped 479 lines
    1102 1102   <property name="geometry">
    1103 1103   <rect>
    1104 1104   <x>0</x>
    1105  - <y>0</y>
     1105 + <y>-152</y>
    1106 1106   <width>167</width>
    1107  - <height>876</height>
     1107 + <height>932</height>
    1108 1108   </rect>
    1109 1109   </property>
    1110 1110   <attribute name="label">
    skipped 40 lines
    1151 1151   <widget class="QCheckBox" name="moduleEmailCrawlr">
    1152 1152   <property name="text">
    1153 1153   <string>EmailCrawlr</string>
     1154 + </property>
     1155 + </widget>
     1156 + </item>
     1157 + </layout>
     1158 + </widget>
     1159 + </item>
     1160 + <item>
     1161 + <widget class="QGroupBox" name="groupBox_9">
     1162 + <property name="title">
     1163 + <string>IP</string>
     1164 + </property>
     1165 + <layout class="QVBoxLayout" name="verticalLayout_13">
     1166 + <item>
     1167 + <widget class="QCheckBox" name="moduleIpfy">
     1168 + <property name="text">
     1169 + <string>Ipfy</string>
    1154 1170   </property>
    1155 1171   </widget>
    1156 1172   </item>
    skipped 257 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/osint/Osint_modules.cpp
    skipped 440 lines
    441 441   else
    442 442   ui->modulePassiveTotal->hide();
    443 443   
     444 + ModuleInfo::Ipfy ipfy;
     445 + if(ipfy.input_output.contains(INPUT_TYPE) && ipfy.input_output[INPUT_TYPE].contains(OUTPUT_TYPE))
     446 + ui->moduleIpfy->show();
     447 + else
     448 + ui->moduleIpfy->hide();
     449 + 
    444 450   /* uncheck all modules */
    445 451   this->uncheckAllModules();
    446 452  }
    skipped 69 lines
    516 522   ui->moduleBing->setChecked(false);
    517 523   ui->moduleLeakIX->setChecked(false);
    518 524   ui->modulePassiveTotal->setChecked(false);
     525 + ui->moduleIpfy->setChecked(false);
     526 + ui->moduleDnsbufferoverrun->setChecked(false);
    519 527  }
    520 528   
  • ■ ■ ■ ■ ■
    sub3suite/src/engines/osint/Osint_scan.cpp
    skipped 46 lines
    47 47   m_scanArgs->input_ASN = false;
    48 48   m_scanArgs->input_SSL = false;
    49 49   m_scanArgs->input_CIDR = false;
     50 + m_scanArgs->input_Search = false;
    50 51   m_scanArgs->output_HostnameIP = false;
    51 52   m_scanArgs->output_Hostname = false;
    52 53   m_scanArgs->output_IP = false;
    skipped 298 lines
    351 352   if(ui->moduleBing->isChecked())
    352 353   this->startScanThread(new Bing(*m_scanArgs));
    353 354   
     355 + ///
     356 + /// ip...
     357 + ///
     358 + if(ui->moduleIpfy->isChecked())
     359 + this->startScanThread(new Ipfy(*m_scanArgs));
     360 + 
     361 + /* set progressBar */
     362 + ui->progressBar->setMaximum(total_modules*m_scanArgs->targets.length());
     363 + 
    354 364   /* after starting all choosen enumerations... */
    355 365   if(status->activeScanThreads)
    356 366   {
    skipped 8 lines
    365 375   
    366 376  void Osint::startScanThread(AbstractOsintModule *module){
    367 377   total_modules++;
    368  - ui->progressBar->setMaximum(total_modules*m_scanArgs->targets.length());
    369  - 
    370 378   QThread *cThread = new QThread(this);
    371 379   module->startScan(cThread);
    372 380   module->moveToThread(cThread);
    skipped 43 lines
  • ■ ■ ■ ■ ■
    sub3suite/src/engines/raw/Raw.h
    skipped 149 lines
    150 150   void on_moduleWappalyzer_clicked();
    151 151   void on_modulePassiveTotal_clicked();
    152 152   
    153  - private:
     153 + void on_moduleIpfy_clicked();
     154 + 
     155 +private:
    154 156   Ui::Raw *ui;
    155 157   QStandardItemModel *m_model;
    156 158   QStringListModel *m_targetListModel;
    skipped 50 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/raw/Raw.ui
    skipped 415 lines
    416 416   <bool>true</bool>
    417 417   </attribute>
    418 418   <attribute name="headerMinimumSectionSize">
    419  - <number>100</number>
     419 + <number>50</number>
    420 420   </attribute>
    421 421   <attribute name="headerDefaultSectionSize">
    422 422   <number>250</number>
    skipped 473 lines
    896 896   <property name="geometry">
    897 897   <rect>
    898 898   <x>0</x>
    899  - <y>0</y>
     899 + <y>-215</y>
    900 900   <width>177</width>
    901  - <height>617</height>
     901 + <height>650</height>
    902 902   </rect>
    903 903   </property>
    904 904   <attribute name="label">
    skipped 75 lines
    980 980   </widget>
    981 981   </item>
    982 982   <item>
    983  - <widget class="QGroupBox" name="groupBox_3">
     983 + <widget class="QGroupBox" name="groupBox_8">
    984 984   <property name="title">
    985  - <string>API</string>
     985 + <string>Email</string>
    986 986   </property>
    987  - <layout class="QVBoxLayout" name="verticalLayout_13">
     987 + <layout class="QVBoxLayout" name="verticalLayout_11">
    988 988   <item>
    989  - <widget class="QRadioButton" name="moduleAnubis">
     989 + <widget class="QRadioButton" name="moduleTruMail">
    990 990   <property name="text">
    991  - <string>Anubis</string>
     991 + <string>TruMail</string>
    992 992   </property>
    993 993   </widget>
    994 994   </item>
     995 + </layout>
     996 + </widget>
     997 + </item>
     998 + <item>
     999 + <widget class="QGroupBox" name="groupBox_3">
     1000 + <property name="title">
     1001 + <string>API</string>
     1002 + </property>
     1003 + <layout class="QVBoxLayout" name="verticalLayout_13">
    995 1004   <item>
    996  - <widget class="QRadioButton" name="moduleTruMail">
     1005 + <widget class="QRadioButton" name="moduleAnubis">
    997 1006   <property name="text">
    998  - <string>TruMail</string>
     1007 + <string>Anubis</string>
    999 1008   </property>
    1000 1009   </widget>
    1001 1010   </item>
    skipped 112 lines
    1114 1123   <property name="geometry">
    1115 1124   <rect>
    1116 1125   <x>0</x>
    1117  - <y>0</y>
     1126 + <y>-347</y>
    1118 1127   <width>176</width>
    1119  - <height>1524</height>
     1128 + <height>1547</height>
    1120 1129   </rect>
    1121 1130   </property>
    1122 1131   <attribute name="label">
    skipped 126 lines
    1249 1258   <widget class="QRadioButton" name="moduleIpData">
    1250 1259   <property name="text">
    1251 1260   <string>IpData</string>
     1261 + </property>
     1262 + </widget>
     1263 + </item>
     1264 + <item>
     1265 + <widget class="QRadioButton" name="moduleIpfy">
     1266 + <property name="text">
     1267 + <string>Ipfy</string>
    1252 1268   </property>
    1253 1269   </widget>
    1254 1270   </item>
    skipped 351 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/raw/Raw_modules.cpp
    skipped 828 lines
    829 829   ui->comboBoxOptions->addItems(meta.flags.keys());
    830 830  }
    831 831   
     832 +void Raw::on_moduleIpfy_clicked(){
     833 + ui->comboBoxOptions->clear();
     834 + ModuleInfo::Ipfy meta;
     835 + m_optionSet = meta.flags;
     836 + ui->labelUrl->setText("<a href=\""+meta.url+"\" style=\"color: green;\">"+meta.name+"</a>");
     837 + ui->labelApiDoc->setText("<a href=\""+meta.url_apiDoc+"\" style=\"color: green;\">"+meta.url_apiDoc+"</a>");
     838 + ui->textEditEngineSummary->setText(meta.summary);
     839 + ui->comboBoxOptions->addItems(meta.flags.keys());
     840 +}
     841 + 
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/raw/Raw_scan.cpp
    skipped 309 lines
    310 310   
    311 311   if(ui->modulePassiveTotal->isChecked())
    312 312   this->startScanThread(new PassiveTotal(*m_scanArgs));
     313 + 
     314 + if(ui->moduleIpfy->isChecked())
     315 + this->startScanThread(new Ipfy(*m_scanArgs));
    313 316  }
    314 317   
    315 318  void Raw::startScanThread(AbstractOsintModule *module){
    skipped 38 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/ssl/Ssl_results.cpp
    skipped 31 lines
    32 32   if(m_scanConfig->autoSaveToProject)
    33 33   project->addActiveSSL_sha1(sha1);
    34 34   
    35  - ui->labelResultsCount->setNum(m_model_hash->rowCount());
     35 + ui->labelResultsCount->setNum(proxyModel->rowCount());
    36 36   m_scanStats->resolved++;
    37 37  }
    38 38   
    skipped 7 lines
    46 46   if(m_scanConfig->autoSaveToProject)
    47 47   project->addActiveSSL_sha256(sha256);
    48 48   
    49  - ui->labelResultsCount->setNum(m_model_hash->rowCount());
     49 + ui->labelResultsCount->setNum(proxyModel->rowCount());
    50 50   m_scanStats->resolved++;
    51 51  }
    52 52   
    skipped 10 lines
    63 63   if(m_scanConfig->autoSaveToProject)
    64 64   project->addActiveSSL(target, ssl);
    65 65   
    66  - ui->labelResultsCount->setNum(m_model_ssl->rowCount());
     66 + ui->labelResultsCount->setNum(proxyModel->rowCount());
    67 67   m_scanStats->resolved++;
    68 68  }
    69 69   
    skipped 10 lines
    80 80   project->addActiveSSL_altNames(subdomain);
    81 81   }
    82 82   
    83  - ui->labelResultsCount->setNum(m_model_subdomain->rowCount());
     83 + ui->labelResultsCount->setNum(proxyModel->rowCount());
    84 84   m_scanStats->resolved++;
    85 85  }
    86 86   
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/engines/url/Url.ui
    skipped 384 lines
    385 385   <number>40</number>
    386 386   </attribute>
    387 387   <attribute name="horizontalHeaderDefaultSectionSize">
    388  - <number>40</number>
     388 + <number>100</number>
    389 389   </attribute>
    390 390   <attribute name="horizontalHeaderHighlightSections">
    391 391   <bool>false</bool>
    skipped 8 lines
    400 400   <bool>false</bool>
    401 401   </attribute>
    402 402   <attribute name="verticalHeaderMinimumSectionSize">
    403  - <number>50</number>
     403 + <number>15</number>
    404 404   </attribute>
    405 405   <attribute name="verticalHeaderDefaultSectionSize">
    406  - <number>250</number>
     406 + <number>15</number>
    407 407   </attribute>
    408 408   <attribute name="verticalHeaderHighlightSections">
    409 409   <bool>false</bool>
    skipped 109 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/enums/asn/ASNEnum_scan.cpp
    skipped 106 lines
    107 107   connect(module, &AbstractOsintModule::resultEnumASN, this, &ASNEnum::onResultsAsnPrefixes);
    108 108   break;
    109 109   }
     110 + connect(this, &ASNEnum::stopScanThread, module, &AbstractOsintModule::onStop);
     111 + connect(module, &AbstractOsintModule::scanProgress, ui->progressBar, &QProgressBar::setValue);
    110 112   connect(module, &AbstractOsintModule::scanLog, this, &ASNEnum::onScanLog);
    111 113   connect(cThread, &QThread::finished, this, &ASNEnum::onScanThreadEnded);
    112 114   connect(cThread, &QThread::finished, module, &AbstractOsintModule::deleteLater);
    skipped 20 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/enums/cidr/CidrEnum_scan.cpp
    skipped 79 lines
    80 80   module->startScan(cThread);
    81 81   module->moveToThread(cThread);
    82 82   connect(module, &AbstractOsintModule::resultEnumCIDR, this, &CidrEnum::onResult);
     83 + connect(this, &CidrEnum::stopScanThread, module, &AbstractOsintModule::onStop);
     84 + connect(module, &AbstractOsintModule::scanProgress, ui->progressBar, &QProgressBar::setValue);
    83 85   connect(module, &AbstractOsintModule::scanLog, this, &CidrEnum::onScanLog);
    84 86   connect(cThread, &QThread::finished, this, &CidrEnum::onScanThreadEnded);
    85 87   connect(cThread, &QThread::finished, module, &AbstractOsintModule::deleteLater);
    skipped 20 lines
  • ■ ■ ■ ■
    sub3suite/src/enums/email/EmailEnum.ui
    skipped 44 lines
    45 45   </property>
    46 46   <item>
    47 47   <property name="text">
    48  - <string>EmailRep</string>
     48 + <string>TruMail</string>
    49 49   </property>
    50 50   </item>
    51 51   </widget>
    skipped 286 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/enums/email/EmailEnum_scan.cpp
    skipped 69 lines
    70 70   /* start scan thread */
    71 71   switch (ui->comboBoxEngine->currentIndex())
    72 72   {
    73  - case 0: // EmailRep
    74  - this->startScanThread(new EmailRep(*m_scanArgs));
     73 + case 0: // TruMail
     74 + this->startScanThread(new TruMail(*m_scanArgs));
    75 75   break;
    76 76   }
    77 77  }
    skipped 3 lines
    81 81   module->startScan(cThread);
    82 82   module->moveToThread(cThread);
    83 83   connect(module, &AbstractOsintModule::resultEnumEmail, this, &EmailEnum::onResult);
     84 + connect(this, &EmailEnum::stopScanThread, module, &AbstractOsintModule::onStop);
     85 + connect(module, &AbstractOsintModule::scanProgress, ui->progressBar, &QProgressBar::setValue);
    84 86   connect(module, &AbstractOsintModule::scanLog, this, &EmailEnum::onScanLog);
    85 87   connect(cThread, &QThread::finished, this, &EmailEnum::onScanThreadEnded);
    86 88   connect(cThread, &QThread::finished, module, &AbstractOsintModule::deleteLater);
    skipped 20 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/enums/ip/IpEnum_scan.cpp
    skipped 95 lines
    96 96   module->startScan(cThread);
    97 97   module->moveToThread(cThread);
    98 98   connect(module, &AbstractOsintModule::resultEnumIP, this, &IpEnum::onResult);
     99 + connect(this, &IpEnum::stopScanThread, module, &AbstractOsintModule::onStop);
     100 + connect(module, &AbstractOsintModule::scanProgress, ui->progressBar, &QProgressBar::setValue);
    99 101   connect(module, &AbstractOsintModule::scanLog, this, &IpEnum::onScanLog);
    100 102   connect(cThread, &QThread::finished, this, &IpEnum::onScanThreadEnded);
    101 103   connect(cThread, &QThread::finished, module, &AbstractOsintModule::deleteLater);
    skipped 7 lines
    109 111   module->startScan(cThread);
    110 112   module->moveToThread(cThread);
    111 113   connect(module, &AbstractOsintModule::resultEnumIP, this, &IpEnum::onResult_reverse);
     114 + connect(this, &IpEnum::stopScanThread, module, &AbstractOsintModule::onStop);
     115 + connect(module, &AbstractOsintModule::scanProgress, ui->progressBar, &QProgressBar::setValue);
    112 116   connect(module, &AbstractOsintModule::scanLog, this, &IpEnum::onScanLog);
    113 117   connect(cThread, &QThread::finished, this, &IpEnum::onScanThreadEnded);
    114 118   connect(cThread, &QThread::finished, module, &AbstractOsintModule::deleteLater);
    skipped 20 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/enums/mx/MXEnum_scan.cpp
    skipped 91 lines
    92 92   module->startScan(cThread);
    93 93   module->moveToThread(cThread);
    94 94   connect(module, &AbstractOsintModule::resultEnumMX, this, &MXEnum::onResult);
     95 + connect(this, &MXEnum::stopScanThread, module, &AbstractOsintModule::onStop);
     96 + connect(module, &AbstractOsintModule::scanProgress, ui->progressBar, &QProgressBar::setValue);
    95 97   connect(module, &AbstractOsintModule::scanLog, this, &MXEnum::onScanLog);
    96 98   connect(cThread, &QThread::finished, this, &MXEnum::onScanThreadEnded);
    97 99   connect(cThread, &QThread::finished, module, &AbstractOsintModule::deleteLater);
    skipped 20 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/enums/ns/NSEnum_scan.cpp
    skipped 91 lines
    92 92   module->startScan(cThread);
    93 93   module->moveToThread(cThread);
    94 94   connect(module, &AbstractOsintModule::resultEnumNS, this, &NSEnum::onResult);
     95 + connect(this, &NSEnum::stopScanThread, module, &AbstractOsintModule::onStop);
     96 + connect(module, &AbstractOsintModule::scanProgress, ui->progressBar, &QProgressBar::setValue);
    95 97   connect(module, &AbstractOsintModule::scanLog, this, &NSEnum::onScanLog);
    96 98   connect(cThread, &QThread::finished, this, &NSEnum::onScanThreadEnded);
    97 99   connect(cThread, &QThread::finished, module, &AbstractOsintModule::deleteLater);
    skipped 20 lines
  • ■ ■ ■ ■ ■
    sub3suite/src/enums/ssl/SSLEnum_scan.cpp
    skipped 69 lines
    70 70   crtsh->moveToThread(cThread);
    71 71   connect(crtsh, &Crtsh::resultRawSSL, this, &SSLEnum::onResult);
    72 72   connect(crtsh, &Crtsh::scanLog, this, &SSLEnum::onScanLog);
     73 + connect(crtsh, &Crtsh::scanProgress, ui->progressBar, &QProgressBar::setValue);
    73 74   connect(this, &SSLEnum::stopScanThread, crtsh, &AbstractOsintModule::onStop);
    74 75   connect(cThread, &QThread::finished, this, &SSLEnum::onScanThreadEnded);
    75 76   connect(cThread, &QThread::finished, crtsh, &Crtsh::deleteLater);
    skipped 21 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/items/DNSItem.cpp
    skipped 126 lines
    127 127   new QStandardItem(srv.at(2).toString())});
    128 128   }
    129 129   
     130 + item->update_items();
     131 + 
    130 132   QJsonObject item_info = dns.value("item_info").toObject();
    131 133   item->comment = item_info["comment"].toString();
    132 134   item->last_modified = item_info["last_modified"].toString();
    skipped 2 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/items/DNSItem.h
    skipped 28 lines
    29 29  }
    30 30   
    31 31  namespace s3s_item {
    32  - 
    33 32  class DNS: public QStandardItem {
    34 33  public:
    35 34   DNS(): QStandardItem(),
    skipped 44 lines
    80 79   QStandardItem *MX;
    81 80   QStandardItem *TXT;
    82 81   QStandardItem *SRV;
    83  - bool _A = false;
    84  - bool _AAAA = false;
    85  - bool _CNAME = false;
    86  - bool _NS = false;
    87  - bool _MX = false;
    88  - bool _TXT = false;
    89  - bool _SRV = false;
     82 + 
     83 + bool A_appended = false;
     84 + bool AAAA_appended = false;
     85 + bool CNAME_appended = false;
     86 + bool TXT_appended = false;
     87 + bool NS_appended = false;
     88 + bool MX_appended = false;
     89 + bool SRV_appended = false;
    90 90   
    91 91   /* summary */
    92 92   QString last_modified;
    93 93   QString comment;
    94 94   
     95 + void update_items(){
     96 + if(A->rowCount() && !A_appended){
     97 + this->appendRow(A); A_appended = true;
     98 + }
     99 + if(AAAA->rowCount() && !AAAA_appended){
     100 + this->appendRow(AAAA); AAAA_appended = true;
     101 + }
     102 + if(CNAME->rowCount() && !CNAME_appended){
     103 + this->appendRow(CNAME); CNAME_appended = true;
     104 + }
     105 + if(TXT->rowCount() && !TXT_appended){
     106 + this->appendRow(TXT); TXT_appended = true;
     107 + }
     108 + if(NS->rowCount() && !NS_appended){
     109 + this->appendRow(NS); NS_appended = true;
     110 + }
     111 + if(MX->rowCount() && !MX_appended){
     112 + this->appendRow(MX); MX_appended = true;
     113 + }
     114 + if(SRV->rowCount() && !SRV_appended){
     115 + this->appendRow(SRV); SRV_appended = true;
     116 + }
     117 + }
     118 + 
    95 119   void addSRV(const s3s_struct::DNS &dns){
    96 120   foreach(const QStringList &srv, dns.SRV)
    97 121   SRV->appendRow({new QStandardItem(srv.at(0)),
    98 122   new QStandardItem(srv.at(1)),
    99 123   new QStandardItem(srv.at(2))});
     124 + 
     125 + this->update_items();
    100 126   
    101 127   /* last modified */
    102 128   last_modified = QDate::currentDate().toString();
    103 129   }
    104 130   
    105 131   void setValues(const s3s_struct::DNS &dns){
    106  - /* append to DNS item */
    107  - if(!dns.A.isEmpty() && !_A){
    108  - this->appendRow(A);
    109  - _A = true;
    110  - }
    111  - if(!dns.AAAA.isEmpty() && !_AAAA){
    112  - this->appendRow(AAAA);
    113  - _AAAA = true;
    114  - }
    115  - if(!dns.CNAME.isEmpty() && !_CNAME){
    116  - this->appendRow(CNAME);
    117  - _CNAME = true;
    118  - }
    119  - if(!dns.NS.isEmpty() && !_NS){
    120  - this->appendRow(NS);
    121  - _NS = true;
    122  - }
    123  - if(!dns.MX.isEmpty() && !_MX){
    124  - this->appendRow(MX);
    125  - _MX = true;
    126  - }
    127  - if(!dns.TXT.isEmpty() && !_TXT){
    128  - this->appendRow(TXT);
    129  - _TXT = true;
    130  - }
    131  - if(!dns.SRV.isEmpty() && !_SRV){
    132  - this->appendRow(SRV);
    133  - _SRV = true;
    134  - }
    135  - 
    136 132   this->setText(dns.dns);
    137 133   
    138 134   /* enter results */
    skipped 33 lines
    172 168   new QStandardItem(txt)});
    173 169   count++;
    174 170   }
    175  - foreach(const QStringList &srv, dns.SRV)
     171 + foreach(const QStringList &srv, dns.SRV){
    176 172   SRV->appendRow({new QStandardItem(srv.at(0)),
    177 173   new QStandardItem(srv.at(1)),
    178 174   new QStandardItem(srv.at(2))});
     175 + }
     176 + 
     177 + this->update_items();
    179 178   
    180 179   /* last modified */
    181 180   last_modified = QDate::currentDate().toString();
    skipped 12 lines
  • ■ ■ ■ ■ ■
    sub3suite/src/items/EmailItem.cpp
    skipped 9 lines
    10 10   
    11 11   email.email = item->text();
    12 12   email.domain = item->domain->text();
    13  - email.address = item->address->text();
    14 13   if(item->free->text() == "true")
    15 14   email.free = true;
    16 15   else
    17 16   email.free = false;
    18 17   
     18 + if(item->hostExists->text() == "true")
     19 + email.hostExists = true;
     20 + else
     21 + email.hostExists = false;
     22 + 
    19 23   if(item->disposable->text() == "true")
    20 24   email.disposable = true;
    21 25   else
    22 26   email.disposable = false;
    23 27   
     28 + if(item->deliverable->text() == "true")
     29 + email.deliverable = true;
     30 + else
     31 + email.deliverable = false;
     32 + 
    24 33   return email;
    25 34  }
    26 35   
    skipped 5 lines
    32 41   QJsonObject email;
    33 42   email.insert("email", item->text());
    34 43   email.insert("domain", item->domain->text());
    35  - email.insert("address", item->address->text());
    36 44   email.insert("free", item->free->text());
     45 + email.insert("hostExists", item->hostExists->text());
    37 46   email.insert("disposable", item->disposable->text());
     47 + email.insert("deliverable", item->deliverable->text());
    38 48   email.insert("item_info", item_info);
    39 49   
    40 50   return email;
    skipped 2 lines
    43 53  void json_to_email(const QJsonObject &email, s3s_item::Email *item){
    44 54   item->setText(email.value("email").toString());
    45 55   item->domain->setText(email.value("domain").toString());
    46  - item->address->setText(email.value("address").toString());
    47 56   item->free->setText(email.value("free").toString());
     57 + item->hostExists->setText(email.value("hostExists").toString());
    48 58   item->disposable->setText(email.value("disposable").toString());
     59 + item->deliverable->setText(email.value("deliverable").toString());
    49 60   
    50 61   QJsonObject item_info = email.value("item_info").toObject();
    51 62   item->comment = item_info["comment"].toString();
    skipped 3 lines
  • ■ ■ ■ ■ ■
    sub3suite/src/items/EmailItem.h
    skipped 18 lines
    19 19  namespace s3s_struct {
    20 20  struct Email {
    21 21   QString email;
    22  - QString address;
    23 22   QString domain;
    24 23   bool free;
     24 + bool hostExists;
    25 25   bool disposable;
     26 + bool deliverable;
    26 27  };
    27 28  }
    28 29   
    skipped 2 lines
    31 32  public:
    32 33   Email(): QStandardItem (),
    33 34   info(new QStandardItem("Info")),
    34  - address(new QStandardItem()),
    35 35   domain(new QStandardItem),
    36 36   free(new QStandardItem),
    37  - disposable(new QStandardItem)
     37 + hostExists(new QStandardItem),
     38 + disposable(new QStandardItem),
     39 + deliverable(new QStandardItem)
    38 40   {
    39 41   this->setForeground(Qt::white);
    40 42   this->setIcon(QIcon(":/img/res/icons/folder.png"));
    skipped 1 lines
    42 44   info->setForeground(Qt::white);
    43 45   info->setIcon(QIcon(":/img/res/icons/folder2.png"));
    44 46   
    45  - info->appendRow({new QStandardItem("Address"), address});
    46 47   info->appendRow({new QStandardItem("Domain"), domain});
    47 48   info->appendRow({new QStandardItem("Free"), free});
     49 + info->appendRow({new QStandardItem("Host Exists"), hostExists});
    48 50   info->appendRow({new QStandardItem("Disposable"), disposable});
     51 + info->appendRow({new QStandardItem("Deliverable"), deliverable});
     52 + 
     53 + info->setWhatsThis(JSON_OBJECT);
    49 54   
    50 55   this->appendRow(info);
    51 56   }
    skipped 3 lines
    55 60   
    56 61  public:
    57 62   QStandardItem *info;
    58  - QStandardItem *address;
    59 63   QStandardItem *domain;
    60 64   QStandardItem *free;
     65 + QStandardItem *hostExists;
    61 66   QStandardItem *disposable;
     67 + QStandardItem *deliverable;
    62 68   
    63 69   /* summary */
    64 70   QString last_modified;
    skipped 2 lines
    67 73   void setValues(const s3s_struct::Email &email){
    68 74   this->setText(email.email);
    69 75   
    70  - address->setText(email.address);
    71 76   domain->setText(email.domain);
    72 77   
    73 78   if(email.free)
    skipped 5 lines
    79 84   disposable->setText("true");
    80 85   else
    81 86   disposable->setText("false");
     87 + 
     88 + if(email.deliverable)
     89 + deliverable->setText("true");
     90 + else
     91 + deliverable->setText("false");
     92 + 
     93 + if(email.hostExists)
     94 + hostExists->setText("true");
     95 + else
     96 + hostExists->setText("false");
    82 97   
    83 98   /* last modified */
    84 99   last_modified = QDate::currentDate().toString();
    skipped 12 lines
  • ■ ■ ■ ■ ■
    sub3suite/src/main.cpp
    skipped 42 lines
    43 43   qRegisterMetaType<s3s_struct::MX>("s3s_struct::MX");
    44 44   qRegisterMetaType<s3s_struct::URL>("s3s_struct::URL");
    45 45   qRegisterMetaType<s3s_struct::HOST>("s3s_struct::HOST");
     46 + qRegisterMetaType<s3s_struct::Email>("s3s_struct::Email");
    46 47   qRegisterMetaType<s3s_struct::Wildcard>("s3s_struct::Wildcard");
    47 48   qRegisterMetaType<QSslCertificate>("QSslCertificate");
    48 49  }
    skipped 180 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/models/ProjectModel_serialization.cpp
    skipped 27 lines
    28 28  }
    29 29   
    30 30  void ProjectModel::saveProject(){
    31  - qDebug() << "Saving the Project To: " << info.path;
     31 + qDebug() << "Saving Project: " << info.path;
    32 32   
    33 33   QFile file(info.path);
    34 34   if(file.open(QIODevice::WriteOnly))
    skipped 21 lines
    56 56  }
    57 57   
    58 58  void ProjectModel::saveProjectCopy(){
    59  - qDebug() << "Saving Project Copy To: " << info.path;
     59 + qDebug() << "Saving Project Copy: " << info.path;
    60 60   
    61 61   QFile file(info.path);
    62 62   if(file.open(QIODevice::WriteOnly))
    skipped 486 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/AbstractOsintModule.h
    skipped 189 lines
    190 190   virtual void replyFinishedEnumMX(QNetworkReply*){} // returns MX records info
    191 191   virtual void replyFinishedEnumNS(QNetworkReply*){} // returns NS records info
    192 192   
     193 + virtual void replyFinishedEnumEmail(QNetworkReply*){} // returns Email info
     194 + 
    193 195   virtual void replyFinishedRawNdjson(QNetworkReply *reply) // returns raw json results from ndjson
    194 196   {
    195 197   if(reply->error())
    skipped 114 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/OsintDefinitions.h
    skipped 63 lines
    64 64  #define OSINT_MODULE_GOOGLECERT "GoogleCert"
    65 65   
    66 66  /* emails */
     67 +#define OSINT_MODULE_DEBOUNCE "Debounce"
     68 +#define OSINT_MODULE_EMAILCRAWLR "EmailCrawlr"
     69 +#define OSINT_MODULE_EMAILFORMAT "EmailFormat"
     70 +#define OSINT_MODULE_EMAILREP "EmailRep"
     71 +#define OSINT_MODULE_HUNTER "Hunter"
     72 +#define OSINT_MODULE_SNOV "Snov"
     73 +#define OSINT_MODULE_TRUMAIL "TruMail"
     74 + 
     75 +/* ip */
     76 +#define OSINT_MODULE_IPFY "Ipfy"
     77 +#define OSINT_MODULE_IPAPI "IpApi"
     78 +#define OSINT_MODULE_IPDATA "IpData"
    67 79   
    68 80  #endif // OSINTDEFINITIONS_H
    69 81   
  • ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/OsintModulesHeaders.h
    skipped 88 lines
    89 89  #include "src/modules/passive/ip/IpGeoLocation.h"
    90 90  #include "src/modules/passive/ip/IpRegistry.h"
    91 91  #include "src/modules/passive/ip/IpStack.h"
     92 +#include "src/modules/passive/ip/Ipfy.h"
    92 93  ///
    93 94  /// email...
    94 95  ///
    skipped 39 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/api/BinaryEdge.h
    skipped 61 lines
    62 62   
    63 63   private:
    64 64   int m_page = 1;
    65  - QString m_key = nullptr;
     65 + QString m_key;
    66 66  };
    67 67   
    68 68  #endif // BINARYEDGE_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/api/C99.h
    skipped 80 lines
    81 81   void replyFinishedSubdomain(QNetworkReply *reply) override;
    82 82   
    83 83   private:
    84  - QString m_key = nullptr;
     84 + QString m_key;
    85 85  };
    86 86   
    87 87  #endif // C99_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/api/Github.h
    skipped 28 lines
    29 29   void replyFinishedSubdomain(QNetworkReply *) override;
    30 30   
    31 31   private:
    32  - QString m_key = nullptr;
     32 + QString m_key;
    33 33  };
    34 34  #endif // GITHUB_H
    35 35   
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/api/Shodan.h
    skipped 55 lines
    56 56   void replyFinishedAsn(QNetworkReply *reply) override;
    57 57   
    58 58   private:
    59  - QString m_key = nullptr;
     59 + QString m_key;
    60 60  };
    61 61  #endif // SHODAN_H
    62 62   
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/api/ThreatBook.h
    skipped 40 lines
    41 41   void replyFinishedIp(QNetworkReply *reply) override;
    42 42   
    43 43   private:
    44  - QString m_key = nullptr;
     44 + QString m_key;
    45 45  };
    46 46   
    47 47  #endif // THREATBOOK_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/api/ViewDns.h
    skipped 65 lines
    66 66   void replyFinishedEnumMX(QNetworkReply *reply) override;
    67 67   
    68 68   private:
    69  - QString m_key = nullptr;
     69 + QString m_key;
    70 70  };
    71 71  #endif // VIEWDNS_H
    72 72   
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/api/WhoisXmlApi.h
    skipped 73 lines
    74 74   void replyFinishedEnumMX(QNetworkReply *reply) override;
    75 75   
    76 76   private:
    77  - QString m_key = nullptr;
     77 + QString m_key;
    78 78  };
    79 79   
    80 80  #endif // WHOISXMLAPI_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/api/ZETAlytics.h
    skipped 25 lines
    26 26   void start() override;
    27 27   
    28 28   private:
    29  - QString m_key = nullptr;
     29 + QString m_key;
    30 30  };
    31 31   
    32 32  #endif // ZETALYTICS_H
    skipped 1 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/email/Debounce.cpp
    skipped 9 lines
    10 10  Debounce::Debounce(ScanArgs args): AbstractOsintModule(args)
    11 11  {
    12 12   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    13  - log.moduleName = "Debounce";
     13 + log.moduleName = OSINT_MODULE_DEBOUNCE;
    14 14   
    15 15   if(args.output_Raw)
    16 16   connect(manager, &s3sNetworkAccessManager::finished, this, &Debounce::replyFinishedRawJson);
    17  - ///
    18  - /// getting api-key...
    19  - ///
    20 17   
    21  - m_key = APIKEY.value("debounce").toString();
    22  -
     18 + /* getting api-key */
     19 + m_key = APIKEY.value(OSINT_MODULE_DEBOUNCE).toString();
    23 20  }
    24 21  Debounce::~Debounce(){
    25 22   delete manager;
    skipped 27 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/email/Debounce.h
    skipped 5 lines
    6 6   
    7 7  namespace ModuleInfo {
    8 8  struct Debounce{
    9  - QString name = "Debounce";
     9 + QString name = OSINT_MODULE_DEBOUNCE;
    10 10   QString url = "https://debounce.io/";
    11 11   QString url_apiDoc = "https://docs.debounce.io/";
    12 12   QString summary = "Email Validation Tool; Simple, Fast & Accurate.";
    skipped 29 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/email/EmailCrawlr.cpp
    skipped 14 lines
    15 15  EmailCrawlr::EmailCrawlr(ScanArgs args): AbstractOsintModule(args)
    16 16  {
    17 17   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    18  - log.moduleName = "EmailCrawlr";
     18 + log.moduleName = OSINT_MODULE_EMAILCRAWLR;
    19 19   
    20 20   if(args.output_Raw)
    21 21   connect(manager, &s3sNetworkAccessManager::finished, this, &EmailCrawlr::replyFinishedRawJson);
    22 22   if(args.output_Email)
    23 23   connect(manager, &s3sNetworkAccessManager::finished, this, &EmailCrawlr::replyFinishedEmail);
    24  - ///
    25  - /// getting api-key...
    26  - ///
    27 24   
    28  - m_key = APIKEY.value("emailcrawlr").toString();
    29  -
     25 + /* getting api-key */
     26 + m_key = APIKEY.value(OSINT_MODULE_EMAILCRAWLR).toString();
    30 27  }
    31 28  EmailCrawlr::~EmailCrawlr(){
    32 29   delete manager;
    skipped 26 lines
    59 56   }
    60 57   
    61 58   if(args.input_Domain){
    62  - url.setUrl("https://api.emailcrawlr.com/v2/domain?domain="+target);
    63  - request.setUrl(url);
    64  - manager->get(request);
    65  - activeRequests++;
     59 + if(args.output_Email){
     60 + url.setUrl("https://api.emailcrawlr.com/v2/domain?domain="+target);
     61 + request.setUrl(url);
     62 + manager->get(request);
     63 + activeRequests++;
     64 + }
    66 65   }
    67 66  }
    68 67   
    skipped 18 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/email/EmailCrawlr.h
    skipped 5 lines
    6 6   
    7 7  namespace ModuleInfo {
    8 8  struct EmailCrawlr{
    9  - QString name = "EmailCrawlr";
     9 + QString name = OSINT_MODULE_EMAILCRAWLR;
    10 10   QString url = "https://emailcrawlr.com/";
    11 11   QString url_apiDoc = "https://emailcrawlr.com/docs";
    12 12   QString summary = "By using the EmailCrawlr JSON API you can: Get key information about company websites. Find all email addresses associated with a domain. "
    skipped 32 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/email/EmailFormat.cpp
    skipped 8 lines
    9 9  EmailFormat::EmailFormat(ScanArgs args): AbstractOsintModule(args)
    10 10  {
    11 11   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    12  - log.moduleName = "EmailFormat";
     12 + log.moduleName = OSINT_MODULE_EMAILFORMAT;
    13 13   
    14 14   if(args.output_Raw)
    15 15   connect(manager, &s3sNetworkAccessManager::finished, this, &EmailFormat::replyFinishedRawJson);
    16  - ///
    17  - /// getting api-key...
    18  - ///
    19 16   
    20  - m_key = APIKEY.value("emailformat").toString();
    21  -
     17 + /* getting api-key */
     18 + m_key = APIKEY.value(OSINT_MODULE_EMAILFORMAT).toString();
    22 19  }
    23 20  EmailFormat::~EmailFormat(){
    24 21   delete manager;
    skipped 26 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/email/EmailFormat.h
    skipped 5 lines
    6 6   
    7 7  namespace ModuleInfo {
    8 8  struct EmailFormat{
    9  - QString name = "EmailFormat";
     9 + QString name = OSINT_MODULE_EMAILFORMAT;
    10 10   QString url = "https://www.email-format.com/";
    11 11   QString url_apiDoc = "https://www.email-format.com/i/api_v2/";
    12 12   QString summary = "Save time and energy - find the email address formats in use at thousands of companies.";
    skipped 30 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/email/EmailRep.cpp
    skipped 6 lines
    7 7  EmailRep::EmailRep(ScanArgs args): AbstractOsintModule(args)
    8 8  {
    9 9   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    10  - log.moduleName = "EmailRep";
     10 + log.moduleName = OSINT_MODULE_EMAILREP;
    11 11   
    12 12   if(args.output_Raw)
    13 13   connect(manager, &s3sNetworkAccessManager::finished, this, &EmailRep::replyFinishedRawJson);
    14  - ///
    15  - /// getting api-key...
    16  - ///
    17 14   
    18  - m_key = APIKEY.value("emailrep").toString();
    19  -
     15 + /* getting api-key */
     16 + m_key = APIKEY.value(OSINT_MODULE_EMAILREP).toString();
    20 17  }
    21 18  EmailRep::~EmailRep(){
    22 19   delete manager;
    skipped 21 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/email/EmailRep.h
    skipped 4 lines
    5 5   
    6 6  namespace ModuleInfo {
    7 7  struct EmailRep{
    8  - QString name = "EmailRep";
     8 + QString name = OSINT_MODULE_EMAILREP;
    9 9   QString url = "https://emailrep.io/";
    10 10   QString url_apiDoc = "https://docs.emailrep.io/";
    11 11   QString summary = "EmailRep is a system of crawlers, scanners and enrichment services that collects data on email addresses, domains, and internet personas.";
    skipped 23 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/email/Hunter.cpp
    skipped 13 lines
    14 14  Hunter::Hunter(ScanArgs args): AbstractOsintModule(args)
    15 15  {
    16 16   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    17  - log.moduleName = "Hunter";
     17 + log.moduleName = OSINT_MODULE_HUNTER;
    18 18   
    19 19   if(args.output_Raw)
    20 20   connect(manager, &s3sNetworkAccessManager::finished, this, &Hunter::replyFinishedRawJson);
    21 21   if(args.output_Email)
    22 22   connect(manager, &s3sNetworkAccessManager::finished, this, &Hunter::replyFinishedEmail);
    23  - ///
    24  - /// getting api-key...
    25  - ///
    26 23   
    27  - m_key = APIKEY.value("hunter").toString();
    28  -
     24 + /* getting api-key */
     25 + m_key = APIKEY.value(OSINT_MODULE_HUNTER).toString();
    29 26  }
    30 27  Hunter::~Hunter(){
    31 28   delete manager;
    skipped 45 lines
    77 74   return;
    78 75   }
    79 76   
    80  - QUERY_TYPE = reply->property(REQUEST_TYPE).toInt();
    81 77   QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
    82 78   QJsonObject data = document["data"].toObject();
    83 79   
    84  - if(QUERY_TYPE == DOMAIN_SEARCH){
    85  - /*
    86  - * QString OrganizationName = data["organization"].toString();
    87  - */
    88  - QJsonArray emailList = data["emails"].toArray();
    89  - foreach(const QJsonValue &value, emailList){
    90  - QString Email = value["value"].toString();
    91  - emit resultEmail(Email);
     80 + switch (reply->property(REQUEST_TYPE).toInt())
     81 + {
     82 + case DOMAIN_SEARCH:
     83 + foreach(const QJsonValue &value, data["emails"].toArray()){
     84 + emit resultEmail(value["value"].toString());
    92 85   log.resultsCount++;
    93  - /*
    94  - * getting where the email was extracted from
    95  - *
    96  - QStringList uriSources;
    97  - foreach(const QJsonValue &sources, value["sources"].toArray())
    98  - uriSources.append(value["uri"].toString());
    99  - *
    100  - */
    101 86   }
    102 87   }
     88 + 
    103 89   end(reply);
    104 90  }
    105 91   
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/email/Hunter.h
    skipped 5 lines
    6 6   
    7 7  namespace ModuleInfo {
    8 8  struct Hunter{
    9  - QString name = "Hunter";
     9 + QString name = OSINT_MODULE_HUNTER;
    10 10   QString url = "https://hunter.io/";
    11 11   QString url_apiDoc = "https://hunter.io/api-documentation/";
    12 12   QString summary = "Hunter lets you find professional email addresses in seconds and \n"
    skipped 35 lines
  • ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/email/Snov.cpp
    skipped 10 lines
    11 11  #define GET_PROFILE_WITH_EMAIL 4
    12 12   
    13 13  /*
    14  - * still many feautures arent implemented
     14 + * Many api not implemented
    15 15   */
    16 16  Snov::Snov(ScanArgs args): AbstractOsintModule(args)
    17 17  {
    18 18   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    19  - log.moduleName = "Snov";
     19 + log.moduleName = OSINT_MODULE_SNOV;
    20 20   
    21 21   if(args.output_Raw)
    22 22   connect(manager, &s3sNetworkAccessManager::finished, this, &Snov::replyFinishedRawJson);
    23  - ///
    24  - /// getting api-key...
    25  - ///
     23 + if(args.output_Email)
     24 + connect(manager, &s3sNetworkAccessManager::finished, this, &Snov::replyFinishedEmail);
    26 25   
    27  - m_key = APIKEY.value("snov").toString();
    28  -
     26 + /* getting api-key */
     27 + m_key = APIKEY.value(OSINT_MODULE_SNOV).toString();
    29 28  }
    30 29  Snov::~Snov(){
    31 30   delete manager;
    skipped 48 lines
    80 79   }
    81 80   activeRequests++;
    82 81   }
     82 + 
     83 + if(args.input_Domain){
     84 + if(args.output_Email){
     85 + url.setUrl("https://api.snov.io/v2/domain-emails-with-info?type=all&access_token="+m_key+"&domain="+target);
     86 + request.setAttribute(QNetworkRequest::User, DOMAIN_SEARCH);
     87 + request.setUrl(url);
     88 + manager->get(request);
     89 + activeRequests++;
     90 + }
     91 + }
    83 92  }
    84 93   
    85 94  void Snov::replyFinishedEmail(QNetworkReply *reply){
    86  - Q_UNUSED(reply);
     95 + if(reply->error()){
     96 + this->onError(reply);
     97 + return;
     98 + }
     99 + 
     100 + QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
     101 + 
     102 + switch (reply->property(REQUEST_TYPE).toInt())
     103 + {
     104 + case DOMAIN_SEARCH:
     105 + foreach(const QJsonValue &email, document.object()["emails"].toArray()){
     106 + emit resultEmail(email["email"].toString());
     107 + log.resultsCount++;
     108 + }
     109 + }
     110 + 
     111 + end(reply);
    87 112  }
    88 113   
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/email/Snov.h
    skipped 5 lines
    6 6   
    7 7  namespace ModuleInfo {
    8 8  struct Snov{
    9  - QString name = "Snov";
     9 + QString name = OSINT_MODULE_SNOV;
    10 10   QString url = "https://snov.io/";
    11 11   QString url_apiDoc = "https://snov.io/api";
    12 12   QString summary = "Snov.io API allows to get a list of all emails from a particular domain, find email addresses by name and domain, verify emails, add prospects to a list, change a recipient's status and more."
    skipped 35 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/email/TruMail.cpp
    skipped 5 lines
    6 6  TruMail::TruMail(ScanArgs args): AbstractOsintModule(args)
    7 7  {
    8 8   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    9  - log.moduleName = "TruMail";
     9 + log.moduleName = OSINT_MODULE_TRUMAIL;
    10 10   
    11 11   if(args.output_Raw)
    12 12   connect(manager, &s3sNetworkAccessManager::finished, this, &TruMail::replyFinishedRawJson);
     13 + if(args.output_EnumEmail)
     14 + connect(manager, &s3sNetworkAccessManager::finished, this, &TruMail::replyFinishedEnumEmail);
    13 15  }
    14 16  TruMail::~TruMail(){
    15 17   delete manager;
    skipped 13 lines
    29 31   manager->get(request);
    30 32   activeRequests++;
    31 33   }
     34 + 
     35 + if(args.output_EnumEmail){
     36 + url.setUrl("https://api.trumail.io/v2/lookups/json?email="+target);
     37 + request.setUrl(url);
     38 + manager->get(request);
     39 + activeRequests++;
     40 + }
     41 +}
     42 + 
     43 +void TruMail::replyFinishedEnumEmail(QNetworkReply *reply){
     44 + if(reply->error()){
     45 + this->onError(reply);
     46 + return;
     47 + }
     48 + 
     49 + QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
     50 + QJsonObject mainObj = document.object();
     51 + 
     52 + if(mainObj["hostExists"].toBool()){
     53 + s3s_struct::Email email;
     54 + email.email = target;
     55 + email.domain = mainObj["domain"].toString();
     56 + email.free = mainObj["free"].toBool();
     57 + email.hostExists = mainObj["hostExists"].toBool();
     58 + email.disposable = mainObj["disposable"].toBool();
     59 + email.deliverable = mainObj["deliverable"].toBool();
     60 + 
     61 + emit resultEnumEmail(email);
     62 + }
     63 + 
     64 + end(reply);
    32 65  }
    33 66   
  • ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/email/TruMail.h
    skipped 5 lines
    6 6   
    7 7  namespace ModuleInfo {
    8 8  struct TruMail{
    9  - QString name = "TruMail";
     9 + QString name = OSINT_MODULE_TRUMAIL;
    10 10   QString url = "https://trumail.io/";
    11 11   QString url_apiDoc = "https://trumail.io/documentation";
    12 12   QString summary = "Prevent bounced emails and low-quality users with FREE professional grade email verification";
    skipped 13 lines
    26 26   
    27 27   public slots:
    28 28   void start() override;
     29 + void replyFinishedEnumEmail(QNetworkReply *reply) override;
    29 30   
    30 31   private:
    31 32   QString m_key;
    skipped 4 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/IpApi.cpp
    skipped 13 lines
    14 14  IpApi::IpApi(ScanArgs args): AbstractOsintModule(args)
    15 15  {
    16 16   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    17  - log.moduleName = "IpApi";
     17 + log.moduleName = OSINT_MODULE_IPAPI;
    18 18   
    19 19   if(args.output_Raw)
    20 20   connect(manager, &s3sNetworkAccessManager::finished, this, &IpApi::replyFinishedRawJson);
    21 21   if(args.output_EnumIP)
    22 22   connect(manager, &s3sNetworkAccessManager::finished, this, &IpApi::replyFinishedEnumIP);
    23  - ///
    24  - /// get api key...
    25  - ///
    26 23   
    27  - m_key = APIKEY.value("ipapi").toString();
    28  -
     24 + /* get api key */
     25 + m_key = APIKEY.value(OSINT_MODULE_IPAPI).toString();
    29 26  }
    30 27  IpApi::~IpApi(){
    31 28   delete manager;
    skipped 94 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/IpApi.h
    skipped 5 lines
    6 6   
    7 7  namespace ModuleInfo {
    8 8  struct IpApi{
    9  - QString name = "IpApi";
     9 + QString name = OSINT_MODULE_IPAPI;
    10 10   QString url = "https://ipapi.com/";
    11 11   QString url_apiDoc = "https://ipapi.com/documentation";
    12 12   QString summary = "ipapi provides an easy-to-use API interface allowing customers to look various pieces "
    skipped 21 lines
    34 34   void replyFinishedEnumIP(QNetworkReply *) override;
    35 35   
    36 36   private:
    37  - QString m_key = nullptr;
     37 + QString m_key;
    38 38  };
    39 39   
    40 40  #endif // IPAPI_H
    skipped 1 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/IpData.cpp
    skipped 12 lines
    13 13  IpData::IpData(ScanArgs args): AbstractOsintModule(args)
    14 14  {
    15 15   manager = new s3sNetworkAccessManager(this, args.config->timeout);
    16  - log.moduleName = "IpData";
     16 + log.moduleName = OSINT_MODULE_IPDATA;
    17 17   
    18 18   if(args.output_Raw)
    19 19   connect(manager, &s3sNetworkAccessManager::finished, this, &IpData::replyFinishedRawJson);
    20  - ///
    21  - /// get api key...
    22  - ///
    23 20   
    24  - m_key = APIKEY.value("ipdata").toString();
    25  -
     21 + /* get api key */
     22 + m_key = APIKEY.value(OSINT_MODULE_IPDATA).toString();
    26 23  }
    27 24  IpData::~IpData(){
    28 25   delete manager;
    skipped 31 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/IpData.h
    skipped 5 lines
    6 6   
    7 7  namespace ModuleInfo {
    8 8  struct IpData{
    9  - QString name = "IpData";
     9 + QString name = OSINT_MODULE_IPDATA;
    10 10   QString url = "https://ipdata.co/";
    11 11   QString url_apiDoc = "https://docs.ipdata.co/";
    12 12   QString summary = "ipdata provides an IP Address Intelligence API that allows you to lookup the approximate location of any IP Address. "
    skipped 24 lines
    37 37   void start() override;
    38 38   
    39 39   private:
    40  - QString m_key = nullptr;
     40 + QString m_key;
    41 41  };
    42 42   
    43 43  #endif // IPDATA_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/IpGeoLocation.h
    skipped 28 lines
    29 29   void start() override;
    30 30   
    31 31   private:
    32  - QString m_key = nullptr;
     32 + QString m_key;
    33 33  };
    34 34   
    35 35  #endif // IPGEOLOCATION_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/IpInfo.h
    skipped 37 lines
    38 38   void replyFinishedEnumIP(QNetworkReply *reply) override;
    39 39   
    40 40   private:
    41  - QString m_key = nullptr;
     41 + QString m_key;
    42 42  };
    43 43   
    44 44  #endif // IPINFO_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/IpRegistry.h
    skipped 33 lines
    34 34   void start() override;
    35 35   
    36 36   private:
    37  - QString m_key = nullptr;
     37 + QString m_key;
    38 38  };
    39 39   
    40 40  #endif // IPREGISTRY_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/IpStack.h
    skipped 31 lines
    32 32   void start() override;
    33 33   
    34 34   private:
    35  - QString m_key = nullptr;
     35 + QString m_key;
    36 36  };
    37 37   
    38 38  #endif // IPSTACK_H
    skipped 1 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/Ipfy.cpp
     1 +#include "Ipfy.h"
     2 +#include "src/utils/Config.h"
     3 + 
     4 +#define IP_GEOLOCATION_DOMAIN 0
     5 +#define IP_GEOLOCATION_EMAIL 1
     6 +#define IP_GEOLOCATION_IP 2
     7 +#define PUBLIC_IPV4 3
     8 +#define PUBLIC_IPV6 4
     9 + 
     10 +Ipfy::Ipfy(ScanArgs args): AbstractOsintModule(args)
     11 +{
     12 + manager = new s3sNetworkAccessManager(this, args.config->timeout);
     13 + log.moduleName = OSINT_MODULE_IPFY;
     14 + 
     15 + if(args.output_Raw)
     16 + connect(manager, &s3sNetworkAccessManager::finished, this, &Ipfy::replyFinishedRawJson);
     17 + if(args.output_Hostname)
     18 + connect(manager, &s3sNetworkAccessManager::finished, this, &Ipfy::replyFinishedSubdomain);
     19 + if(args.output_IP)
     20 + connect(manager, &s3sNetworkAccessManager::finished, this, &Ipfy::replyFinishedIp);
     21 + if(args.output_ASN)
     22 + connect(manager, &s3sNetworkAccessManager::finished, this, &Ipfy::replyFinishedAsn);
     23 + if(args.output_CIDR)
     24 + connect(manager, &s3sNetworkAccessManager::finished, this, &Ipfy::replyFinishedCidr);
     25 + 
     26 + /* get api key */
     27 + m_key = APIKEY.value(OSINT_MODULE_IPFY).toString();
     28 +}
     29 +Ipfy::~Ipfy(){
     30 + delete manager;
     31 +}
     32 + 
     33 +void Ipfy::start(){
     34 + QNetworkRequest request;
     35 + 
     36 + QUrl url;
     37 + if(args.output_Raw){
     38 + switch (args.raw_query_id) {
     39 + case PUBLIC_IPV4:
     40 + url.setUrl("https://api.ipify.org?format=json");
     41 + break;
     42 + case PUBLIC_IPV6:
     43 + url.setUrl("https://api64.ipify.org?format=json");
     44 + break;
     45 + case IP_GEOLOCATION_DOMAIN:
     46 + url.setUrl("https://geo.ipify.org/api/v2/country?apiKey="+m_key+"&domain="+target);
     47 + break;
     48 + case IP_GEOLOCATION_EMAIL:
     49 + url.setUrl("https://geo.ipify.org/api/v2/country?apiKey="+m_key+"&email="+target);
     50 + break;
     51 + case IP_GEOLOCATION_IP:
     52 + url.setUrl("https://geo.ipify.org/api/v2/country?apiKey="+m_key+"&ipAddress="+target);
     53 + break;
     54 + }
     55 + request.setUrl(url);
     56 + manager->get(request);
     57 + activeRequests++;
     58 + return;
     59 + }
     60 + 
     61 + if(args.input_IP){
     62 + if(args.output_Hostname || args.output_ASN || args.output_CIDR){
     63 + url.setUrl("https://geo.ipify.org/api/v2/country?apiKey="+m_key+"&ipAddress="+target);
     64 + request.setUrl(url);
     65 + manager->get(request);
     66 + activeRequests++;
     67 + }
     68 + }
     69 + 
     70 + if(args.input_Domain){
     71 + if(args.output_IP || args.output_Hostname || args.output_ASN || args.output_CIDR){
     72 + url.setUrl("https://geo.ipify.org/api/v2/country?apiKey="+m_key+"&domain="+target);
     73 + request.setUrl(url);
     74 + manager->get(request);
     75 + activeRequests++;
     76 + }
     77 + }
     78 +}
     79 + 
     80 +void Ipfy::replyFinishedSubdomain(QNetworkReply *reply){
     81 + if(reply->error()){
     82 + this->onError(reply);
     83 + return;
     84 + }
     85 + 
     86 + QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
     87 + QJsonObject mainObj = document.object();
     88 + 
     89 + foreach(const QJsonValue &domain, mainObj["domains"].toArray()){
     90 + emit resultSubdomain(domain.toString());
     91 + log.resultsCount++;
     92 + }
     93 + 
     94 + end(reply);
     95 +}
     96 + 
     97 +void Ipfy::replyFinishedAsn(QNetworkReply *reply){
     98 + if(reply->error()){
     99 + this->onError(reply);
     100 + return;
     101 + }
     102 + 
     103 + QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
     104 + QJsonObject as = document.object()["as"].toObject();
     105 + 
     106 + emit resultASN(QString::number(as["asn"].toInt()), as["name"].toString());
     107 + log.resultsCount++;
     108 + 
     109 + end(reply);
     110 +}
     111 + 
     112 +void Ipfy::replyFinishedIp(QNetworkReply *reply){
     113 + if(reply->error()){
     114 + this->onError(reply);
     115 + return;
     116 + }
     117 + 
     118 + QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
     119 + QJsonObject mainObj = document.object();
     120 + 
     121 + emit resultIP(mainObj["ip"].toString());
     122 + log.resultsCount++;
     123 + 
     124 + end(reply);
     125 +}
     126 + 
     127 +void Ipfy::replyFinishedCidr(QNetworkReply *reply){
     128 + if(reply->error()){
     129 + this->onError(reply);
     130 + return;
     131 + }
     132 + 
     133 + QJsonDocument document = QJsonDocument::fromJson(reply->readAll());
     134 + QJsonObject as = document.object()["as"].toObject();
     135 + 
     136 + emit resultCIDR(as["route"].toString());
     137 + log.resultsCount++;
     138 + 
     139 + end(reply);
     140 +}
     141 + 
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/modules/passive/ip/Ipfy.h
     1 +#ifndef IPFY_H
     2 +#define IPFY_H
     3 + 
     4 +#include "../AbstractOsintModule.h"
     5 + 
     6 + 
     7 +namespace ModuleInfo {
     8 +struct Ipfy{
     9 + QString name = OSINT_MODULE_IPFY;
     10 + QString url = "https://www.ipify.org/";
     11 + QString url_apiDoc = "https://geo.ipify.org/docs";
     12 + QString summary = "Ipfy provides an easy-to-use API interface allowing customers to look various pieces "
     13 + "of information IPv4 and IPv6 addresses are associated with";
     14 + 
     15 + QMap<QString, QStringList> flags = {{"Public Ipv4",
     16 + {PLACEHOLDERTEXT_NONE, "A public IP API service. for IPv4"}},
     17 + {"Public Ipv6",
     18 + {PLACEHOLDERTEXT_NONE, "A public IP API service. for IPv6"}},
     19 + {"IP Geolocation by Domain",
     20 + {PLACEHOLDERTEXT_DOMAIN, "IP Geolocation API allows you to locate and identify website visitors by IP address. "
     21 + "IP location helps prevent fraud, customize web experiences, and maintain regulatory compliance."}},
     22 + {"IP Geolocation by Email",
     23 + {PLACEHOLDERTEXT_EMAIL, "IP Geolocation API allows you to locate and identify website visitors by IP address. "
     24 + "IP location helps prevent fraud, customize web experiences, and maintain regulatory compliance."}},
     25 + {"IP Geolocation by IP",
     26 + {PLACEHOLDERTEXT_IP, "IP Geolocation API allows you to locate and identify website visitors by IP address. "
     27 + "IP location helps prevent fraud, customize web experiences, and maintain regulatory compliance."}}};
     28 + 
     29 + QMap<int, QList<int>> input_output = {{IN_DOMAIN,
     30 + {OUT_IP, OUT_ASN, OUT_CIDR, OUT_SUBDOMAIN}},
     31 + {IN_IP,
     32 + {OUT_ASN, OUT_CIDR, OUT_SUBDOMAIN}}};
     33 +};
     34 +}
     35 + 
     36 +class Ipfy: public AbstractOsintModule{
     37 + 
     38 + public:
     39 + Ipfy(ScanArgs args);
     40 + ~Ipfy() override;
     41 + 
     42 + public slots:
     43 + void start() override;
     44 + void replyFinishedSubdomain(QNetworkReply *reply) override;
     45 + void replyFinishedAsn(QNetworkReply *reply) override;
     46 + void replyFinishedIp(QNetworkReply *reply) override;
     47 + void replyFinishedCidr(QNetworkReply *reply) override;
     48 + 
     49 + private:
     50 + QString m_key;
     51 +};
     52 + 
     53 +#endif // IPFY_H
     54 + 
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/mal/AbuseIPDB.h
    skipped 32 lines
    33 33   void start() override;
    34 34   
    35 35   private:
    36  - QString m_key = nullptr;
     36 + QString m_key;
    37 37  };
    38 38   
    39 39  #endif // ABUSEIPDB_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/mal/HybridAnalysis.h
    skipped 27 lines
    28 28   void start() override;
    29 29   
    30 30   private:
    31  - QString m_key = nullptr;
     31 + QString m_key;
    32 32  };
    33 33   
    34 34  #endif // HYBRIDANALYSIS_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/mal/IpQualityScore.h
    skipped 37 lines
    38 38   void start() override;
    39 39   
    40 40   private:
    41  - QString m_key = nullptr;
     41 + QString m_key;
    42 42  };
    43 43   
    44 44  #endif // IPQUALITYSCORE_H
    skipped 1 lines
  • ■ ■ ■ ■
    sub3suite/src/modules/passive/mal/LeakLookup.h
    skipped 33 lines
    34 34   void start() override;
    35 35   
    36 36   private:
    37  - QString m_key = nullptr;
     37 + QString m_key;
    38 38  };
    39 39   
    40 40  #endif // LEAKLOOKUP_H
    skipped 1 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/project/Project_actions.cpp
    skipped 284 lines
    285 285   for(int i = 0; i != proxyModel->rowCount(); ++i){
    286 286   QString name(proxyModel->index(i, 0).data().toString());
    287 287   QString target(proxyModel->index(i, 1).data().toString());
    288  - QString port(proxyModel->index(i, 1).data().toString());
     288 + QString port(proxyModel->index(i, 2).data().toString());
    289 289   
    290 290   if(!target.isEmpty())
    291 291   name.append(",").append(target);
    skipped 328 lines
    620 620   for(int i = 0; i != proxyModel->rowCount(); ++i){
    621 621   QString name(proxyModel->index(i, 0).data().toString());
    622 622   QString target(proxyModel->index(i, 1).data().toString());
    623  - QString port(proxyModel->index(i, 1).data().toString());
     623 + QString port(proxyModel->index(i, 2).data().toString());
    624 624   
    625 625   if(!target.isEmpty())
    626 626   name.append(",").append(target);
    skipped 501 lines
    1128 1128   case ExplorerType::activeURL:
    1129 1129   case ExplorerType::passive_URL:
    1130 1130   for(int i = 0; i < proxyModel->rowCount(); i++)
    1131  - url.insert(proxyModel->index(i, 1).data().toString());
     1131 + url.insert(proxyModel->index(i, 0).data().toString());
    1132 1132   break;
    1133 1133   }
    1134 1134   
    skipped 21 lines
    1156 1156   switch (ui->treeViewTree->property(SITEMAP_TYPE).toInt()) {
    1157 1157   case ExplorerType::passive_Email:
    1158 1158   for(int i = 0; i < proxyModel->rowCount(); i++)
    1159  - emails.insert(proxyModel->index(i, 1).data().toString());
     1159 + emails.insert(proxyModel->index(i, 0).data().toString());
    1160 1160   break;
    1161 1161   case ExplorerType::enum_ASN:
    1162 1162   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 39 lines
    1202 1202   switch (ui->treeViewTree->property(SITEMAP_TYPE).toInt()) {
    1203 1203   case ExplorerType::passive_ASN:
    1204 1204   for(int i = 0; i < proxyModel->rowCount(); i++)
    1205  - asn.insert(proxyModel->index(i, 1).data().toString());
     1205 + asn.insert(proxyModel->index(i, 0).data().toString());
    1206 1206   break;
    1207 1207   case ExplorerType::enum_ASN:
    1208 1208   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 35 lines
    1244 1244   switch (ui->treeViewTree->property(SITEMAP_TYPE).toInt()) {
    1245 1245   case ExplorerType::passive_CIDR:
    1246 1246   for(int i = 0; i < proxyModel->rowCount(); i++)
    1247  - cidr.insert(proxyModel->index(i, 1).data().toString());
     1247 + cidr.insert(proxyModel->index(i, 0).data().toString());
    1248 1248   break;
    1249 1249   case ExplorerType::enum_NS:
    1250 1250   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 25 lines
    1276 1276   switch (ui->treeViewTree->property(SITEMAP_TYPE).toInt()) {
    1277 1277   case ExplorerType::passive_SSL:
    1278 1278   for(int i = 0; i < proxyModel->rowCount(); i++)
    1279  - ssl.insert(proxyModel->index(i, 1).data().toString());
     1279 + ssl.insert(proxyModel->index(i, 0).data().toString());
    1280 1280   break;
    1281 1281   }
    1282 1282   
    skipped 18 lines
    1301 1301   case ExplorerType::activeDNS_NS:
    1302 1302   case ExplorerType::passive_NS:
    1303 1303   for(int i = 0; i < proxyModel->rowCount(); i++)
    1304  - ns.insert(proxyModel->index(i, 1).data().toString());
     1304 + ns.insert(proxyModel->index(i, 0).data().toString());
    1305 1305   break;
    1306 1306   case ExplorerType::activeDNS:
    1307 1307   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 43 lines
    1351 1351   case ExplorerType::activeDNS_MX:
    1352 1352   case ExplorerType::passive_MX:
    1353 1353   for(int i = 0; i < proxyModel->rowCount(); i++)
    1354  - mx.insert(proxyModel->index(i, 1).data().toString());
     1354 + mx.insert(proxyModel->index(i, 0).data().toString());
    1355 1355   break;
    1356 1356   case ExplorerType::activeDNS:
    1357 1357   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 81 lines
    1439 1439   switch (ui->treeViewTree->property(SITEMAP_TYPE).toInt()) {
    1440 1440   case ExplorerType::passive_Email:
    1441 1441   for(int i = 0; i < proxyModel->rowCount(); i++)
    1442  - emails.insert(proxyModel->index(i, 1).data().toString());
     1442 + emails.insert(proxyModel->index(i, 0).data().toString());
    1443 1443   break;
    1444 1444   case ExplorerType::enum_ASN:
    1445 1445   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 29 lines
    1475 1475   switch (ui->treeViewTree->property(SITEMAP_TYPE).toInt()) {
    1476 1476   case ExplorerType::passive_ASN:
    1477 1477   for(int i = 0; i < proxyModel->rowCount(); i++)
    1478  - asn.insert(proxyModel->index(i, 1).data().toString());
     1478 + asn.insert(proxyModel->index(i, 0).data().toString());
    1479 1479   break;
    1480 1480   case ExplorerType::enum_ASN:
    1481 1481   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 25 lines
    1507 1507   switch (ui->treeViewTree->property(SITEMAP_TYPE).toInt()) {
    1508 1508   case ExplorerType::passive_CIDR:
    1509 1509   for(int i = 0; i < proxyModel->rowCount(); i++)
    1510  - cidr.insert(proxyModel->index(i, 1).data().toString());
     1510 + cidr.insert(proxyModel->index(i, 0).data().toString());
    1511 1511   break;
    1512 1512   case ExplorerType::enum_NS:
    1513 1513   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 15 lines
    1529 1529   switch (ui->treeViewTree->property(SITEMAP_TYPE).toInt()) {
    1530 1530   case ExplorerType::passive_SSL:
    1531 1531   for(int i = 0; i < proxyModel->rowCount(); i++)
    1532  - ssl.insert(proxyModel->index(i, 1).data().toString());
     1532 + ssl.insert(proxyModel->index(i, 0).data().toString());
    1533 1533   break;
    1534 1534   }
    1535 1535   
    skipped 8 lines
    1544 1544   case ExplorerType::activeDNS_NS:
    1545 1545   case ExplorerType::passive_NS:
    1546 1546   for(int i = 0; i < proxyModel->rowCount(); i++)
    1547  - ns.insert(proxyModel->index(i, 1).data().toString());
     1547 + ns.insert(proxyModel->index(i, 0).data().toString());
    1548 1548   break;
    1549 1549   case ExplorerType::activeDNS:
    1550 1550   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 17 lines
    1568 1568   case ExplorerType::activeDNS_MX:
    1569 1569   case ExplorerType::passive_MX:
    1570 1570   for(int i = 0; i < proxyModel->rowCount(); i++)
    1571  - mx.insert(proxyModel->index(i, 1).data().toString());
     1571 + mx.insert(proxyModel->index(i, 0).data().toString());
    1572 1572   break;
    1573 1573   case ExplorerType::activeDNS:
    1574 1574   for(int i = 0; i < proxyModel->rowCount(); i++){
    skipped 503 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/src/project/Project_contextmenu.cpp
    skipped 391 lines
    392 392   menu_send->addSeparator();
    393 393   menu_send->addAction(tr("Send ASN to ASN-Enum"), this, [=](){this->action_send_asn();})->setIcon(QIcon(":/img/res/icons/asn.png"));
    394 394   break;
     395 + case ExplorerType::passive_CIDR:
     396 + menu_send->addAction(tr("Send CIDR to OSINT"), this, [=](){this->action_send_cidr(ENGINE::OSINT);})->setIcon(QIcon(":/img/res/icons/cidr.png"));
     397 + menu_send->addAction(tr("Send CIDR to RAW"), this, [=](){this->action_send_cidr(ENGINE::RAW);})->setIcon(QIcon(":/img/res/icons/cidr.png"));
     398 + menu_send->addSeparator();
     399 + menu_send->addAction(tr("Send CIDR to CIDR-Enum"), this, [=](){this->action_send_cidr();})->setIcon(QIcon(":/img/res/icons/cidr.png"));
     400 + break;
    395 401   default:
    396 402   break;
    397 403   }
    skipped 94 lines
  • ■ ■ ■ ■ ■
    sub3suite/src/project/Project_slots.cpp
    skipped 126 lines
    127 127   }
    128 128   
    129 129   if(parent_index == model->explorer->activeSSL->index()){
     130 + a_send.setDisabled(true);
    130 131   a_expand.setDisabled(true);
    131 132   a_collapse.setDisabled(true);
    132 133   
    skipped 511 lines
  • ■ ■ ■ ■ ■ ■
    sub3suite/sub3suite.pro
    skipped 130 lines
    131 131   src/modules/passive/api/Otx.cpp \
    132 132   src/modules/passive/api/PassiveTotal.cpp \
    133 133   src/modules/passive/api/Robtex.cpp \
     134 + src/modules/passive/ip/Ipfy.cpp \
    134 135   src/project/Project_contextmenu.cpp \
    135 136   src/models/ProjectModel.cpp \
    136 137   src/models/ProjectModel_serialization.cpp \
    skipped 206 lines
    343 344   src/modules/passive/ip/IpGeoLocation.h \
    344 345   src/modules/passive/ip/IpRegistry.h \
    345 346   src/modules/passive/ip/IpStack.h \
     347 + src/modules/passive/ip/Ipfy.h \
    346 348   src/modules/passive/mal/AbuseIPDB.h \
    347 349   src/modules/passive/archive/Arquivo.h \
    348 350   src/modules/passive/mal/BotScout.h \
    skipped 125 lines
Please wait...
Page is in error, reload to recover