Updated Timeout Handling and Fixed Concurrency Errors

master
ice3man 2018-04-05 15:41:46 +05:30
parent 10581027bb
commit 59df043194
9 changed files with 25 additions and 9 deletions

View File

@ -13,6 +13,7 @@ package helper
type State struct { type State struct {
Color bool // Whether to use color or not Color bool // Whether to use color or not
Threads int // Number of threads to use Threads int // Number of threads to use
Timeout int // Timeout for requests to different passive sources
Verbose bool // Show verbose information Verbose bool // Show verbose information
Domain string // Domain name to find subdomains for Domain string // Domain name to find subdomains for
Recursive bool // Whether perform recursive subdomain discovery or not Recursive bool // Whether perform recursive subdomain discovery or not
@ -32,5 +33,5 @@ func InitState() (state State, err error) {
return state, err return state, err
} }
return State{true, 10, false, "", false, *config}, nil return State{true, 10, 180, false, "", false, *config}, nil
} }

View File

@ -39,11 +39,12 @@ func Query(state *helper.State, ch chan helper.Result) {
result.Subdomains = subdomains result.Subdomains = subdomains
// Make a http request to Certspotter // Make a http request to Certspotter
resp, err := helper.GetHTTPResponse("https://certspotter.com/api/v0/certs?domain="+state.Domain, 3000) resp, err := helper.GetHTTPResponse("https://certspotter.com/api/v0/certs?domain="+state.Domain, state.Timeout)
if err != nil { if err != nil {
// Set values and return // Set values and return
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Get the response body // Get the response body
@ -51,6 +52,7 @@ func Query(state *helper.State, ch chan helper.Result) {
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Decode the json format // Decode the json format
@ -58,6 +60,7 @@ func Query(state *helper.State, ch chan helper.Result) {
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Append each subdomain found to subdomains array // Append each subdomain found to subdomains array

View File

@ -41,10 +41,11 @@ func Query(state *helper.State, ch chan helper.Result) {
// Make a http request to CRT.SH server and request output in JSON // Make a http request to CRT.SH server and request output in JSON
// format. // format.
// I Think 5 minutes would be more than enough for CRT.SH :-) // I Think 5 minutes would be more than enough for CRT.SH :-)
resp, err := helper.GetHTTPResponse("https://crt.sh/?q=%25."+state.Domain+"&output=json", 3000) resp, err := helper.GetHTTPResponse("https://crt.sh/?q=%25."+state.Domain+"&output=json", state.Timeout)
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Get the response body // Get the response body
@ -52,6 +53,7 @@ func Query(state *helper.State, ch chan helper.Result) {
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
if strings.Contains(string(resp_body), "The requested URL / was not found on this server.") { if strings.Contains(string(resp_body), "The requested URL / was not found on this server.") {
@ -59,6 +61,7 @@ func Query(state *helper.State, ch chan helper.Result) {
// move back // move back
result.Error = nil result.Error = nil
ch <- result ch <- result
return
} }
// Convert Response Body to string and then replace }{ to },{ // Convert Response Body to string and then replace }{ to },{
@ -78,6 +81,7 @@ func Query(state *helper.State, ch chan helper.Result) {
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Append each subdomain found to subdomains array // Append each subdomain found to subdomains array

View File

@ -27,7 +27,7 @@ import (
// //
func Query(state *helper.State) (subdomains []string, err error) { func Query(state *helper.State) (subdomains []string, err error) {
resp, err := helper.GetHTTPResponse("https://www.dnsdb.org/f/"+state.Domain+".dnsdb.org/", 3000) resp, err := helper.GetHTTPResponse("https://www.dnsdb.org/f/"+state.Domain+".dnsdb.org/", state.Timeout)
if err != nil { if err != nil {
return subdomains, err return subdomains, err
} }

View File

@ -29,10 +29,11 @@ func Query(state *helper.State, ch chan helper.Result) {
var result helper.Result var result helper.Result
result.Subdomains = subdomains result.Subdomains = subdomains
resp, err := helper.GetHTTPResponse("https://api.hackertarget.com/hostsearch/?q="+state.Domain, 3000) resp, err := helper.GetHTTPResponse("https://api.hackertarget.com/hostsearch/?q="+state.Domain, state.Timeout)
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Get the response body // Get the response body
@ -40,6 +41,7 @@ func Query(state *helper.State, ch chan helper.Result) {
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
scanner := bufio.NewScanner(strings.NewReader(string(resp_body))) scanner := bufio.NewScanner(strings.NewReader(string(resp_body)))

View File

@ -36,7 +36,7 @@ var gCookies []*http.Cookie
func enumerate(state *helper.State, baseUrl string) (err error) { func enumerate(state *helper.State, baseUrl string) (err error) {
// Make a http request to Netcraft // Make a http request to Netcraft
resp, gCookies, err := helper.GetHTTPCookieResponse(baseUrl, gCookies, 3000) resp, gCookies, err := helper.GetHTTPCookieResponse(baseUrl, gCookies, state.Timeout)
if err != nil { if err != nil {
return err return err
} }
@ -124,6 +124,7 @@ func Query(state *helper.State, ch chan helper.Result) {
result.Subdomains = globalSubdomains result.Subdomains = globalSubdomains
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
result.Subdomains = globalSubdomains result.Subdomains = globalSubdomains

View File

@ -38,10 +38,11 @@ func Query(state *helper.State, ch chan helper.Result) {
result.Subdomains = subdomains result.Subdomains = subdomains
// Make a http request to Threatcrowd // Make a http request to Threatcrowd
resp, err := helper.GetHTTPResponse("https://www.threatcrowd.org/searchApi/v2/domain/report/?domain="+state.Domain, 3000) resp, err := helper.GetHTTPResponse("https://www.threatcrowd.org/searchApi/v2/domain/report/?domain="+state.Domain, state.Timeout)
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Get the response body // Get the response body
@ -49,6 +50,7 @@ func Query(state *helper.State, ch chan helper.Result) {
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Decode the json format // Decode the json format
@ -56,6 +58,7 @@ func Query(state *helper.State, ch chan helper.Result) {
if err != nil { if err != nil {
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
// Append each subdomain found to subdomains array // Append each subdomain found to subdomains array

View File

@ -37,7 +37,7 @@ var virustotalapi_data virustotalapi_object
func queryVirustotalApi(state *helper.State) (subdomains []string, err error) { func queryVirustotalApi(state *helper.State) (subdomains []string, err error) {
// Make a search for a domain name and get HTTP Response // Make a search for a domain name and get HTTP Response
resp, err := helper.GetHTTPResponse("https://www.virustotal.com/vtapi/v2/domain/report?apikey="+state.ConfigState.VirustotalAPIKey+"&domain="+state.Domain, 3000) resp, err := helper.GetHTTPResponse("https://www.virustotal.com/vtapi/v2/domain/report?apikey="+state.ConfigState.VirustotalAPIKey+"&domain="+state.Domain, state.Timeout)
if err != nil { if err != nil {
return subdomains, err return subdomains, err
} }
@ -95,6 +95,7 @@ func Query(state *helper.State, ch chan helper.Result) {
result.Subdomains = subdomains result.Subdomains = subdomains
result.Error = err result.Error = err
ch <- result ch <- result
return
} }
result.Subdomains = subdomains result.Subdomains = subdomains

View File

@ -37,6 +37,7 @@ func ParseCmdLine() (state *helper.State, err error) {
flag.BoolVar(&s.Verbose, "v", false, "Verbose output") flag.BoolVar(&s.Verbose, "v", false, "Verbose output")
flag.BoolVar(&s.Color, "c", true, "Use colour in outpout") flag.BoolVar(&s.Color, "c", true, "Use colour in outpout")
flag.IntVar(&s.Threads, "t", 10, "Number of concurrent threads") flag.IntVar(&s.Threads, "t", 10, "Number of concurrent threads")
flag.IntVar(&s.Timeout, "timeout", 180, "Timeout for passive discovery services")
flag.StringVar(&s.Domain, "d", "", "Domain to find subdomains for") flag.StringVar(&s.Domain, "d", "", "Domain to find subdomains for")
flag.BoolVar(&s.Recursive, "r", true, "Use recursion to find subdomains") flag.BoolVar(&s.Recursive, "r", true, "Use recursion to find subdomains")