Execute a scan in the background. Args: scan_id: Scan identifier
(scan_id: str)
| 176 | async def execute_scan(scan_id: str) -> None: |
| 177 | """Execute a scan in the background. |
| 178 | |
| 179 | Args: |
| 180 | scan_id: Scan identifier |
| 181 | """ |
| 182 | try: |
| 183 | scan = scans_db[scan_id] |
| 184 | scan["status"] = "running" |
| 185 | scan["started_at"] = datetime.now(timezone.utc) |
| 186 | |
| 187 | logger.info(f"Starting scan {scan_id} for target {scan['target']}") |
| 188 | |
| 189 | # Import modules dynamically |
| 190 | from modules.osint import ( |
| 191 | DNSEnumerator, |
| 192 | HeaderAnalyzer, |
| 193 | PortScanner, |
| 194 | SubdomainScanner, |
| 195 | TechDetector, |
| 196 | WhoisLookup, |
| 197 | ) |
| 198 | from modules.webscanner import ( |
| 199 | DirectoryBruteforcer, |
| 200 | SQLiScanner, |
| 201 | SSLAnalyzer, |
| 202 | WebCrawler, |
| 203 | XSSScanner, |
| 204 | ) |
| 205 | |
| 206 | target = Target.from_string(scan["target"]) |
| 207 | module_map = { |
| 208 | "dns": DNSEnumerator(), |
| 209 | "whois": WhoisLookup(), |
| 210 | "subdomains": SubdomainScanner(), |
| 211 | "headers": HeaderAnalyzer(), |
| 212 | "tech": TechDetector(), |
| 213 | "ports": PortScanner(), |
| 214 | "crawler": WebCrawler(max_pages=50), |
| 215 | "xss": XSSScanner(), |
| 216 | "sqli": SQLiScanner(), |
| 217 | "dirs": DirectoryBruteforcer(), |
| 218 | "ssl": SSLAnalyzer(), |
| 219 | } |
| 220 | |
| 221 | # Run selected modules |
| 222 | for module_name in scan["modules"]: |
| 223 | if module_name in module_map: |
| 224 | try: |
| 225 | result = await module_map[module_name].run(target) |
| 226 | scan["findings"].extend(result.findings) |
| 227 | logger.info(f"Module {module_name} found {len(result.findings)} findings") |
| 228 | except Exception as e: |
| 229 | logger.error(f"Error running module {module_name}: {e}") |
| 230 | |
| 231 | scan["status"] = "completed" |
| 232 | scan["completed_at"] = datetime.now(timezone.utc) |
| 233 | logger.info(f"Scan {scan_id} completed with {len(scan['findings'])} findings") |
| 234 | |
| 235 | except Exception as e: |
nothing calls this directly
no test coverage detected