diff --git a/THANKS.md b/THANKS.md deleted file mode 100644 index 941ba7889..000000000 --- a/THANKS.md +++ /dev/null @@ -1,12 +0,0 @@ -### Thanks - -Many people have contributed to subfinder making it a wonderful tool either by making a pull request fixing some stuff or giving generous donations to support the further development of this tool. Here, we recognize these persons and thank them. - -- All the contributors at [CONTRIBUTORS](https://github.com/projectdiscovery/subfinder/graphs/contributors) who made subfinder what it is. - -We'd like to thank some additional amazing people, who contributed a lot in subfinder's journey - - -- [@vzamanillo](https://github.com/vzamanillo) - For adding multiple features and overall project improvements. -- [@infosec-au](https://github.com/infosec-au) - Donating to the project. -- [@codingo](https://github.com/codingo) - Initial work on the project, managing it, lot of work! -- [@picatz](https://github.com/picatz) - Improving the structure of the project a lot. New ideas! \ No newline at end of file diff --git a/v2/cmd/subfinder/main.go b/v2/cmd/subfinder/main.go deleted file mode 100644 index fb3e9401a..000000000 --- a/v2/cmd/subfinder/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "github.com/projectdiscovery/subfinder/v2/pkg/runner" - // Attempts to increase the OS file descriptors - Fail silently - _ "github.com/projectdiscovery/fdmax/autofdmax" - "github.com/projectdiscovery/gologger" -) - -func main() { - // Parse the command line flags and read config files - options := runner.ParseOptions() - - newRunner, err := runner.NewRunner(options) - if err != nil { - gologger.Fatal().Msgf("Could not create runner: %s\n", err) - } - - err = newRunner.RunEnumeration() - if err != nil { - gologger.Fatal().Msgf("Could not run enumeration: %s\n", err) - } -} diff --git a/v2/examples/main.go b/v2/examples/main.go deleted file mode 100644 index 8edf7ea72..000000000 --- a/v2/examples/main.go +++ /dev/null @@ -1,60 +0,0 @@ -package main - -import ( - "bytes" - "context" - "io" - "log" - - "github.com/projectdiscovery/subfinder/v2/pkg/runner" -) - -func main() { - subfinderOpts := &runner.Options{ - Threads: 10, // Thread controls the number of threads to use for active enumerations - Timeout: 30, // Timeout is the seconds to wait for sources to respond - MaxEnumerationTime: 10, // MaxEnumerationTime is the maximum amount of time in mins to wait for enumeration - // ResultCallback: func(s *resolve.HostEntry) { - // callback function executed after each unique subdomain is found - // }, - // ProviderConfig: "your_provider_config.yaml", - // and other config related options - } - - // disable timestamps in logs / configure logger - log.SetFlags(0) - - subfinder, err := runner.NewRunner(subfinderOpts) - if err != nil { - log.Fatalf("failed to create subfinder runner: %v", err) - } - - output := &bytes.Buffer{} - var sourceMap map[string]map[string]struct{} - // To run subdomain enumeration on a single domain - if sourceMap, err = subfinder.EnumerateSingleDomainWithCtx(context.Background(), "hackerone.com", []io.Writer{output}); err != nil { - log.Fatalf("failed to enumerate single domain: %v", err) - } - - // To run subdomain enumeration on a list of domains from file/reader - // file, err := os.Open("domains.txt") - // if err != nil { - // log.Fatalf("failed to open domains file: %v", err) - // } - // defer file.Close() - // if err = subfinder.EnumerateMultipleDomainsWithCtx(context.Background(), file, []io.Writer{output}); err != nil { - // log.Fatalf("failed to enumerate subdomains from file: %v", err) - // } - - // print the output - log.Println(output.String()) - - // Or use sourceMap to access the results in your application - for subdomain, sources := range sourceMap { - sourcesList := make([]string, 0, len(sources)) - for source := range sources { - sourcesList = append(sourcesList, source) - } - log.Printf("%s %s (%d)\n", subdomain, sourcesList, len(sources)) - } -} diff --git a/v2/go.mod b/v2/go.mod index 273a3a328..7e25eb02d 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -1,8 +1,6 @@ -module github.com/projectdiscovery/subfinder/v2 +module github.com/ducksify/subfinder/v2 -go 1.24.0 - -toolchain go1.24.1 +go 1.24.3 require ( github.com/corpix/uarand v0.2.0 @@ -11,7 +9,6 @@ require ( github.com/lib/pq v1.10.9 github.com/projectdiscovery/chaos-client v0.5.2 github.com/projectdiscovery/dnsx v1.2.2 - github.com/projectdiscovery/fdmax v0.0.4 github.com/projectdiscovery/gologger v1.1.54 github.com/projectdiscovery/ratelimit v0.0.81 github.com/projectdiscovery/retryablehttp-go v1.0.115 @@ -51,7 +48,6 @@ require ( github.com/fatih/color v1.15.0 // indirect github.com/gaissmai/bart v0.20.4 // indirect github.com/go-ole/go-ole v1.2.6 // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/go-github/v30 v30.1.0 // indirect github.com/google/go-querystring v1.1.0 // indirect @@ -114,14 +110,12 @@ require ( 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/oauth2 v0.11.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/time v0.5.0 // indirect golang.org/x/tools v0.29.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.33.0 // indirect gopkg.in/djherbis/times.v1 v1.3.0 // indirect ) diff --git a/v2/go.sum b/v2/go.sum index 80900dbb4..a5dc887dc 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -123,8 +123,6 @@ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -265,8 +263,6 @@ github.com/projectdiscovery/dnsx v1.2.2 h1:ZjUov0GOyrS8ERlKAAhk+AOkqzaYHBzCP0qZf github.com/projectdiscovery/dnsx v1.2.2/go.mod h1:3iYm86OEqo0WxeGDkVl5WZNmG0qYE5TYNx8fBg6wX1I= github.com/projectdiscovery/fastdialer v0.4.1 h1:kp6Q0odo0VZ0vZIGOn+q9aLgBSk6uYoD1MsjCAH8+h4= github.com/projectdiscovery/fastdialer v0.4.1/go.mod h1:875Wlggf0JAz+fDIPwUQeeBqEF6nJA71XVrjuTZCV7I= -github.com/projectdiscovery/fdmax v0.0.4 h1:K9tIl5MUZrEMzjvwn/G4drsHms2aufTn1xUdeVcmhmc= -github.com/projectdiscovery/fdmax v0.0.4/go.mod h1:oZLqbhMuJ5FmcoaalOm31B1P4Vka/CqP50nWjgtSz+I= github.com/projectdiscovery/goflags v0.1.74 h1:n85uTRj5qMosm0PFBfsvOL24I7TdWRcWq/1GynhXS7c= github.com/projectdiscovery/goflags v0.1.74/go.mod h1:UMc9/7dFz2oln+10tv6cy+7WZKTHf9UGhaNkF95emh4= github.com/projectdiscovery/gologger v1.1.54 h1:WMzvJ8j/4gGfPKpCttSTaYCVDU1MWQSJnk3wU8/U6Ws= @@ -483,8 +479,8 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= -golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= +golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -602,7 +598,6 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -628,8 +623,6 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/v2/pkg/passive/passive.go b/v2/pkg/passive/passive.go index 199686bd4..20bd62ece 100644 --- a/v2/pkg/passive/passive.go +++ b/v2/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/v2/pkg/passive/sources.go b/v2/pkg/passive/sources.go index 20013042f..8c6fde34b 100644 --- a/v2/pkg/passive/sources.go +++ b/v2/pkg/passive/sources.go @@ -8,49 +8,49 @@ 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/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/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/v2/pkg/passive/sources_w_auth_test.go b/v2/pkg/passive/sources_w_auth_test.go index 0a1085275..8339d7bf6 100644 --- a/v2/pkg/passive/sources_w_auth_test.go +++ b/v2/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/v2/pkg/passive/sources_wo_auth_test.go b/v2/pkg/passive/sources_wo_auth_test.go index 036588cc3..a355a6706 100644 --- a/v2/pkg/passive/sources_wo_auth_test.go +++ b/v2/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/v2/pkg/runner/config.go b/v2/pkg/runner/config.go index 1751c9054..893b4a751 100644 --- a/v2/pkg/runner/config.go +++ b/v2/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/v2/pkg/runner/enumerate.go b/v2/pkg/runner/enumerate.go index f71a347dd..59d669f46 100644 --- a/v2/pkg/runner/enumerate.go +++ b/v2/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/v2/pkg/runner/initialize.go b/v2/pkg/runner/initialize.go index afc65b1cf..e385a1a2b 100644 --- a/v2/pkg/runner/initialize.go +++ b/v2/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/v2/pkg/runner/options.go b/v2/pkg/runner/options.go index 7f39e0315..be1f02ccd 100644 --- a/v2/pkg/runner/options.go +++ b/v2/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/v2/pkg/runner/outputter.go b/v2/pkg/runner/outputter.go index cfa4fc1a5..824bfdc44 100644 --- a/v2/pkg/runner/outputter.go +++ b/v2/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/v2/pkg/runner/runner.go b/v2/pkg/runner/runner.go index f00ce6418..71455c364 100644 --- a/v2/pkg/runner/runner.go +++ b/v2/pkg/runner/runner.go @@ -10,15 +10,18 @@ import ( "regexp" "strconv" "strings" + "sync" + "time" + "github.com/hako/durafmt" "github.com/projectdiscovery/gologger" contextutil "github.com/projectdiscovery/utils/context" 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 @@ -107,6 +110,266 @@ func (r *Runner) RunEnumerationWithCtx(ctx context.Context) error { 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 +} + // EnumerateMultipleDomains wraps EnumerateMultipleDomainsWithCtx with an empty context func (r *Runner) EnumerateMultipleDomains(reader io.Reader, writers []io.Writer) error { ctx, _ := contextutil.WithValues(context.Background(), contextutil.ContextArg("All"), contextutil.ContextArg(strconv.FormatBool(r.options.All))) diff --git a/v2/pkg/runner/runner_test.go b/v2/pkg/runner/runner_test.go new file mode 100644 index 000000000..056ee0569 --- /dev/null +++ b/v2/pkg/runner/runner_test.go @@ -0,0 +1,368 @@ +package runner + +import ( + "context" + "strings" + "testing" + "time" + + "github.com/ducksify/subfinder/v2/pkg/resolve" +) + +func TestRunEnumerationResult(t *testing.T) { + // Create options for subfinder + options := &Options{ + Domain: []string{"example.com"}, + // Configure minimal options for testing + Threads: 5, + Timeout: 10, + MaxEnumerationTime: 1, + RateLimit: 50, + } + + // Create a new runner + r, err := NewRunner(options) + if err != nil { + t.Fatalf("Could not create runner: %s", err) + } + + // Run enumeration as library and get structured results + results, err := r.RunEnumerationWithReturn() + if err != nil { + t.Fatalf("Could not run enumeration: %s", err) + } + + // Basic validation of results structure + if results == nil { + t.Fatal("Results should not be nil") + } + + if len(results.Results) == 0 { + t.Log("No results found (this might be expected for example.com)") + return + } + + // Validate the first result + result := results.Results[0] + if result.Domain != "example.com" { + t.Errorf("Expected domain 'example.com', got '%s'", result.Domain) + } + + if result.Duration == "" { + t.Error("Duration should not be empty") + } + + // Validate subdomains slice + if result.Subdomains == nil { + t.Error("Subdomains slice should not be nil") + } + + // Validate host entries + if result.HostEntries == nil { + t.Error("HostEntries slice should not be nil") + } + + // Validate source map + if result.SourceMap == nil { + t.Error("SourceMap should not be nil") + } + + // Check that subdomains and host entries have the same length + if len(result.Subdomains) != len(result.HostEntries) { + t.Errorf("Subdomains count (%d) should match HostEntries count (%d)", + len(result.Subdomains), len(result.HostEntries)) + } + + t.Logf("Successfully found %d subdomains for %s in %s", + len(result.Subdomains), result.Domain, result.Duration) +} + +func TestEnumerateSingleDomainResult(t *testing.T) { + // Create options for subfinder + options := &Options{ + Threads: 5, + Timeout: 10, + MaxEnumerationTime: 1, + RateLimit: 50, + } + + // Create a new runner + r, err := NewRunner(options) + if err != nil { + t.Fatalf("Could not create runner: %s", err) + } + + // Test single domain enumeration + result, err := r.EnumerateSingleDomainAsLibrary("example.com") + if err != nil { + t.Fatalf("Could not enumerate single domain: %s", err) + } + + // Validate result structure + if result == nil { + t.Fatal("Result should not be nil") + } + + if result.Domain != "example.com" { + t.Errorf("Expected domain 'example.com', got '%s'", result.Domain) + } + + if result.Duration == "" { + t.Error("Duration should not be empty") + } + + if result.Subdomains == nil { + t.Error("Subdomains slice should not be nil") + } + + if result.HostEntries == nil { + t.Error("HostEntries slice should not be nil") + } + + if result.SourceMap == nil { + t.Error("SourceMap should not be nil") + } + + t.Logf("Successfully enumerated %d subdomains for %s in %s", + len(result.Subdomains), result.Domain, result.Duration) +} + +func TestEnumerateSingleDomainResultWithCtx(t *testing.T) { + // Create options for subfinder + options := &Options{ + Threads: 5, + Timeout: 10, + MaxEnumerationTime: 1, + RateLimit: 50, + } + + // Create a new runner + r, err := NewRunner(options) + if err != nil { + t.Fatalf("Could not create runner: %s", err) + } + + // Create context with timeout + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + // Test single domain enumeration with context + result, err := r.EnumerateSingleDomainReturnWithCtx(ctx, "example.com") + if err != nil { + t.Fatalf("Could not enumerate single domain with context: %s", err) + } + + // Validate result structure + if result == nil { + t.Fatal("Result should not be nil") + } + + if result.Domain != "example.com" { + t.Errorf("Expected domain 'example.com', got '%s'", result.Domain) + } + + t.Logf("Successfully enumerated %d subdomains for %s in %s", + len(result.Subdomains), result.Domain, result.Duration) +} + +func TestEnumerateMultipleDomainsResult(t *testing.T) { + // Create options for subfinder + options := &Options{ + Threads: 5, + Timeout: 10, + MaxEnumerationTime: 1, + RateLimit: 50, + } + + // Create a new runner + r, err := NewRunner(options) + if err != nil { + t.Fatalf("Could not create runner: %s", err) + } + + // Create a reader with multiple domains + domains := "example.com\ntest.com" + reader := strings.NewReader(domains) + + // Test multiple domains enumeration + results, err := r.EnumerateMultipleDomainsReturn(reader) + if err != nil { + t.Fatalf("Could not enumerate multiple domains: %s", err) + } + + // Validate results structure + if results == nil { + t.Fatal("Results should not be nil") + } + + if len(results.Results) == 0 { + t.Log("No results found (this might be expected for test domains)") + return + } + + // Check that we have results for the domains we provided + expectedDomains := map[string]bool{ + "example.com": false, + "test.com": false, + } + + for _, result := range results.Results { + if _, exists := expectedDomains[result.Domain]; exists { + expectedDomains[result.Domain] = true + } + } + + for domain, found := range expectedDomains { + if !found { + t.Logf("No results found for domain %s (this might be expected)", domain) + } + } + + t.Logf("Successfully processed %d domain results", len(results.Results)) +} + +func TestEnumerationResultStructure(t *testing.T) { + // Test the structure of EnumerationResult + result := &EnumerationResult{ + Domain: "test.com", + Subdomains: []string{"www.test.com", "api.test.com"}, + HostEntries: []resolve.HostEntry{ + {Domain: "test.com", Host: "www.test.com", Source: "test-source"}, + {Domain: "test.com", Host: "api.test.com", Source: "test-source"}, + }, + SourceMap: map[string]map[string]struct{}{ + "www.test.com": {"test-source": {}}, + "api.test.com": {"test-source": {}}, + }, + Duration: "1s", + } + + // Validate structure + if result.Domain != "test.com" { + t.Errorf("Expected domain 'test.com', got '%s'", result.Domain) + } + + if len(result.Subdomains) != 2 { + t.Errorf("Expected 2 subdomains, got %d", len(result.Subdomains)) + } + + if len(result.HostEntries) != 2 { + t.Errorf("Expected 2 host entries, got %d", len(result.HostEntries)) + } + + if len(result.SourceMap) != 2 { + t.Errorf("Expected 2 source map entries, got %d", len(result.SourceMap)) + } + + if result.Duration != "1s" { + t.Errorf("Expected duration '1s', got '%s'", result.Duration) + } + + t.Log("EnumerationResult structure validation passed") +} + +func TestMultipleEnumerationResultStructure(t *testing.T) { + // Test the structure of MultipleEnumerationResult + results := &MultipleEnumerationResult{ + Results: []EnumerationResult{ + { + Domain: "test1.com", + Subdomains: []string{"www.test1.com"}, + Duration: "1s", + }, + { + Domain: "test2.com", + Subdomains: []string{"www.test2.com"}, + Duration: "2s", + }, + }, + Errors: []error{}, + } + + // Validate structure + if len(results.Results) != 2 { + t.Errorf("Expected 2 results, got %d", len(results.Results)) + } + + if len(results.Errors) != 0 { + t.Errorf("Expected 0 errors, got %d", len(results.Errors)) + } + + if results.Results[0].Domain != "test1.com" { + t.Errorf("Expected first domain 'test1.com', got '%s'", results.Results[0].Domain) + } + + if results.Results[1].Domain != "test2.com" { + t.Errorf("Expected second domain 'test2.com', got '%s'", results.Results[1].Domain) + } + + t.Log("MultipleEnumerationResult structure validation passed") +} + +func TestRunEnumerationWithReturn(t *testing.T) { + // Create options for subfinder + options := &Options{ + Domain: []string{"example.com"}, + // Configure minimal options for testing + Threads: 5, + Timeout: 10, + MaxEnumerationTime: 1, + RateLimit: 50, + } + + // Create a new runner + r, err := NewRunner(options) + if err != nil { + t.Fatalf("Could not create runner: %s", err) + } + + // Run enumeration as library and get structured results + results, err := r.RunEnumerationWithReturn() + if err != nil { + t.Fatalf("Could not run enumeration: %s", err) + } + + // Basic validation of results structure + if results == nil { + t.Fatal("Results should not be nil") + } + + if len(results.Results) == 0 { + t.Log("No results found (this might be expected for example.com)") + return + } + + // Validate the first result + result := results.Results[0] + if result.Domain != "example.com" { + t.Errorf("Expected domain 'example.com', got '%s'", result.Domain) + } + + if result.Duration == "" { + t.Error("Duration should not be empty") + } + + // Validate subdomains slice + if result.Subdomains == nil { + t.Error("Subdomains slice should not be nil") + } + + // Validate host entries + if result.HostEntries == nil { + t.Error("HostEntries slice should not be nil") + } + + // Validate source map + if result.SourceMap == nil { + t.Error("SourceMap should not be nil") + } + + // Check that subdomains and host entries have the same length + if len(result.Subdomains) != len(result.HostEntries) { + t.Errorf("Subdomains count (%d) should match HostEntries count (%d)", + len(result.Subdomains), len(result.HostEntries)) + } + + t.Logf("Successfully found %d subdomains for %s in %s", + len(result.Subdomains), result.Domain, result.Duration) +} diff --git a/v2/pkg/runner/stats.go b/v2/pkg/runner/stats.go index d34b20f82..665badff2 100644 --- a/v2/pkg/runner/stats.go +++ b/v2/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/v2/pkg/runner/validate.go b/v2/pkg/runner/validate.go index 79b59b612..50d86eac0 100644 --- a/v2/pkg/runner/validate.go +++ b/v2/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/v2/pkg/subscraping/sources/alienvault/alienvault.go b/v2/pkg/subscraping/sources/alienvault/alienvault.go index 27e1f57b4..f85e18e54 100644 --- a/v2/pkg/subscraping/sources/alienvault/alienvault.go +++ b/v2/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/v2/pkg/subscraping/sources/anubis/anubis.go b/v2/pkg/subscraping/sources/anubis/anubis.go index 6efbd5343..bf590f426 100644 --- a/v2/pkg/subscraping/sources/anubis/anubis.go +++ b/v2/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/v2/pkg/subscraping/sources/bevigil/bevigil.go b/v2/pkg/subscraping/sources/bevigil/bevigil.go index 2021e4c64..872b9dc46 100644 --- a/v2/pkg/subscraping/sources/bevigil/bevigil.go +++ b/v2/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/v2/pkg/subscraping/sources/bufferover/bufferover.go b/v2/pkg/subscraping/sources/bufferover/bufferover.go index 207cb8190..d398a8d48 100644 --- a/v2/pkg/subscraping/sources/bufferover/bufferover.go +++ b/v2/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/v2/pkg/subscraping/sources/builtwith/builtwith.go b/v2/pkg/subscraping/sources/builtwith/builtwith.go index 4c6b516f6..360c4806d 100644 --- a/v2/pkg/subscraping/sources/builtwith/builtwith.go +++ b/v2/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/v2/pkg/subscraping/sources/c99/c99.go b/v2/pkg/subscraping/sources/c99/c99.go index c2e45e818..45a7812a7 100644 --- a/v2/pkg/subscraping/sources/c99/c99.go +++ b/v2/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/v2/pkg/subscraping/sources/censys/censys.go b/v2/pkg/subscraping/sources/censys/censys.go index 4427821ae..76faa556b 100644 --- a/v2/pkg/subscraping/sources/censys/censys.go +++ b/v2/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/v2/pkg/subscraping/sources/certspotter/certspotter.go b/v2/pkg/subscraping/sources/certspotter/certspotter.go index e501e1730..d8379b447 100644 --- a/v2/pkg/subscraping/sources/certspotter/certspotter.go +++ b/v2/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/v2/pkg/subscraping/sources/chaos/chaos.go b/v2/pkg/subscraping/sources/chaos/chaos.go index 2cc873679..c19e99ad5 100644 --- a/v2/pkg/subscraping/sources/chaos/chaos.go +++ b/v2/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/v2/pkg/subscraping/sources/chinaz/chinaz.go b/v2/pkg/subscraping/sources/chinaz/chinaz.go index c6e43c05d..c75998e1e 100644 --- a/v2/pkg/subscraping/sources/chinaz/chinaz.go +++ b/v2/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/v2/pkg/subscraping/sources/commoncrawl/commoncrawl.go b/v2/pkg/subscraping/sources/commoncrawl/commoncrawl.go index 09ad4967d..9b0ba7067 100644 --- a/v2/pkg/subscraping/sources/commoncrawl/commoncrawl.go +++ b/v2/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/v2/pkg/subscraping/sources/crtsh/crtsh.go b/v2/pkg/subscraping/sources/crtsh/crtsh.go index 76ac02b45..5c7351079 100644 --- a/v2/pkg/subscraping/sources/crtsh/crtsh.go +++ b/v2/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/v2/pkg/subscraping/sources/digitalyama/digitalyama.go b/v2/pkg/subscraping/sources/digitalyama/digitalyama.go index 7ab719576..7daa40733 100644 --- a/v2/pkg/subscraping/sources/digitalyama/digitalyama.go +++ b/v2/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/v2/pkg/subscraping/sources/digitorus/digitorus.go b/v2/pkg/subscraping/sources/digitorus/digitorus.go index 8c680a2b6..54838ac16 100644 --- a/v2/pkg/subscraping/sources/digitorus/digitorus.go +++ b/v2/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/v2/pkg/subscraping/sources/dnsdb/dnsdb.go b/v2/pkg/subscraping/sources/dnsdb/dnsdb.go index e5dc0e246..27ef17726 100644 --- a/v2/pkg/subscraping/sources/dnsdb/dnsdb.go +++ b/v2/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/v2/pkg/subscraping/sources/dnsdumpster/dnsdumpster.go b/v2/pkg/subscraping/sources/dnsdumpster/dnsdumpster.go index 72be41c3b..7bda0940a 100644 --- a/v2/pkg/subscraping/sources/dnsdumpster/dnsdumpster.go +++ b/v2/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/v2/pkg/subscraping/sources/dnsrepo/dnsrepo.go b/v2/pkg/subscraping/sources/dnsrepo/dnsrepo.go index e98c82399..6b8fb96b0 100644 --- a/v2/pkg/subscraping/sources/dnsrepo/dnsrepo.go +++ b/v2/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/v2/pkg/subscraping/sources/facebook/ctlogs.go b/v2/pkg/subscraping/sources/facebook/ctlogs.go index f96436008..bf2faf407 100644 --- a/v2/pkg/subscraping/sources/facebook/ctlogs.go +++ b/v2/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/v2/pkg/subscraping/sources/fofa/fofa.go b/v2/pkg/subscraping/sources/fofa/fofa.go index 78be69d1f..fa95b10ec 100644 --- a/v2/pkg/subscraping/sources/fofa/fofa.go +++ b/v2/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/v2/pkg/subscraping/sources/fullhunt/fullhunt.go b/v2/pkg/subscraping/sources/fullhunt/fullhunt.go index 60c64e52d..a33b6d3d6 100644 --- a/v2/pkg/subscraping/sources/fullhunt/fullhunt.go +++ b/v2/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/v2/pkg/subscraping/sources/github/github.go b/v2/pkg/subscraping/sources/github/github.go index 2e8b3224b..ebce26cd6 100644 --- a/v2/pkg/subscraping/sources/github/github.go +++ b/v2/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/v2/pkg/subscraping/sources/gitlab/gitlab.go b/v2/pkg/subscraping/sources/gitlab/gitlab.go index 902ef4691..fa9386d55 100644 --- a/v2/pkg/subscraping/sources/gitlab/gitlab.go +++ b/v2/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/v2/pkg/subscraping/sources/hackertarget/hackertarget.go b/v2/pkg/subscraping/sources/hackertarget/hackertarget.go index c84957722..72b3acaf9 100644 --- a/v2/pkg/subscraping/sources/hackertarget/hackertarget.go +++ b/v2/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/v2/pkg/subscraping/sources/hudsonrock/hudsonrock.go b/v2/pkg/subscraping/sources/hudsonrock/hudsonrock.go index 51d6bc2fa..fb32789f3 100644 --- a/v2/pkg/subscraping/sources/hudsonrock/hudsonrock.go +++ b/v2/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/v2/pkg/subscraping/sources/hunter/hunter.go b/v2/pkg/subscraping/sources/hunter/hunter.go index 960563279..b089696e3 100644 --- a/v2/pkg/subscraping/sources/hunter/hunter.go +++ b/v2/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/v2/pkg/subscraping/sources/intelx/intelx.go b/v2/pkg/subscraping/sources/intelx/intelx.go index b3a3a45a1..76b5ae755 100644 --- a/v2/pkg/subscraping/sources/intelx/intelx.go +++ b/v2/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/v2/pkg/subscraping/sources/leakix/leakix.go b/v2/pkg/subscraping/sources/leakix/leakix.go index 4159e6aba..218dcbf1f 100644 --- a/v2/pkg/subscraping/sources/leakix/leakix.go +++ b/v2/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/v2/pkg/subscraping/sources/netlas/netlas.go b/v2/pkg/subscraping/sources/netlas/netlas.go index c29bc2c8b..090f785de 100644 --- a/v2/pkg/subscraping/sources/netlas/netlas.go +++ b/v2/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/v2/pkg/subscraping/sources/pugrecon/pugrecon.go b/v2/pkg/subscraping/sources/pugrecon/pugrecon.go index e7f2255f8..0849e3e1f 100644 --- a/v2/pkg/subscraping/sources/pugrecon/pugrecon.go +++ b/v2/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/v2/pkg/subscraping/sources/quake/quake.go b/v2/pkg/subscraping/sources/quake/quake.go index 5cac4ed2e..afd6313e8 100644 --- a/v2/pkg/subscraping/sources/quake/quake.go +++ b/v2/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/v2/pkg/subscraping/sources/rapiddns/rapiddns.go b/v2/pkg/subscraping/sources/rapiddns/rapiddns.go index 89ec70632..25d5c0f7b 100644 --- a/v2/pkg/subscraping/sources/rapiddns/rapiddns.go +++ b/v2/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/v2/pkg/subscraping/sources/reconcloud/reconcloud.go b/v2/pkg/subscraping/sources/reconcloud/reconcloud.go index 8aacc7d4e..ed6fb809f 100644 --- a/v2/pkg/subscraping/sources/reconcloud/reconcloud.go +++ b/v2/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/v2/pkg/subscraping/sources/redhuntlabs/redhuntlabs.go b/v2/pkg/subscraping/sources/redhuntlabs/redhuntlabs.go index a07e9a5b4..1c5de76c3 100644 --- a/v2/pkg/subscraping/sources/redhuntlabs/redhuntlabs.go +++ b/v2/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/v2/pkg/subscraping/sources/riddler/riddler.go b/v2/pkg/subscraping/sources/riddler/riddler.go index 9a3401c27..c15a1f7c0 100644 --- a/v2/pkg/subscraping/sources/riddler/riddler.go +++ b/v2/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/v2/pkg/subscraping/sources/robtex/robtext.go b/v2/pkg/subscraping/sources/robtex/robtext.go index 9214363ed..691e0b8f2 100644 --- a/v2/pkg/subscraping/sources/robtex/robtext.go +++ b/v2/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/v2/pkg/subscraping/sources/rsecloud/rsecloud.go b/v2/pkg/subscraping/sources/rsecloud/rsecloud.go index 8601b7732..dccfecbee 100644 --- a/v2/pkg/subscraping/sources/rsecloud/rsecloud.go +++ b/v2/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/v2/pkg/subscraping/sources/securitytrails/securitytrails.go b/v2/pkg/subscraping/sources/securitytrails/securitytrails.go index e6d38fe44..16f8c237a 100644 --- a/v2/pkg/subscraping/sources/securitytrails/securitytrails.go +++ b/v2/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/v2/pkg/subscraping/sources/shodan/shodan.go b/v2/pkg/subscraping/sources/shodan/shodan.go index d2224a810..5c4a6cc7d 100644 --- a/v2/pkg/subscraping/sources/shodan/shodan.go +++ b/v2/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/v2/pkg/subscraping/sources/sitedossier/sitedossier.go b/v2/pkg/subscraping/sources/sitedossier/sitedossier.go index 38d31dd5c..fd4b1bc34 100644 --- a/v2/pkg/subscraping/sources/sitedossier/sitedossier.go +++ b/v2/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/v2/pkg/subscraping/sources/threatbook/threatbook.go b/v2/pkg/subscraping/sources/threatbook/threatbook.go index 0033a4d32..3c7483d50 100644 --- a/v2/pkg/subscraping/sources/threatbook/threatbook.go +++ b/v2/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/v2/pkg/subscraping/sources/threatcrowd/threatcrowd.go b/v2/pkg/subscraping/sources/threatcrowd/threatcrowd.go index e09ab91ef..cbce1fc47 100644 --- a/v2/pkg/subscraping/sources/threatcrowd/threatcrowd.go +++ b/v2/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/v2/pkg/subscraping/sources/threatminer/threatminer.go b/v2/pkg/subscraping/sources/threatminer/threatminer.go index 6776f9ef9..c8016a940 100644 --- a/v2/pkg/subscraping/sources/threatminer/threatminer.go +++ b/v2/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/v2/pkg/subscraping/sources/virustotal/virustotal.go b/v2/pkg/subscraping/sources/virustotal/virustotal.go index 7ac4c6c50..3ea97037f 100644 --- a/v2/pkg/subscraping/sources/virustotal/virustotal.go +++ b/v2/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/v2/pkg/subscraping/sources/waybackarchive/waybackarchive.go b/v2/pkg/subscraping/sources/waybackarchive/waybackarchive.go index f3cba9809..e847ad51d 100644 --- a/v2/pkg/subscraping/sources/waybackarchive/waybackarchive.go +++ b/v2/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/v2/pkg/subscraping/sources/whoisxmlapi/whoisxmlapi.go b/v2/pkg/subscraping/sources/whoisxmlapi/whoisxmlapi.go index 18375e3ff..43c2235c8 100644 --- a/v2/pkg/subscraping/sources/whoisxmlapi/whoisxmlapi.go +++ b/v2/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/v2/pkg/subscraping/sources/zoomeyeapi/zoomeyeapi.go b/v2/pkg/subscraping/sources/zoomeyeapi/zoomeyeapi.go index 62c2d1f91..73dc7e66e 100644 --- a/v2/pkg/subscraping/sources/zoomeyeapi/zoomeyeapi.go +++ b/v2/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