Skip to content

Commit c08416a

Browse files
dogancanbakirx-stp
authored andcommitted
Fix paginations (projectdiscovery#1603)
* fix quake pagination * update page param * skip empty * fix test * minor
1 parent dbf095b commit c08416a

File tree

3 files changed

+42
-28
lines changed

3 files changed

+42
-28
lines changed

v2/pkg/subscraping/sources/hunter/hunter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (s *Source) Run(ctx context.Context, domain string, session *subscraping.Se
6060
for currentPage := 1; currentPage <= pages; currentPage++ {
6161
// hunter api doc https://hunter.qianxin.com/home/helpCenter?r=5-1-2
6262
qbase64 := base64.URLEncoding.EncodeToString(fmt.Appendf(nil, "domain=\"%s\"", domain))
63-
resp, err := session.SimpleGet(ctx, fmt.Sprintf("https://hunter.qianxin.com/openApi/search?api-key=%s&search=%s&page=1&page_size=100&is_web=3", randomApiKey, qbase64))
63+
resp, err := session.SimpleGet(ctx, fmt.Sprintf("https://hunter.qianxin.com/openApi/search?api-key=%s&search=%s&page=%d&page_size=100&is_web=3", randomApiKey, qbase64, currentPage))
6464
if err != nil && resp == nil {
6565
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
6666
s.errors++

v2/pkg/subscraping/sources/quake/quake.go

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -58,44 +58,58 @@ func (s *Source) Run(ctx context.Context, domain string, session *subscraping.Se
5858
}
5959

6060
// quake api doc https://quake.360.cn/quake/#/help
61-
var requestBody = fmt.Appendf(nil, `{"query":"domain: %s", "include":["service.http.host"], "latest": true, "start":0, "size":500}`, domain)
62-
resp, err := session.Post(ctx, "https://quake.360.net/api/v3/search/quake_service", "", map[string]string{
63-
"Content-Type": "application/json", "X-QuakeToken": randomApiKey,
64-
}, bytes.NewReader(requestBody))
65-
if err != nil {
66-
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
67-
s.errors++
68-
session.DiscardHTTPResponse(resp)
69-
return
70-
}
61+
var pageSize = 500
62+
var start = 0
63+
var totalResults = -1
64+
65+
for {
66+
var requestBody = fmt.Appendf(nil, `{"query":"domain: %s", "include":["service.http.host"], "latest": true, "size":%d, "start":%d}`, domain, pageSize, start)
67+
resp, err := session.Post(ctx, "https://quake.360.net/api/v3/search/quake_service", "", map[string]string{
68+
"Content-Type": "application/json", "X-QuakeToken": randomApiKey,
69+
}, bytes.NewReader(requestBody))
70+
if err != nil {
71+
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
72+
s.errors++
73+
session.DiscardHTTPResponse(resp)
74+
return
75+
}
7176

72-
var response quakeResults
73-
err = jsoniter.NewDecoder(resp.Body).Decode(&response)
74-
if err != nil {
75-
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
76-
s.errors++
77+
var response quakeResults
78+
err = jsoniter.NewDecoder(resp.Body).Decode(&response)
79+
if err != nil {
80+
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
81+
s.errors++
82+
session.DiscardHTTPResponse(resp)
83+
return
84+
}
7785
session.DiscardHTTPResponse(resp)
78-
return
79-
}
80-
session.DiscardHTTPResponse(resp)
8186

82-
if response.Code != 0 {
83-
results <- subscraping.Result{
84-
Source: s.Name(), Type: subscraping.Error, Error: fmt.Errorf("%s", response.Message),
87+
if response.Code != 0 {
88+
results <- subscraping.Result{
89+
Source: s.Name(), Type: subscraping.Error, Error: fmt.Errorf("%s", response.Message),
90+
}
91+
s.errors++
92+
return
93+
}
94+
95+
if totalResults == -1 {
96+
totalResults = response.Meta.Pagination.Total
8597
}
86-
s.errors++
87-
return
88-
}
8998

90-
if response.Meta.Pagination.Total > 0 {
9199
for _, quakeDomain := range response.Data {
92100
subdomain := quakeDomain.Service.HTTP.Host
93101
if strings.ContainsAny(subdomain, "暂无权限") {
94-
subdomain = ""
102+
continue
95103
}
96104
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Subdomain, Value: subdomain}
97105
s.results++
98106
}
107+
108+
if len(response.Data) == 0 || start+pageSize >= totalResults {
109+
break
110+
}
111+
112+
start += pageSize
99113
}
100114
}()
101115

v2/pkg/subscraping/sources/rsecloud/rsecloud.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (s *Source) IsDefault() bool {
9696
}
9797

9898
func (s *Source) HasRecursiveSupport() bool {
99-
return true
99+
return false
100100
}
101101

102102
func (s *Source) NeedsKey() bool {

0 commit comments

Comments
 (0)