From 022d7c6187f94e0016331a05c513409921c07c8b Mon Sep 17 00:00:00 2001 From: "fegger@ducksify.com" Date: Sat, 26 Jul 2025 09:41:31 +0200 Subject: [PATCH 1/6] (release): update ParseOptions function to accept existing Options instance Modified the ParseOptions function to take an existing Options instance as an argument instead of creating a new one, improving flexibility in option handling. --- pkg/runner/options.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkg/runner/options.go b/pkg/runner/options.go index 7f39e0315..707f57290 100644 --- a/pkg/runner/options.go +++ b/pkg/runner/options.go @@ -73,11 +73,9 @@ type Options struct { type OnResultCallback func(result *resolve.HostEntry) // ParseOptions parses the command line flags provided by a user -func ParseOptions() *Options { +func ParseOptions(options *Options) *Options { logutil.DisableDefaultLogger() - options := &Options{} - var err error flagSet := goflags.NewFlagSet() flagSet.SetDescription(`Subfinder is a subdomain discovery tool that discovers subdomains for websites by using passive online sources.`) From 5b782563fad7d8515b59e389964e78bd74bdb814 Mon Sep 17 00:00:00 2001 From: "fegger@ducksify.com" Date: Sat, 26 Jul 2025 10:54:36 +0200 Subject: [PATCH 2/6] (release): rename library name --- cmd/subfinder/main.go | 5 +- examples/main.go | 2 +- go.mod | 5 +- pkg/passive/passive.go | 2 +- pkg/passive/sources.go | 88 +++++++++---------- pkg/passive/sources_w_auth_test.go | 2 +- pkg/passive/sources_wo_auth_test.go | 2 +- pkg/runner/config.go | 2 +- pkg/runner/enumerate.go | 6 +- pkg/runner/initialize.go | 4 +- pkg/runner/options.go | 4 +- pkg/runner/outputter.go | 2 +- pkg/runner/runner.go | 6 +- pkg/runner/stats.go | 2 +- pkg/runner/validate.go | 2 +- .../sources/alienvault/alienvault.go | 2 +- pkg/subscraping/sources/anubis/anubis.go | 2 +- pkg/subscraping/sources/bevigil/bevigil.go | 2 +- .../sources/bufferover/bufferover.go | 2 +- .../sources/builtwith/builtwith.go | 2 +- pkg/subscraping/sources/c99/c99.go | 2 +- pkg/subscraping/sources/censys/censys.go | 2 +- .../sources/certspotter/certspotter.go | 2 +- pkg/subscraping/sources/chaos/chaos.go | 2 +- pkg/subscraping/sources/chinaz/chinaz.go | 2 +- .../sources/commoncrawl/commoncrawl.go | 2 +- pkg/subscraping/sources/crtsh/crtsh.go | 2 +- .../sources/digitalyama/digitalyama.go | 2 +- .../sources/digitorus/digitorus.go | 4 +- pkg/subscraping/sources/dnsdb/dnsdb.go | 2 +- .../sources/dnsdumpster/dnsdumpster.go | 2 +- pkg/subscraping/sources/dnsrepo/dnsrepo.go | 2 +- pkg/subscraping/sources/driftnet/driftnet.go | 2 +- pkg/subscraping/sources/facebook/ctlogs.go | 2 +- pkg/subscraping/sources/fofa/fofa.go | 2 +- pkg/subscraping/sources/fullhunt/fullhunt.go | 2 +- pkg/subscraping/sources/github/github.go | 2 +- pkg/subscraping/sources/gitlab/gitlab.go | 2 +- .../sources/hackertarget/hackertarget.go | 2 +- .../sources/hudsonrock/hudsonrock.go | 2 +- pkg/subscraping/sources/hunter/hunter.go | 2 +- pkg/subscraping/sources/intelx/intelx.go | 2 +- pkg/subscraping/sources/leakix/leakix.go | 2 +- pkg/subscraping/sources/netlas/netlas.go | 2 +- pkg/subscraping/sources/pugrecon/pugrecon.go | 2 +- pkg/subscraping/sources/quake/quake.go | 2 +- pkg/subscraping/sources/rapiddns/rapiddns.go | 2 +- .../sources/reconcloud/reconcloud.go | 2 +- .../sources/redhuntlabs/redhuntlabs.go | 2 +- pkg/subscraping/sources/riddler/riddler.go | 2 +- pkg/subscraping/sources/robtex/robtext.go | 2 +- pkg/subscraping/sources/rsecloud/rsecloud.go | 2 +- .../sources/securitytrails/securitytrails.go | 2 +- pkg/subscraping/sources/shodan/shodan.go | 2 +- .../sources/sitedossier/sitedossier.go | 2 +- .../sources/threatbook/threatbook.go | 2 +- .../sources/threatcrowd/threatcrowd.go | 2 +- .../sources/threatminer/threatminer.go | 2 +- .../sources/virustotal/virustotal.go | 2 +- .../sources/waybackarchive/waybackarchive.go | 2 +- .../sources/whoisxmlapi/whoisxmlapi.go | 2 +- .../sources/zoomeyeapi/zoomeyeapi.go | 2 +- 62 files changed, 115 insertions(+), 115 deletions(-) diff --git a/cmd/subfinder/main.go b/cmd/subfinder/main.go index fb3e9401a..301096cc5 100644 --- a/cmd/subfinder/main.go +++ b/cmd/subfinder/main.go @@ -1,15 +1,16 @@ package main import ( - "github.com/projectdiscovery/subfinder/v2/pkg/runner" + "github.com/ducksify/subfinder/v2/pkg/runner" // Attempts to increase the OS file descriptors - Fail silently _ "github.com/projectdiscovery/fdmax/autofdmax" "github.com/projectdiscovery/gologger" ) func main() { + opt := &runner.Options{} // Parse the command line flags and read config files - options := runner.ParseOptions() + options := runner.ParseOptions(opt) newRunner, err := runner.NewRunner(options) if err != nil { diff --git a/examples/main.go b/examples/main.go index 8edf7ea72..b6e96ce40 100644 --- a/examples/main.go +++ b/examples/main.go @@ -6,7 +6,7 @@ import ( "io" "log" - "github.com/projectdiscovery/subfinder/v2/pkg/runner" + "github.com/ducksify/subfinder/v2/pkg/runner" ) func main() { diff --git a/go.mod b/go.mod index 436e17e84..e6a80bc78 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,7 @@ -module github.com/projectdiscovery/subfinder/v2 +module github.com/ducksify/subfinder/v2 -go 1.24.0 +go 1.24.3 -toolchain go1.24.1 require ( github.com/corpix/uarand v0.2.0 diff --git a/pkg/passive/passive.go b/pkg/passive/passive.go index 199686bd4..20bd62ece 100644 --- a/pkg/passive/passive.go +++ b/pkg/passive/passive.go @@ -10,7 +10,7 @@ import ( "time" "github.com/projectdiscovery/ratelimit" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type EnumerationOptions struct { diff --git a/pkg/passive/sources.go b/pkg/passive/sources.go index e74d874be..2a28897e3 100644 --- a/pkg/passive/sources.go +++ b/pkg/passive/sources.go @@ -8,50 +8,50 @@ import ( "golang.org/x/exp/maps" "github.com/projectdiscovery/gologger" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/alienvault" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/anubis" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/bevigil" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/bufferover" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/builtwith" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/c99" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/censys" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/certspotter" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/chaos" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/chinaz" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/commoncrawl" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/crtsh" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/digitalyama" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/digitorus" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/dnsdb" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/dnsdumpster" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/dnsrepo" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/driftnet" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/facebook" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/fofa" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/fullhunt" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/github" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/hackertarget" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/hudsonrock" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/hunter" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/intelx" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/leakix" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/netlas" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/pugrecon" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/quake" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/rapiddns" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/redhuntlabs" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/robtex" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/rsecloud" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/securitytrails" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/shodan" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/sitedossier" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/threatbook" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/threatcrowd" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/virustotal" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/waybackarchive" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/whoisxmlapi" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping/sources/zoomeyeapi" + "github.com/ducksify/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/alienvault" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/anubis" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/bevigil" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/bufferover" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/builtwith" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/c99" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/censys" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/certspotter" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/chaos" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/chinaz" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/commoncrawl" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/crtsh" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/digitalyama" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/digitorus" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/dnsdb" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/dnsdumpster" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/dnsrepo" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/driftnet" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/facebook" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/fofa" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/fullhunt" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/github" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/hackertarget" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/hudsonrock" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/hunter" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/intelx" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/leakix" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/netlas" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/pugrecon" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/quake" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/rapiddns" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/redhuntlabs" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/robtex" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/rsecloud" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/securitytrails" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/shodan" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/sitedossier" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/threatbook" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/threatcrowd" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/virustotal" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/waybackarchive" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/whoisxmlapi" + "github.com/ducksify/subfinder/v2/pkg/subscraping/sources/zoomeyeapi" mapsutil "github.com/projectdiscovery/utils/maps" ) diff --git a/pkg/passive/sources_w_auth_test.go b/pkg/passive/sources_w_auth_test.go index 0a1085275..8339d7bf6 100644 --- a/pkg/passive/sources_w_auth_test.go +++ b/pkg/passive/sources_w_auth_test.go @@ -15,7 +15,7 @@ import ( "github.com/projectdiscovery/gologger" "github.com/projectdiscovery/gologger/levels" "github.com/projectdiscovery/ratelimit" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) func TestSourcesWithKeys(t *testing.T) { diff --git a/pkg/passive/sources_wo_auth_test.go b/pkg/passive/sources_wo_auth_test.go index 036588cc3..a355a6706 100644 --- a/pkg/passive/sources_wo_auth_test.go +++ b/pkg/passive/sources_wo_auth_test.go @@ -15,7 +15,7 @@ import ( "github.com/projectdiscovery/gologger" "github.com/projectdiscovery/gologger/levels" "github.com/projectdiscovery/ratelimit" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) func TestSourcesWithoutKeys(t *testing.T) { diff --git a/pkg/runner/config.go b/pkg/runner/config.go index 1751c9054..893b4a751 100644 --- a/pkg/runner/config.go +++ b/pkg/runner/config.go @@ -7,7 +7,7 @@ import ( "gopkg.in/yaml.v3" "github.com/projectdiscovery/gologger" - "github.com/projectdiscovery/subfinder/v2/pkg/passive" + "github.com/ducksify/subfinder/v2/pkg/passive" fileutil "github.com/projectdiscovery/utils/file" ) diff --git a/pkg/runner/enumerate.go b/pkg/runner/enumerate.go index f71a347dd..59d669f46 100644 --- a/pkg/runner/enumerate.go +++ b/pkg/runner/enumerate.go @@ -11,9 +11,9 @@ import ( "github.com/projectdiscovery/gologger" - "github.com/projectdiscovery/subfinder/v2/pkg/passive" - "github.com/projectdiscovery/subfinder/v2/pkg/resolve" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/passive" + "github.com/ducksify/subfinder/v2/pkg/resolve" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) const maxNumCount = 2 diff --git a/pkg/runner/initialize.go b/pkg/runner/initialize.go index afc65b1cf..e385a1a2b 100644 --- a/pkg/runner/initialize.go +++ b/pkg/runner/initialize.go @@ -5,8 +5,8 @@ import ( "strings" "github.com/projectdiscovery/dnsx/libs/dnsx" - "github.com/projectdiscovery/subfinder/v2/pkg/passive" - "github.com/projectdiscovery/subfinder/v2/pkg/resolve" + "github.com/ducksify/subfinder/v2/pkg/passive" + "github.com/ducksify/subfinder/v2/pkg/resolve" ) // initializePassiveEngine creates the passive engine and loads sources etc diff --git a/pkg/runner/options.go b/pkg/runner/options.go index 707f57290..404d6305d 100644 --- a/pkg/runner/options.go +++ b/pkg/runner/options.go @@ -13,8 +13,8 @@ import ( "github.com/projectdiscovery/chaos-client/pkg/chaos" "github.com/projectdiscovery/goflags" "github.com/projectdiscovery/gologger" - "github.com/projectdiscovery/subfinder/v2/pkg/passive" - "github.com/projectdiscovery/subfinder/v2/pkg/resolve" + "github.com/ducksify/subfinder/v2/pkg/passive" + "github.com/ducksify/subfinder/v2/pkg/resolve" fileutil "github.com/projectdiscovery/utils/file" folderutil "github.com/projectdiscovery/utils/folder" logutil "github.com/projectdiscovery/utils/log" diff --git a/pkg/runner/outputter.go b/pkg/runner/outputter.go index cfa4fc1a5..824bfdc44 100644 --- a/pkg/runner/outputter.go +++ b/pkg/runner/outputter.go @@ -10,7 +10,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/resolve" + "github.com/ducksify/subfinder/v2/pkg/resolve" ) // OutputWriter outputs content to writers. diff --git a/pkg/runner/runner.go b/pkg/runner/runner.go index f00ce6418..90cae20ae 100644 --- a/pkg/runner/runner.go +++ b/pkg/runner/runner.go @@ -16,9 +16,9 @@ import ( fileutil "github.com/projectdiscovery/utils/file" mapsutil "github.com/projectdiscovery/utils/maps" - "github.com/projectdiscovery/subfinder/v2/pkg/passive" - "github.com/projectdiscovery/subfinder/v2/pkg/resolve" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/passive" + "github.com/ducksify/subfinder/v2/pkg/resolve" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Runner is an instance of the subdomain enumeration diff --git a/pkg/runner/stats.go b/pkg/runner/stats.go index d34b20f82..665badff2 100644 --- a/pkg/runner/stats.go +++ b/pkg/runner/stats.go @@ -7,7 +7,7 @@ import ( "time" "github.com/projectdiscovery/gologger" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" "golang.org/x/exp/maps" ) diff --git a/pkg/runner/validate.go b/pkg/runner/validate.go index 79b59b612..50d86eac0 100644 --- a/pkg/runner/validate.go +++ b/pkg/runner/validate.go @@ -9,7 +9,7 @@ import ( "github.com/projectdiscovery/gologger" "github.com/projectdiscovery/gologger/formatter" "github.com/projectdiscovery/gologger/levels" - "github.com/projectdiscovery/subfinder/v2/pkg/passive" + "github.com/ducksify/subfinder/v2/pkg/passive" mapsutil "github.com/projectdiscovery/utils/maps" sliceutil "github.com/projectdiscovery/utils/slice" ) diff --git a/pkg/subscraping/sources/alienvault/alienvault.go b/pkg/subscraping/sources/alienvault/alienvault.go index 27e1f57b4..f85e18e54 100644 --- a/pkg/subscraping/sources/alienvault/alienvault.go +++ b/pkg/subscraping/sources/alienvault/alienvault.go @@ -7,7 +7,7 @@ import ( "fmt" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type alienvaultResponse struct { diff --git a/pkg/subscraping/sources/anubis/anubis.go b/pkg/subscraping/sources/anubis/anubis.go index 6efbd5343..bf590f426 100644 --- a/pkg/subscraping/sources/anubis/anubis.go +++ b/pkg/subscraping/sources/anubis/anubis.go @@ -9,7 +9,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/bevigil/bevigil.go b/pkg/subscraping/sources/bevigil/bevigil.go index 2021e4c64..872b9dc46 100644 --- a/pkg/subscraping/sources/bevigil/bevigil.go +++ b/pkg/subscraping/sources/bevigil/bevigil.go @@ -8,7 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type Response struct { diff --git a/pkg/subscraping/sources/bufferover/bufferover.go b/pkg/subscraping/sources/bufferover/bufferover.go index 207cb8190..d398a8d48 100644 --- a/pkg/subscraping/sources/bufferover/bufferover.go +++ b/pkg/subscraping/sources/bufferover/bufferover.go @@ -9,7 +9,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type response struct { diff --git a/pkg/subscraping/sources/builtwith/builtwith.go b/pkg/subscraping/sources/builtwith/builtwith.go index 4c6b516f6..360c4806d 100644 --- a/pkg/subscraping/sources/builtwith/builtwith.go +++ b/pkg/subscraping/sources/builtwith/builtwith.go @@ -8,7 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type response struct { diff --git a/pkg/subscraping/sources/c99/c99.go b/pkg/subscraping/sources/c99/c99.go index c2e45e818..45a7812a7 100644 --- a/pkg/subscraping/sources/c99/c99.go +++ b/pkg/subscraping/sources/c99/c99.go @@ -9,7 +9,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/censys/censys.go b/pkg/subscraping/sources/censys/censys.go index 4427821ae..76faa556b 100644 --- a/pkg/subscraping/sources/censys/censys.go +++ b/pkg/subscraping/sources/censys/censys.go @@ -8,7 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" urlutil "github.com/projectdiscovery/utils/url" ) diff --git a/pkg/subscraping/sources/certspotter/certspotter.go b/pkg/subscraping/sources/certspotter/certspotter.go index e501e1730..d8379b447 100644 --- a/pkg/subscraping/sources/certspotter/certspotter.go +++ b/pkg/subscraping/sources/certspotter/certspotter.go @@ -8,7 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type certspotterObject struct { diff --git a/pkg/subscraping/sources/chaos/chaos.go b/pkg/subscraping/sources/chaos/chaos.go index 2cc873679..c19e99ad5 100644 --- a/pkg/subscraping/sources/chaos/chaos.go +++ b/pkg/subscraping/sources/chaos/chaos.go @@ -7,7 +7,7 @@ import ( "time" "github.com/projectdiscovery/chaos-client/pkg/chaos" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/chinaz/chinaz.go b/pkg/subscraping/sources/chinaz/chinaz.go index c6e43c05d..c75998e1e 100644 --- a/pkg/subscraping/sources/chinaz/chinaz.go +++ b/pkg/subscraping/sources/chinaz/chinaz.go @@ -8,7 +8,7 @@ import ( "time" jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/commoncrawl/commoncrawl.go b/pkg/subscraping/sources/commoncrawl/commoncrawl.go index 09ad4967d..9b0ba7067 100644 --- a/pkg/subscraping/sources/commoncrawl/commoncrawl.go +++ b/pkg/subscraping/sources/commoncrawl/commoncrawl.go @@ -12,7 +12,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) const ( diff --git a/pkg/subscraping/sources/crtsh/crtsh.go b/pkg/subscraping/sources/crtsh/crtsh.go index 76ac02b45..5c7351079 100644 --- a/pkg/subscraping/sources/crtsh/crtsh.go +++ b/pkg/subscraping/sources/crtsh/crtsh.go @@ -15,7 +15,7 @@ import ( _ "github.com/lib/pq" "github.com/projectdiscovery/gologger" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" contextutil "github.com/projectdiscovery/utils/context" ) diff --git a/pkg/subscraping/sources/digitalyama/digitalyama.go b/pkg/subscraping/sources/digitalyama/digitalyama.go index 7ab719576..7daa40733 100644 --- a/pkg/subscraping/sources/digitalyama/digitalyama.go +++ b/pkg/subscraping/sources/digitalyama/digitalyama.go @@ -7,7 +7,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/digitorus/digitorus.go b/pkg/subscraping/sources/digitorus/digitorus.go index 8c680a2b6..54838ac16 100644 --- a/pkg/subscraping/sources/digitorus/digitorus.go +++ b/pkg/subscraping/sources/digitorus/digitorus.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" "github.com/projectdiscovery/utils/ptr" ) @@ -33,7 +33,7 @@ func (s *Source) Run(ctx context.Context, domain string, session *subscraping.Se }(time.Now()) resp, err := session.SimpleGet(ctx, fmt.Sprintf("https://certificatedetails.com/%s", domain)) - // the 404 page still contains around 100 subdomains - https://github.com/projectdiscovery/subfinder/issues/774 + // the 404 page still contains around 100 subdomains - https://github.com/ducksify/subfinder/issues/774 if err != nil && ptr.Safe(resp).StatusCode != http.StatusNotFound { results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err} s.errors++ diff --git a/pkg/subscraping/sources/dnsdb/dnsdb.go b/pkg/subscraping/sources/dnsdb/dnsdb.go index e5dc0e246..27ef17726 100644 --- a/pkg/subscraping/sources/dnsdb/dnsdb.go +++ b/pkg/subscraping/sources/dnsdb/dnsdb.go @@ -14,7 +14,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) const urlBase string = "https://api.dnsdb.info/dnsdb/v2" diff --git a/pkg/subscraping/sources/dnsdumpster/dnsdumpster.go b/pkg/subscraping/sources/dnsdumpster/dnsdumpster.go index 72be41c3b..7bda0940a 100644 --- a/pkg/subscraping/sources/dnsdumpster/dnsdumpster.go +++ b/pkg/subscraping/sources/dnsdumpster/dnsdumpster.go @@ -7,7 +7,7 @@ import ( "fmt" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type response struct { diff --git a/pkg/subscraping/sources/dnsrepo/dnsrepo.go b/pkg/subscraping/sources/dnsrepo/dnsrepo.go index e98c82399..6b8fb96b0 100644 --- a/pkg/subscraping/sources/dnsrepo/dnsrepo.go +++ b/pkg/subscraping/sources/dnsrepo/dnsrepo.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/driftnet/driftnet.go b/pkg/subscraping/sources/driftnet/driftnet.go index 758bbfa44..bd2e4412c 100644 --- a/pkg/subscraping/sources/driftnet/driftnet.go +++ b/pkg/subscraping/sources/driftnet/driftnet.go @@ -11,7 +11,7 @@ import ( "sync/atomic" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) const ( diff --git a/pkg/subscraping/sources/facebook/ctlogs.go b/pkg/subscraping/sources/facebook/ctlogs.go index f96436008..bf2faf407 100644 --- a/pkg/subscraping/sources/facebook/ctlogs.go +++ b/pkg/subscraping/sources/facebook/ctlogs.go @@ -9,7 +9,7 @@ import ( "github.com/projectdiscovery/gologger" "github.com/projectdiscovery/retryablehttp-go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" errorutil "github.com/projectdiscovery/utils/errors" "github.com/projectdiscovery/utils/generic" urlutil "github.com/projectdiscovery/utils/url" diff --git a/pkg/subscraping/sources/fofa/fofa.go b/pkg/subscraping/sources/fofa/fofa.go index 78be69d1f..fa95b10ec 100644 --- a/pkg/subscraping/sources/fofa/fofa.go +++ b/pkg/subscraping/sources/fofa/fofa.go @@ -11,7 +11,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type fofaResponse struct { diff --git a/pkg/subscraping/sources/fullhunt/fullhunt.go b/pkg/subscraping/sources/fullhunt/fullhunt.go index 60c64e52d..a33b6d3d6 100644 --- a/pkg/subscraping/sources/fullhunt/fullhunt.go +++ b/pkg/subscraping/sources/fullhunt/fullhunt.go @@ -7,7 +7,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // fullhunt response diff --git a/pkg/subscraping/sources/github/github.go b/pkg/subscraping/sources/github/github.go index 2e8b3224b..ebce26cd6 100644 --- a/pkg/subscraping/sources/github/github.go +++ b/pkg/subscraping/sources/github/github.go @@ -19,7 +19,7 @@ import ( "github.com/tomnomnom/linkheader" "github.com/projectdiscovery/gologger" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type textMatch struct { diff --git a/pkg/subscraping/sources/gitlab/gitlab.go b/pkg/subscraping/sources/gitlab/gitlab.go index 902ef4691..fa9386d55 100644 --- a/pkg/subscraping/sources/gitlab/gitlab.go +++ b/pkg/subscraping/sources/gitlab/gitlab.go @@ -12,7 +12,7 @@ import ( "time" jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" "github.com/tomnomnom/linkheader" ) diff --git a/pkg/subscraping/sources/hackertarget/hackertarget.go b/pkg/subscraping/sources/hackertarget/hackertarget.go index c84957722..72b3acaf9 100644 --- a/pkg/subscraping/sources/hackertarget/hackertarget.go +++ b/pkg/subscraping/sources/hackertarget/hackertarget.go @@ -7,7 +7,7 @@ import ( "fmt" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/hudsonrock/hudsonrock.go b/pkg/subscraping/sources/hudsonrock/hudsonrock.go index 51d6bc2fa..fb32789f3 100644 --- a/pkg/subscraping/sources/hudsonrock/hudsonrock.go +++ b/pkg/subscraping/sources/hudsonrock/hudsonrock.go @@ -7,7 +7,7 @@ import ( "fmt" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type hudsonrockResponse struct { diff --git a/pkg/subscraping/sources/hunter/hunter.go b/pkg/subscraping/sources/hunter/hunter.go index 960563279..b089696e3 100644 --- a/pkg/subscraping/sources/hunter/hunter.go +++ b/pkg/subscraping/sources/hunter/hunter.go @@ -7,7 +7,7 @@ import ( "time" jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type hunterResp struct { diff --git a/pkg/subscraping/sources/intelx/intelx.go b/pkg/subscraping/sources/intelx/intelx.go index b3a3a45a1..76b5ae755 100644 --- a/pkg/subscraping/sources/intelx/intelx.go +++ b/pkg/subscraping/sources/intelx/intelx.go @@ -11,7 +11,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type searchResponseType struct { diff --git a/pkg/subscraping/sources/leakix/leakix.go b/pkg/subscraping/sources/leakix/leakix.go index 4159e6aba..218dcbf1f 100644 --- a/pkg/subscraping/sources/leakix/leakix.go +++ b/pkg/subscraping/sources/leakix/leakix.go @@ -7,7 +7,7 @@ import ( "fmt" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/netlas/netlas.go b/pkg/subscraping/sources/netlas/netlas.go index c29bc2c8b..090f785de 100644 --- a/pkg/subscraping/sources/netlas/netlas.go +++ b/pkg/subscraping/sources/netlas/netlas.go @@ -12,7 +12,7 @@ import ( "net/url" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type Item struct { diff --git a/pkg/subscraping/sources/pugrecon/pugrecon.go b/pkg/subscraping/sources/pugrecon/pugrecon.go index e7f2255f8..0849e3e1f 100644 --- a/pkg/subscraping/sources/pugrecon/pugrecon.go +++ b/pkg/subscraping/sources/pugrecon/pugrecon.go @@ -9,7 +9,7 @@ import ( "net/http" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // pugreconResult stores a single result from the pugrecon API diff --git a/pkg/subscraping/sources/quake/quake.go b/pkg/subscraping/sources/quake/quake.go index 5cac4ed2e..afd6313e8 100644 --- a/pkg/subscraping/sources/quake/quake.go +++ b/pkg/subscraping/sources/quake/quake.go @@ -10,7 +10,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type quakeResults struct { diff --git a/pkg/subscraping/sources/rapiddns/rapiddns.go b/pkg/subscraping/sources/rapiddns/rapiddns.go index 89ec70632..25d5c0f7b 100644 --- a/pkg/subscraping/sources/rapiddns/rapiddns.go +++ b/pkg/subscraping/sources/rapiddns/rapiddns.go @@ -9,7 +9,7 @@ import ( "strconv" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) var pagePattern = regexp.MustCompile(`class="page-link" href="/subdomain/[^"]+\?page=(\d+)">`) diff --git a/pkg/subscraping/sources/reconcloud/reconcloud.go b/pkg/subscraping/sources/reconcloud/reconcloud.go index 8aacc7d4e..ed6fb809f 100644 --- a/pkg/subscraping/sources/reconcloud/reconcloud.go +++ b/pkg/subscraping/sources/reconcloud/reconcloud.go @@ -7,7 +7,7 @@ import ( "time" jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type reconCloudResponse struct { diff --git a/pkg/subscraping/sources/redhuntlabs/redhuntlabs.go b/pkg/subscraping/sources/redhuntlabs/redhuntlabs.go index a07e9a5b4..1c5de76c3 100644 --- a/pkg/subscraping/sources/redhuntlabs/redhuntlabs.go +++ b/pkg/subscraping/sources/redhuntlabs/redhuntlabs.go @@ -9,7 +9,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type Response struct { diff --git a/pkg/subscraping/sources/riddler/riddler.go b/pkg/subscraping/sources/riddler/riddler.go index 9a3401c27..c15a1f7c0 100644 --- a/pkg/subscraping/sources/riddler/riddler.go +++ b/pkg/subscraping/sources/riddler/riddler.go @@ -7,7 +7,7 @@ import ( "fmt" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/robtex/robtext.go b/pkg/subscraping/sources/robtex/robtext.go index 9214363ed..691e0b8f2 100644 --- a/pkg/subscraping/sources/robtex/robtext.go +++ b/pkg/subscraping/sources/robtex/robtext.go @@ -10,7 +10,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) const ( diff --git a/pkg/subscraping/sources/rsecloud/rsecloud.go b/pkg/subscraping/sources/rsecloud/rsecloud.go index 8601b7732..dccfecbee 100644 --- a/pkg/subscraping/sources/rsecloud/rsecloud.go +++ b/pkg/subscraping/sources/rsecloud/rsecloud.go @@ -7,7 +7,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type response struct { diff --git a/pkg/subscraping/sources/securitytrails/securitytrails.go b/pkg/subscraping/sources/securitytrails/securitytrails.go index e6d38fe44..16f8c237a 100644 --- a/pkg/subscraping/sources/securitytrails/securitytrails.go +++ b/pkg/subscraping/sources/securitytrails/securitytrails.go @@ -11,7 +11,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" "github.com/projectdiscovery/utils/ptr" ) diff --git a/pkg/subscraping/sources/shodan/shodan.go b/pkg/subscraping/sources/shodan/shodan.go index d2224a810..5c4a6cc7d 100644 --- a/pkg/subscraping/sources/shodan/shodan.go +++ b/pkg/subscraping/sources/shodan/shodan.go @@ -8,7 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/sitedossier/sitedossier.go b/pkg/subscraping/sources/sitedossier/sitedossier.go index 38d31dd5c..fd4b1bc34 100644 --- a/pkg/subscraping/sources/sitedossier/sitedossier.go +++ b/pkg/subscraping/sources/sitedossier/sitedossier.go @@ -9,7 +9,7 @@ import ( "regexp" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // SleepRandIntn is the integer value to get the pseudo-random number diff --git a/pkg/subscraping/sources/threatbook/threatbook.go b/pkg/subscraping/sources/threatbook/threatbook.go index 0033a4d32..3c7483d50 100644 --- a/pkg/subscraping/sources/threatbook/threatbook.go +++ b/pkg/subscraping/sources/threatbook/threatbook.go @@ -9,7 +9,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type threatBookResponse struct { diff --git a/pkg/subscraping/sources/threatcrowd/threatcrowd.go b/pkg/subscraping/sources/threatcrowd/threatcrowd.go index e09ab91ef..cbce1fc47 100644 --- a/pkg/subscraping/sources/threatcrowd/threatcrowd.go +++ b/pkg/subscraping/sources/threatcrowd/threatcrowd.go @@ -8,7 +8,7 @@ import ( "net/http" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // threatCrowdResponse represents the JSON response from the ThreatCrowd API. diff --git a/pkg/subscraping/sources/threatminer/threatminer.go b/pkg/subscraping/sources/threatminer/threatminer.go index 6776f9ef9..c8016a940 100644 --- a/pkg/subscraping/sources/threatminer/threatminer.go +++ b/pkg/subscraping/sources/threatminer/threatminer.go @@ -8,7 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type response struct { diff --git a/pkg/subscraping/sources/virustotal/virustotal.go b/pkg/subscraping/sources/virustotal/virustotal.go index 7ac4c6c50..3ea97037f 100644 --- a/pkg/subscraping/sources/virustotal/virustotal.go +++ b/pkg/subscraping/sources/virustotal/virustotal.go @@ -8,7 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type response struct { diff --git a/pkg/subscraping/sources/waybackarchive/waybackarchive.go b/pkg/subscraping/sources/waybackarchive/waybackarchive.go index f3cba9809..e847ad51d 100644 --- a/pkg/subscraping/sources/waybackarchive/waybackarchive.go +++ b/pkg/subscraping/sources/waybackarchive/waybackarchive.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // Source is the passive scraping agent diff --git a/pkg/subscraping/sources/whoisxmlapi/whoisxmlapi.go b/pkg/subscraping/sources/whoisxmlapi/whoisxmlapi.go index 18375e3ff..43c2235c8 100644 --- a/pkg/subscraping/sources/whoisxmlapi/whoisxmlapi.go +++ b/pkg/subscraping/sources/whoisxmlapi/whoisxmlapi.go @@ -8,7 +8,7 @@ import ( jsoniter "github.com/json-iterator/go" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) type response struct { diff --git a/pkg/subscraping/sources/zoomeyeapi/zoomeyeapi.go b/pkg/subscraping/sources/zoomeyeapi/zoomeyeapi.go index 62c2d1f91..73dc7e66e 100644 --- a/pkg/subscraping/sources/zoomeyeapi/zoomeyeapi.go +++ b/pkg/subscraping/sources/zoomeyeapi/zoomeyeapi.go @@ -8,7 +8,7 @@ import ( "strings" "time" - "github.com/projectdiscovery/subfinder/v2/pkg/subscraping" + "github.com/ducksify/subfinder/v2/pkg/subscraping" ) // search results From 72040e054322d44fcdc10d67b9e9e92d588a9881 Mon Sep 17 00:00:00 2001 From: "fegger@ducksify.com" Date: Sat, 26 Jul 2025 11:28:06 +0200 Subject: [PATCH 3/6] (feature): add structured results for subdomain enumeration --- pkg/runner/runner.go | 263 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) diff --git a/pkg/runner/runner.go b/pkg/runner/runner.go index 90cae20ae..04c3f56bb 100644 --- a/pkg/runner/runner.go +++ b/pkg/runner/runner.go @@ -10,6 +10,9 @@ import ( "regexp" "strconv" "strings" + "sync" + "time" + "github.com/hako/durafmt" "github.com/projectdiscovery/gologger" contextutil "github.com/projectdiscovery/utils/context" @@ -173,3 +176,263 @@ func (r *Runner) EnumerateMultipleDomainsWithCtx(ctx context.Context, reader io. } return nil } + +// EnumerationResult represents the result of subdomain enumeration for a single domain +type EnumerationResult struct { + Domain string `json:"domain"` + Subdomains []string `json:"subdomains"` + HostEntries []resolve.HostEntry `json:"host_entries"` + SourceMap map[string]map[string]struct{} `json:"source_map"` + Statistics map[string]subscraping.Statistics `json:"statistics,omitempty"` + Duration string `json:"duration"` + Error error `json:"error,omitempty"` +} + +// MultipleEnumerationResult represents the result of subdomain enumeration for multiple domains +type MultipleEnumerationResult struct { + Results []EnumerationResult `json:"results"` + Errors []error `json:"errors,omitempty"` +} + +// RunEnumerationWithReturn runs the subdomain enumeration and returns structured results +// This method is designed for library usage, returning data objects instead of writing to files +func (r *Runner) RunEnumerationWithReturn() (*MultipleEnumerationResult, error) { + ctx, _ := contextutil.WithValues(context.Background(), contextutil.ContextArg("All"), contextutil.ContextArg(strconv.FormatBool(r.options.All))) + return r.RunEnumerationWithReturnWithCtx(ctx) +} + +// RunEnumerationWithReturnWithCtx runs the subdomain enumeration with context and returns structured results +func (r *Runner) RunEnumerationWithReturnWithCtx(ctx context.Context) (*MultipleEnumerationResult, error) { + result := &MultipleEnumerationResult{ + Results: []EnumerationResult{}, + Errors: []error{}, + } + + if len(r.options.Domain) > 0 { + domainsReader := strings.NewReader(strings.Join(r.options.Domain, "\n")) + return r.EnumerateMultipleDomainsReturnWithCtx(ctx, domainsReader) + } + + // If we have multiple domains as input, + if r.options.DomainsFile != "" { + f, err := os.Open(r.options.DomainsFile) + if err != nil { + return nil, err + } + defer func() { + if closeErr := f.Close(); closeErr != nil { + gologger.Error().Msgf("Error closing file %s: %s", r.options.DomainsFile, closeErr) + } + }() + return r.EnumerateMultipleDomainsReturnWithCtx(ctx, f) + } + + // If we have STDIN input, treat it as multiple domains + if r.options.Stdin { + return r.EnumerateMultipleDomainsReturnWithCtx(ctx, os.Stdin) + } + + return result, nil +} + +// EnumerateMultipleDomainsAsLibrary wraps EnumerateMultipleDomainsAsLibraryWithCtx with an empty context +func (r *Runner) EnumerateMultipleDomainsReturn(reader io.Reader) (*MultipleEnumerationResult, error) { + ctx, _ := contextutil.WithValues(context.Background(), contextutil.ContextArg("All"), contextutil.ContextArg(strconv.FormatBool(r.options.All))) + return r.EnumerateMultipleDomainsReturnWithCtx(ctx, reader) +} + +// EnumerateMultipleDomainsAsLibraryWithCtx enumerates subdomains for multiple domains and returns structured results +func (r *Runner) EnumerateMultipleDomainsReturnWithCtx(ctx context.Context, reader io.Reader) (*MultipleEnumerationResult, error) { + result := &MultipleEnumerationResult{ + Results: []EnumerationResult{}, + Errors: []error{}, + } + + scanner := bufio.NewScanner(reader) + ip, _ := regexp.Compile(`^([0-9\.]+$)`) + + for scanner.Scan() { + domain := preprocessDomain(scanner.Text()) + domain = replacer.Replace(domain) + + if domain == "" || (r.options.ExcludeIps && ip.MatchString(domain)) { + continue + } + + enumResult, err := r.EnumerateSingleDomainReturnWithCtx(ctx, domain) + if err != nil { + result.Errors = append(result.Errors, err) + continue + } + + result.Results = append(result.Results, *enumResult) + } + + return result, nil +} + +// EnumerateSingleDomainAsLibrary wraps EnumerateSingleDomainAsLibraryWithCtx with an empty context +func (r *Runner) EnumerateSingleDomainAsLibrary(domain string) (*EnumerationResult, error) { + return r.EnumerateSingleDomainReturnWithCtx(context.Background(), domain) +} + +// EnumerateSingleDomainAsLibraryWithCtx performs subdomain enumeration against a single domain and returns structured results +func (r *Runner) EnumerateSingleDomainReturnWithCtx(ctx context.Context, domain string) (*EnumerationResult, error) { + gologger.Info().Msgf("Enumerating subdomains for %s\n", domain) + + // Check if the user has asked to remove wildcards explicitly. + // If yes, create the resolution pool and get the wildcards for the current domain + var resolutionPool *resolve.ResolutionPool + if r.options.RemoveWildcard { + resolutionPool = r.resolverClient.NewResolutionPool(r.options.Threads, r.options.RemoveWildcard) + err := resolutionPool.InitWildcards(domain) + if err != nil { + // Log the error but don't quit. + gologger.Warning().Msgf("Could not get wildcards for domain %s: %s\n", domain, err) + } + } + + // Run the passive subdomain enumeration + now := time.Now() + passiveResults := r.passiveAgent.EnumerateSubdomainsWithCtx(ctx, domain, r.options.Proxy, r.options.RateLimit, r.options.Timeout, time.Duration(r.options.MaxEnumerationTime)*time.Minute, passive.WithCustomRateLimit(r.rateLimit)) + + wg := &sync.WaitGroup{} + wg.Add(1) + // Create a unique map for filtering duplicate subdomains out + uniqueMap := make(map[string]resolve.HostEntry) + // Create a map to track sources for each host + sourceMap := make(map[string]map[string]struct{}) + skippedCounts := make(map[string]int) + // Process the results in a separate goroutine + go func() { + for result := range passiveResults { + switch result.Type { + case subscraping.Error: + gologger.Warning().Msgf("Encountered an error with source %s: %s\n", result.Source, result.Error) + case subscraping.Subdomain: + subdomain := replacer.Replace(result.Value) + + // Validate the subdomain found and remove wildcards from + if !strings.HasSuffix(subdomain, "."+domain) { + skippedCounts[result.Source]++ + continue + } + + if matchSubdomain := r.filterAndMatchSubdomain(subdomain); matchSubdomain { + if _, ok := uniqueMap[subdomain]; !ok { + sourceMap[subdomain] = make(map[string]struct{}) + } + + // Log the verbose message about the found subdomain per source + if _, ok := sourceMap[subdomain][result.Source]; !ok { + gologger.Verbose().Label(result.Source).Msg(subdomain) + } + + sourceMap[subdomain][result.Source] = struct{}{} + + // Check if the subdomain is a duplicate. If not, + // send the subdomain for resolution. + if _, ok := uniqueMap[subdomain]; ok { + skippedCounts[result.Source]++ + continue + } + + hostEntry := resolve.HostEntry{Domain: domain, Host: subdomain, Source: result.Source} + + uniqueMap[subdomain] = hostEntry + // If the user asked to remove wildcard then send on the resolve + // queue. Otherwise, if mode is not verbose print the results on + // the screen as they are discovered. + if r.options.RemoveWildcard { + resolutionPool.Tasks <- hostEntry + } + } + } + } + // Close the task channel only if wildcards are asked to be removed + if r.options.RemoveWildcard { + close(resolutionPool.Tasks) + } + wg.Done() + }() + + // If the user asked to remove wildcards, listen from the results + // queue and write to the map. At the end, print the found results to the screen + foundResults := make(map[string]resolve.Result) + if r.options.RemoveWildcard { + // Process the results coming from the resolutions pool + for result := range resolutionPool.Results { + switch result.Type { + case resolve.Error: + gologger.Warning().Msgf("Could not resolve host: %s\n", result.Error) + case resolve.Subdomain: + // Add the found subdomain to a map. + if _, ok := foundResults[result.Host]; !ok { + foundResults[result.Host] = result + } + } + } + } + wg.Wait() + + // Show found subdomain count in any case. + duration := durafmt.Parse(time.Since(now)).LimitFirstN(maxNumCount).String() + var numberOfSubDomains int + var hostEntries []resolve.HostEntry + var subdomains []string + + if r.options.RemoveWildcard { + numberOfSubDomains = len(foundResults) + for _, result := range foundResults { + hostEntries = append(hostEntries, resolve.HostEntry{Domain: domain, Host: result.Host, Source: result.Source}) + subdomains = append(subdomains, result.Host) + } + } else { + numberOfSubDomains = len(uniqueMap) + for _, v := range uniqueMap { + hostEntries = append(hostEntries, v) + subdomains = append(subdomains, v.Host) + } + } + + // Call result callback if provided + if r.options.ResultCallback != nil { + if r.options.RemoveWildcard { + for _, result := range foundResults { + r.options.ResultCallback(&resolve.HostEntry{Domain: domain, Host: result.Host, Source: result.Source}) + } + } else { + for _, v := range uniqueMap { + r.options.ResultCallback(&v) + } + } + } + + gologger.Info().Msgf("Found %d subdomains for %s in %s\n", numberOfSubDomains, domain, duration) + + // Prepare statistics if requested + var statistics map[string]subscraping.Statistics + if r.options.Statistics { + gologger.Info().Msgf("Printing source statistics for %s", domain) + statistics = r.passiveAgent.GetStatistics() + // This is a hack to remove the skipped count from the statistics + // as we don't want to show it in the statistics. + // TODO: Design a better way to do this. + for source, count := range skippedCounts { + if stat, ok := statistics[source]; ok { + stat.Results -= count + statistics[source] = stat + } + } + printStatistics(statistics) + } + + return &EnumerationResult{ + Domain: domain, + Subdomains: subdomains, + HostEntries: hostEntries, + SourceMap: sourceMap, + Statistics: statistics, + Duration: duration, + }, nil +} From 433868e23170fe01a50521ccda5296a949ef1c40 Mon Sep 17 00:00:00 2001 From: "fegger@ducksify.com" Date: Sat, 26 Jul 2025 12:26:06 +0200 Subject: [PATCH 4/6] (refactor): remove showBanner call from ParseOptions function Eliminated the showBanner function call within ParseOptions to streamline the option parsing process. --- pkg/runner/options.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/runner/options.go b/pkg/runner/options.go index 404d6305d..5118e2813 100644 --- a/pkg/runner/options.go +++ b/pkg/runner/options.go @@ -176,7 +176,6 @@ func ParseOptions(options *Options) *Options { options.preProcessDomains() options.ConfigureOutput() - showBanner() if !options.DisableUpdateCheck { latestVersion, err := updateutils.GetToolVersionCallback("subfinder", version)() From 492baae225fed4764336ffd5cfd93ce93e926de9 Mon Sep 17 00:00:00 2001 From: "fegger@ducksify.com" Date: Sat, 26 Jul 2025 16:02:32 +0200 Subject: [PATCH 5/6] (refactor): removing flag definitions globally --- pkg/runner/options.go | 76 +------------------------------------------ 1 file changed, 1 insertion(+), 75 deletions(-) diff --git a/pkg/runner/options.go b/pkg/runner/options.go index 5118e2813..646c1abb6 100644 --- a/pkg/runner/options.go +++ b/pkg/runner/options.go @@ -76,74 +76,6 @@ type OnResultCallback func(result *resolve.HostEntry) func ParseOptions(options *Options) *Options { logutil.DisableDefaultLogger() - var err error - flagSet := goflags.NewFlagSet() - flagSet.SetDescription(`Subfinder is a subdomain discovery tool that discovers subdomains for websites by using passive online sources.`) - - flagSet.CreateGroup("input", "Input", - flagSet.StringSliceVarP(&options.Domain, "domain", "d", nil, "domains to find subdomains for", goflags.NormalizedStringSliceOptions), - flagSet.StringVarP(&options.DomainsFile, "list", "dL", "", "file containing list of domains for subdomain discovery"), - ) - - flagSet.CreateGroup("source", "Source", - flagSet.StringSliceVarP(&options.Sources, "sources", "s", nil, "specific sources to use for discovery (-s crtsh,github). Use -ls to display all available sources.", goflags.NormalizedStringSliceOptions), - flagSet.BoolVar(&options.OnlyRecursive, "recursive", false, "use only sources that can handle subdomains recursively rather than both recursive and non-recursive sources"), - flagSet.BoolVar(&options.All, "all", false, "use all sources for enumeration (slow)"), - flagSet.StringSliceVarP(&options.ExcludeSources, "exclude-sources", "es", nil, "sources to exclude from enumeration (-es alienvault,zoomeyeapi)", goflags.NormalizedStringSliceOptions), - ) - - flagSet.CreateGroup("filter", "Filter", - flagSet.StringSliceVarP(&options.Match, "match", "m", nil, "subdomain or list of subdomain to match (file or comma separated)", goflags.FileNormalizedStringSliceOptions), - flagSet.StringSliceVarP(&options.Filter, "filter", "f", nil, " subdomain or list of subdomain to filter (file or comma separated)", goflags.FileNormalizedStringSliceOptions), - ) - - flagSet.CreateGroup("rate-limit", "Rate-limit", - flagSet.IntVarP(&options.RateLimit, "rate-limit", "rl", 0, "maximum number of http requests to send per second (global)"), - flagSet.RateLimitMapVarP(&options.RateLimits, "rate-limits", "rls", defaultRateLimits, "maximum number of http requests to send per second for providers in key=value format (-rls hackertarget=10/m)", goflags.NormalizedStringSliceOptions), - flagSet.IntVar(&options.Threads, "t", 10, "number of concurrent goroutines for resolving (-active only)"), - ) - - flagSet.CreateGroup("update", "Update", - flagSet.CallbackVarP(GetUpdateCallback(), "update", "up", "update subfinder to latest version"), - flagSet.BoolVarP(&options.DisableUpdateCheck, "disable-update-check", "duc", false, "disable automatic subfinder update check"), - ) - - flagSet.CreateGroup("output", "Output", - flagSet.StringVarP(&options.OutputFile, "output", "o", "", "file to write output to"), - flagSet.BoolVarP(&options.JSON, "json", "oJ", false, "write output in JSONL(ines) format"), - flagSet.StringVarP(&options.OutputDirectory, "output-dir", "oD", "", "directory to write output (-dL only)"), - flagSet.BoolVarP(&options.CaptureSources, "collect-sources", "cs", false, "include all sources in the output (-json only)"), - flagSet.BoolVarP(&options.HostIP, "ip", "oI", false, "include host IP in output (-active only)"), - ) - - flagSet.CreateGroup("configuration", "Configuration", - flagSet.StringVar(&options.Config, "config", defaultConfigLocation, "flag config file"), - flagSet.StringVarP(&options.ProviderConfig, "provider-config", "pc", defaultProviderConfigLocation, "provider config file"), - flagSet.StringSliceVar(&options.Resolvers, "r", nil, "comma separated list of resolvers to use", goflags.NormalizedStringSliceOptions), - flagSet.StringVarP(&options.ResolverList, "rlist", "rL", "", "file containing list of resolvers to use"), - flagSet.BoolVarP(&options.RemoveWildcard, "active", "nW", false, "display active subdomains only"), - flagSet.StringVar(&options.Proxy, "proxy", "", "http proxy to use with subfinder"), - flagSet.BoolVarP(&options.ExcludeIps, "exclude-ip", "ei", false, "exclude IPs from the list of domains"), - ) - - flagSet.CreateGroup("debug", "Debug", - flagSet.BoolVar(&options.Silent, "silent", false, "show only subdomains in output"), - flagSet.BoolVar(&options.Version, "version", false, "show version of subfinder"), - flagSet.BoolVar(&options.Verbose, "v", false, "show verbose output"), - flagSet.BoolVarP(&options.NoColor, "no-color", "nc", false, "disable color in output"), - flagSet.BoolVarP(&options.ListSources, "list-sources", "ls", false, "list all available sources"), - flagSet.BoolVar(&options.Statistics, "stats", false, "report source statistics"), - ) - - flagSet.CreateGroup("optimization", "Optimization", - flagSet.IntVar(&options.Timeout, "timeout", 30, "seconds to wait before timing out"), - flagSet.IntVar(&options.MaxEnumerationTime, "max-time", 10, "minutes to wait for enumeration results"), - ) - - if err := flagSet.Parse(); err != nil { - fmt.Println(err.Error()) - os.Exit(1) - } // set chaos mode chaos.IsSDK = false @@ -154,13 +86,7 @@ func ParseOptions(options *Options) *Options { } } - if options.Config != defaultConfigLocation { - // An empty source file is not a fatal error - if err := flagSet.MergeConfigFile(options.Config); err != nil && !errors.Is(err, io.EOF) { - gologger.Fatal().Msgf("Could not read config: %s\n", err) - } - } - + var err error // Default output is stdout options.Output = os.Stdout From 51eabf7e50b0f920c9635263fef4f4d2b3b35196 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 02:03:25 +0000 Subject: [PATCH 6/6] chore(deps): bump golang.org/x/crypto from 0.36.0 to 0.45.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.36.0 to 0.45.0. - [Commits](https://github.com/golang/crypto/compare/v0.36.0...v0.45.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-version: 0.45.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 17 ++++++++--------- go.sum | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index e6a80bc78..0ad3bbbb9 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,6 @@ module github.com/ducksify/subfinder/v2 go 1.24.3 - require ( github.com/corpix/uarand v0.2.0 github.com/hako/durafmt v0.0.0-20210316092057-3a2c319c1acd @@ -110,14 +109,14 @@ require ( go.etcd.io/bbolt v1.3.7 // indirect go.uber.org/multierr v1.11.0 // indirect go4.org v0.0.0-20230225012048-214862532bf5 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/mod v0.22.0 // indirect + golang.org/x/crypto v0.45.0 // indirect + golang.org/x/mod v0.29.0 // indirect golang.org/x/oauth2 v0.27.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect + golang.org/x/sync v0.18.0 // indirect + golang.org/x/term v0.37.0 // indirect + golang.org/x/text v0.31.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.29.0 // indirect + golang.org/x/tools v0.38.0 // indirect gopkg.in/djherbis/times.v1 v1.3.0 // indirect ) @@ -132,6 +131,6 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/projectdiscovery/goflags v0.1.74 github.com/projectdiscovery/retryabledns v1.0.102 // indirect - golang.org/x/net v0.38.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/net v0.47.0 // indirect + golang.org/x/sys v0.38.0 // indirect ) diff --git a/go.sum b/go.sum index 2aeebb583..bc6b23b94 100644 --- a/go.sum +++ b/go.sum @@ -415,8 +415,8 @@ golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -446,8 +446,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -472,8 +472,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -491,8 +491,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -527,8 +527,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -536,8 +536,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -550,8 +550,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= @@ -582,8 +582,8 @@ golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=