gitextract_306kc4re/ ├── .dockerignore ├── .gitattributes ├── .github/ │ └── workflows/ │ ├── core-build.yml │ ├── core-push.yml │ ├── devel-push.yml │ └── full-push.yml ├── .gitignore ├── LICENSE ├── README.md ├── build.gradle ├── common/ │ ├── README.md │ ├── build.gradle │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── com/ │ │ └── google/ │ │ └── tsunami/ │ │ └── common/ │ │ ├── ErrorCode.java │ │ ├── TsunamiException.java │ │ ├── cli/ │ │ │ ├── CliOption.java │ │ │ └── CliOptionsModule.java │ │ ├── command/ │ │ │ ├── CommandExecutionThreadPool.java │ │ │ ├── CommandExecutor.java │ │ │ ├── CommandExecutorFactory.java │ │ │ └── CommandExecutorModule.java │ │ ├── concurrent/ │ │ │ ├── BaseThreadPoolModule.java │ │ │ ├── ScheduledThreadPoolModule.java │ │ │ └── ThreadPoolModule.java │ │ ├── config/ │ │ │ ├── ConfigException.java │ │ │ ├── ConfigLoader.java │ │ │ ├── ConfigModule.java │ │ │ ├── TsunamiConfig.java │ │ │ ├── YamlConfigLoader.java │ │ │ └── annotations/ │ │ │ └── ConfigProperties.java │ │ ├── data/ │ │ │ ├── NetworkEndpointUtils.java │ │ │ └── NetworkServiceUtils.java │ │ ├── io/ │ │ │ └── archiving/ │ │ │ ├── Archiver.java │ │ │ ├── GoogleCloudStorageArchiver.java │ │ │ ├── GoogleCloudStorageArchiverModule.java │ │ │ ├── RawFileArchiver.java │ │ │ └── testing/ │ │ │ ├── FakeArchiver.java │ │ │ ├── FakeGoogleCloudStorageArchivers.java │ │ │ ├── FakeGoogleCloudStorageArchiversModule.java │ │ │ ├── FakeRawFileArchiver.java │ │ │ └── FakeRawFileArchiverModule.java │ │ ├── net/ │ │ │ ├── FuzzingUtils.java │ │ │ ├── UrlUtils.java │ │ │ ├── db/ │ │ │ │ ├── ConnectionProvider.java │ │ │ │ └── ConnectionProviderInterface.java │ │ │ ├── http/ │ │ │ │ ├── HttpClient.java │ │ │ │ ├── HttpClientCliOptions.java │ │ │ │ ├── HttpClientConfigProperties.java │ │ │ │ ├── HttpClientModule.java │ │ │ │ ├── HttpHeaders.java │ │ │ │ ├── HttpMethod.java │ │ │ │ ├── HttpRequest.java │ │ │ │ ├── HttpResponse.java │ │ │ │ ├── HttpStatus.java │ │ │ │ ├── OkHttpHttpClient.java │ │ │ │ └── javanet/ │ │ │ │ ├── ConnectionFactory.java │ │ │ │ └── DefaultConnectionFactory.java │ │ │ └── socket/ │ │ │ ├── DefaultTsunamiSocketFactory.java │ │ │ ├── TsunamiSocketFactory.java │ │ │ ├── TsunamiSocketFactoryCliOptions.java │ │ │ ├── TsunamiSocketFactoryConfigProperties.java │ │ │ └── TsunamiSocketFactoryModule.java │ │ ├── reflection/ │ │ │ ├── ClassGraphModule.java │ │ │ └── RuntimeClassGraphScanResult.java │ │ ├── server/ │ │ │ ├── CompactRunRequestHelper.java │ │ │ └── LanguageServerCommand.java │ │ ├── time/ │ │ │ ├── SystemUtcClockModule.java │ │ │ ├── UtcClock.java │ │ │ └── testing/ │ │ │ ├── FakeUtcClock.java │ │ │ └── FakeUtcClockModule.java │ │ └── version/ │ │ ├── ComparisonUtility.java │ │ ├── KnownQualifier.java │ │ ├── Segment.java │ │ ├── Token.java │ │ ├── Version.java │ │ ├── VersionRange.java │ │ └── VersionSet.java │ └── test/ │ ├── java/ │ │ └── com/ │ │ └── google/ │ │ └── tsunami/ │ │ └── common/ │ │ ├── cli/ │ │ │ └── CliOptionsModuleTest.java │ │ ├── command/ │ │ │ ├── CommandExecutorFactoryTest.java │ │ │ └── CommandExecutorTest.java │ │ ├── concurrent/ │ │ │ ├── BaseThreadPoolModuleTest.java │ │ │ ├── ScheduledThreadPoolModuleTest.java │ │ │ └── ThreadPoolModuleTest.java │ │ ├── config/ │ │ │ ├── ConfigModuleTest.java │ │ │ ├── TsunamiConfigTest.java │ │ │ └── YamlConfigLoaderTest.java │ │ ├── data/ │ │ │ ├── NetworkEndpointUtilsTest.java │ │ │ └── NetworkServiceUtilsTest.java │ │ ├── io/ │ │ │ └── archiving/ │ │ │ ├── ArchiverTestUtils.java │ │ │ ├── GoogleCloudStorageArchiverTest.java │ │ │ └── RawFileArchiverTest.java │ │ ├── net/ │ │ │ ├── FuzzingUtilsTest.java │ │ │ ├── UrlUtilsTest.java │ │ │ ├── http/ │ │ │ │ ├── HttpClientModuleTest.java │ │ │ │ ├── HttpHeadersTest.java │ │ │ │ ├── HttpRequestTest.java │ │ │ │ ├── HttpResponseTest.java │ │ │ │ └── OkHttpHttpClientTest.java │ │ │ └── socket/ │ │ │ ├── DefaultTsunamiSocketFactoryTest.java │ │ │ ├── TsunamiSocketFactoryCliOptionsTest.java │ │ │ └── TsunamiSocketFactoryModuleTest.java │ │ ├── server/ │ │ │ └── CompactRunRequestHelperTest.java │ │ ├── time/ │ │ │ ├── SystemUtcClockModuleTest.java │ │ │ └── testing/ │ │ │ ├── FakeUtcClockModuleTest.java │ │ │ └── FakeUtcClockTest.java │ │ └── version/ │ │ ├── ComparisonUtilityTest.java │ │ ├── EqualsTestCase.java │ │ ├── KnownQualifierTest.java │ │ ├── LessThanTestCase.java │ │ ├── SegmentTest.java │ │ ├── TokenTest.java │ │ ├── VersionRangeTest.java │ │ ├── VersionSetTest.java │ │ └── VersionTest.java │ └── resources/ │ └── com/ │ └── google/ │ └── tsunami/ │ └── common/ │ └── net/ │ └── http/ │ └── testdata/ │ ├── README.md │ └── tsunami_test_server.p12 ├── core.Dockerfile ├── devel.Dockerfile ├── docs/ │ ├── _config.yml │ ├── _data/ │ │ └── nav.yml │ ├── _includes/ │ │ └── nav.html │ ├── _layouts/ │ │ ├── default.html │ │ ├── home.html │ │ └── post.html │ ├── _posts/ │ │ ├── 2024-03-19-tsunami-network-scanner-ai-security.md │ │ ├── 2025-06-18-changes-to-tsunami.md │ │ └── 2025-10-16-october-update-tsunami-prp.md │ ├── about/ │ │ └── index.md │ ├── assets/ │ │ └── css/ │ │ └── style.scss │ ├── blog/ │ │ └── index.html │ ├── contribute/ │ │ ├── code-of-conduct.md │ │ ├── contributing.md │ │ └── index.md │ ├── howto/ │ │ ├── common-patterns.md │ │ ├── howto.md │ │ ├── index.md │ │ ├── new-detector/ │ │ │ ├── new-detector-java.md │ │ │ └── templated/ │ │ │ ├── 00-getting-started.md │ │ │ ├── 01-introduction.md │ │ │ ├── 02-bootstrapping.md │ │ │ ├── 03-first-actions.md │ │ │ ├── 04-workflows.md │ │ │ ├── 05-variables.md │ │ │ ├── 06-callback-server.md │ │ │ ├── 07-cleanup-actions.md │ │ │ ├── 08-writing-unit-tests.md │ │ │ ├── appendix-naming-actions.md │ │ │ ├── appendix-naming-plugin.md │ │ │ ├── appendix-naming-tests.md │ │ │ ├── appendix-using-linter.md │ │ │ ├── glossary-predefined-variables.md │ │ │ └── glossary-tests-magic-uri.md │ │ └── orchestration.md │ └── index.md ├── full.Dockerfile ├── go.mod ├── main/ │ ├── README.md │ ├── build.gradle │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── com/ │ │ └── google/ │ │ └── tsunami/ │ │ └── main/ │ │ └── cli/ │ │ ├── LanguageServerOptions.java │ │ ├── ScanResultsArchiver.java │ │ ├── ScanResultsArchiverModule.java │ │ ├── TsunamiCli.java │ │ ├── option/ │ │ │ ├── MainCliOptions.java │ │ │ ├── OutputDataFormat.java │ │ │ └── validator/ │ │ │ ├── IpV4Validator.java │ │ │ ├── IpV6Validator.java │ │ │ └── IpValidator.java │ │ └── server/ │ │ ├── RemoteServerLoader.java │ │ └── RemoteServerLoaderModule.java │ └── test/ │ └── java/ │ └── com/ │ └── google/ │ └── tsunami/ │ └── main/ │ └── cli/ │ ├── LanguageServerOptionsTest.java │ ├── ScanResultsArchiverTest.java │ ├── TsunamiCliTest.java │ ├── option/ │ │ ├── MainCliOptionsTest.java │ │ ├── OutputDataFormatTest.java │ │ └── validator/ │ │ ├── IpV4ValidatorTest.java │ │ ├── IpV6ValidatorTest.java │ │ └── IpValidatorTest.java │ └── server/ │ └── RemoteServerLoaderTest.java ├── plugin/ │ ├── README.md │ ├── build.gradle │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── google/ │ │ │ └── tsunami/ │ │ │ └── plugin/ │ │ │ ├── LanguageServerException.java │ │ │ ├── PluginBootstrapModule.java │ │ │ ├── PluginDefinition.java │ │ │ ├── PluginExecutionException.java │ │ │ ├── PluginExecutionModule.java │ │ │ ├── PluginExecutionResult.java │ │ │ ├── PluginExecutionThreadPool.java │ │ │ ├── PluginExecutor.java │ │ │ ├── PluginExecutorImpl.java │ │ │ ├── PluginExecutorModule.java │ │ │ ├── PluginLoadingModule.java │ │ │ ├── PluginManager.java │ │ │ ├── PluginManagerCliOptions.java │ │ │ ├── PluginServiceClient.java │ │ │ ├── PluginType.java │ │ │ ├── PortScanner.java │ │ │ ├── RemoteVulnDetector.java │ │ │ ├── RemoteVulnDetectorImpl.java │ │ │ ├── RemoteVulnDetectorLoadingModule.java │ │ │ ├── ServiceFingerprinter.java │ │ │ ├── TcsClient.java │ │ │ ├── TcsClientCliOptions.java │ │ │ ├── TcsConfigProperties.java │ │ │ ├── TsunamiPlugin.java │ │ │ ├── VulnDetector.java │ │ │ ├── annotations/ │ │ │ │ ├── ForOperatingSystemClass.java │ │ │ │ ├── ForServiceName.java │ │ │ │ ├── ForSoftware.java │ │ │ │ ├── ForWebService.java │ │ │ │ ├── PluginInfo.java │ │ │ │ └── RequiresCallbackServer.java │ │ │ ├── payload/ │ │ │ │ ├── NotImplementedException.java │ │ │ │ ├── Payload.java │ │ │ │ ├── PayloadGenerator.java │ │ │ │ ├── PayloadGeneratorModule.java │ │ │ │ ├── PayloadSecretGenerator.java │ │ │ │ ├── README.md │ │ │ │ ├── Validator.java │ │ │ │ └── testing/ │ │ │ │ ├── FakePayloadGeneratorModule.java │ │ │ │ └── PayloadTestHelper.java │ │ │ └── testing/ │ │ │ ├── FailedPortScanner.java │ │ │ ├── FailedPortScannerBootstrapModule.java │ │ │ ├── FailedRemoteVulnDetector.java │ │ │ ├── FailedRemoteVulnDetectorBootstrapModule.java │ │ │ ├── FailedServiceFingerprinter.java │ │ │ ├── FailedServiceFingerprinterBootstrapModule.java │ │ │ ├── FailedVulnDetector.java │ │ │ ├── FailedVulnDetectorBootstrapModule.java │ │ │ ├── FakePluginExecutionModule.java │ │ │ ├── FakePortScanner.java │ │ │ ├── FakePortScanner2.java │ │ │ ├── FakePortScannerBootstrapModule.java │ │ │ ├── FakePortScannerBootstrapModule2.java │ │ │ ├── FakePortScannerBootstrapModuleEmpty.java │ │ │ ├── FakePortScannerEmpty.java │ │ │ ├── FakeRemoteVulnDetector.java │ │ │ ├── FakeRemoteVulnDetectorBootstrapModule.java │ │ │ ├── FakeServiceFingerprinter.java │ │ │ ├── FakeServiceFingerprinterBootstrapModule.java │ │ │ ├── FakeVulnDetector.java │ │ │ ├── FakeVulnDetector2.java │ │ │ ├── FakeVulnDetectorBootstrapModule.java │ │ │ ├── FakeVulnDetectorBootstrapModule2.java │ │ │ ├── FakeVulnDetectorBootstrapModuleEmpty.java │ │ │ └── FakeVulnDetectorEmpty.java │ │ └── resources/ │ │ └── com/ │ │ └── google/ │ │ └── tsunami/ │ │ └── plugin/ │ │ └── payload/ │ │ └── payload_definitions.yaml │ └── test/ │ └── java/ │ └── com/ │ └── google/ │ └── tsunami/ │ └── plugin/ │ ├── PluginDefinitionTest.java │ ├── PluginExecutorImplTest.java │ ├── PluginLoadingModuleTest.java │ ├── PluginManagerTest.java │ ├── PluginServiceClientTest.java │ ├── RemoteVulnDetectorImplTest.java │ ├── RemoteVulnDetectorLoadingModuleTest.java │ ├── TcsClientTest.java │ └── payload/ │ ├── PayloadGeneratorModuleTest.java │ ├── PayloadGeneratorWithCallbackServerTest.java │ ├── PayloadGeneratorWithoutCallbackServerTest.java │ ├── PayloadSecretGeneratorTest.java │ └── PayloadTest.java ├── plugin_server/ │ └── py/ │ ├── common/ │ │ ├── data/ │ │ │ ├── network_endpoint_utils.py │ │ │ ├── network_endpoint_utils_test.py │ │ │ ├── network_service_utils.py │ │ │ └── network_service_utils_test.py │ │ └── net/ │ │ └── http/ │ │ ├── host_resolver_http_adapter.py │ │ ├── host_resolver_http_adapter_test.py │ │ ├── http_client.py │ │ ├── http_header_fields.py │ │ ├── http_header_fields_test.py │ │ ├── http_headers.py │ │ ├── http_headers_test.py │ │ ├── http_method.py │ │ ├── http_request.py │ │ ├── http_request_test.py │ │ ├── http_response.py │ │ ├── http_response_test.py │ │ ├── http_status.py │ │ ├── http_status_test.py │ │ ├── requests_http_client.py │ │ └── requests_http_client_test.py │ ├── plugin/ │ │ ├── payload/ │ │ │ ├── payload.py │ │ │ ├── payload_generator.py │ │ │ ├── payload_generator_test.py │ │ │ ├── payload_generator_test_helper.py │ │ │ ├── payload_secret_generator.py │ │ │ ├── payload_secret_generator_test.py │ │ │ ├── payload_test.py │ │ │ ├── payload_utility.py │ │ │ ├── payload_utility_test.py │ │ │ └── validator.py │ │ ├── tcs_client.py │ │ └── tcs_client_test.py │ ├── plugin_server.py │ ├── plugin_service.py │ ├── plugin_service_test.py │ ├── requirements.in │ ├── requirements.txt │ └── tsunami_plugin.py ├── proto/ │ ├── build.gradle │ ├── detection.proto │ ├── go/ │ │ ├── detection_go_proto/ │ │ │ └── detection.pb.go │ │ ├── network_go_proto/ │ │ │ └── network.pb.go │ │ ├── network_service_go_proto/ │ │ │ └── network_service.pb.go │ │ ├── payload_generator_go_proto/ │ │ │ └── payload_generator.pb.go │ │ ├── plugin_representation_go_proto/ │ │ │ └── plugin_representation.pb.go │ │ ├── plugin_service_go_proto/ │ │ │ └── plugin_service.pb.go │ │ ├── reconnaissance_go_proto/ │ │ │ └── reconnaissance.pb.go │ │ ├── scan_results_go_proto/ │ │ │ └── scan_results.pb.go │ │ ├── scan_target_go_proto/ │ │ │ └── scan_target.pb.go │ │ ├── software_go_proto/ │ │ │ └── software.pb.go │ │ ├── vulnerability_go_proto/ │ │ │ └── vulnerability.pb.go │ │ └── web_crawl_go_proto/ │ │ └── web_crawl.pb.go │ ├── network.proto │ ├── network_service.proto │ ├── payload_generator.proto │ ├── plugin_representation.proto │ ├── plugin_service.proto │ ├── reconnaissance.proto │ ├── scan_results.proto │ ├── scan_target.proto │ ├── software.proto │ ├── tsunami_go_proto/ │ │ ├── detection.pb.go │ │ ├── network.pb.go │ │ ├── network_service.pb.go │ │ ├── payload_generator.pb.go │ │ ├── plugin_representation.pb.go │ │ ├── plugin_service.pb.go │ │ ├── reconnaissance.pb.go │ │ ├── scan_results.pb.go │ │ ├── scan_target.pb.go │ │ ├── software.pb.go │ │ ├── vulnerability.pb.go │ │ └── web_crawl.pb.go │ ├── vulnerability.proto │ └── web_crawl.proto ├── settings.gradle ├── tsunami.yaml ├── tsunami_tcs.yaml └── workflow/ ├── README.md ├── build.gradle └── src/ ├── main/ │ └── java/ │ └── com/ │ └── google/ │ └── tsunami/ │ └── workflow/ │ ├── AdvisoriesWorkflow.java │ ├── DefaultScanningWorkflow.java │ ├── ExecutionStage.java │ ├── ExecutionTracer.java │ └── ScanningWorkflowException.java └── test/ └── java/ └── com/ └── google/ └── tsunami/ └── workflow/ ├── DefaultScanningWorkflowTest.java └── ExecutionTracerTest.java