修复多个bug

新增--force参数, 将忽略报错数量
This commit is contained in:
M09Ic 2022-11-10 17:19:05 +08:00
parent 9f2223aeca
commit c94a4c4d10
4 changed files with 28 additions and 9 deletions

View File

@ -49,6 +49,8 @@ func NewInvalidBaseline(u, host string, resp *ihttp.Response) *baseline {
bl.Host = host bl.Host = host
} }
bl.Body = resp.Body()
bl.BodyLength = resp.ContentLength()
bl.RedirectURL = string(resp.GetHeader("Location")) bl.RedirectURL = string(resp.GetHeader("Location"))
return bl return bl

View File

@ -48,6 +48,7 @@ type RequestOptions struct {
Headers []string `long:"header"` Headers []string `long:"header"`
Method string `long:"method"` Method string `long:"method"`
Cookie string `long:"cookie"` Cookie string `long:"cookie"`
Force bool `long:"force"`
} }
type MiscOptions struct { type MiscOptions struct {
@ -73,7 +74,6 @@ func (opt *Option) PrepareRunner() (*Runner, error) {
PoolSize: opt.PoolSize, PoolSize: opt.PoolSize,
Mod: opt.Mod, Mod: opt.Mod,
Timeout: opt.Timeout, Timeout: opt.Timeout,
Probes: strings.Split(opt.OutputProbe, ","),
Deadline: opt.Deadline, Deadline: opt.Deadline,
Offset: opt.Offset, Offset: opt.Offset,
Limit: opt.Limit, Limit: opt.Limit,
@ -94,6 +94,10 @@ func (opt *Option) PrepareRunner() (*Runner, error) {
logs.Log.Writer = r.Progress.Bypass() logs.Log.Writer = r.Progress.Bypass()
} }
if opt.Force {
breakThreshold = 999999
}
// prepare url // prepare url
var urls []string var urls []string
var file *os.File var file *os.File
@ -217,6 +221,9 @@ func (opt *Option) PrepareRunner() (*Runner, error) {
} }
} }
if opt.OutputProbe != "" {
r.Probes = strings.Split(opt.OutputProbe, ",")
}
return r, nil return r, nil
} }

View File

@ -19,7 +19,7 @@ var (
CheckWaf func([]byte) bool CheckWaf func([]byte) bool
) )
var breakThreshold int = 10 var breakThreshold int = 20
func NewPool(ctx context.Context, config *pkg.Config, outputCh chan *baseline) (*Pool, error) { func NewPool(ctx context.Context, config *pkg.Config, outputCh chan *baseline) (*Pool, error) {
pctx, cancel := context.WithCancel(ctx) pctx, cancel := context.WithCancel(ctx)
@ -35,6 +35,8 @@ func NewPool(ctx context.Context, config *pkg.Config, outputCh chan *baseline) (
initwg: sync.WaitGroup{}, initwg: sync.WaitGroup{},
checkPeriod: 100, checkPeriod: 100,
errPeriod: 10, errPeriod: 10,
reqCount: 1,
failedCount: 1,
} }
switch config.Mod { switch config.Mod {
@ -87,6 +89,7 @@ func NewPool(ctx context.Context, config *pkg.Config, outputCh chan *baseline) (
if reqerr != nil && reqerr != fasthttp.ErrBodyTooLarge { if reqerr != nil && reqerr != fasthttp.ErrBodyTooLarge {
pool.failedCount++ pool.failedCount++
bl = &baseline{Url: pool.BaseURL + unit.path, Err: reqerr} bl = &baseline{Url: pool.BaseURL + unit.path, Err: reqerr}
pool.failedBaselines = append(pool.failedBaselines, bl)
} else { } else {
if err = pool.PreCompare(resp); err == nil || unit.source == CheckSource || unit.source == InitSource { if err = pool.PreCompare(resp); err == nil || unit.source == CheckSource || unit.source == InitSource {
// 通过预对比跳过一些无用数据, 减少性能消耗 // 通过预对比跳过一些无用数据, 减少性能消耗
@ -271,8 +274,8 @@ func (p *Pool) ResetFailed() {
func (p *Pool) Recover() { func (p *Pool) Recover() {
logs.Log.Errorf("failed request exceeds the threshold , task will exit. Breakpoint %d", p.reqCount) logs.Log.Errorf("failed request exceeds the threshold , task will exit. Breakpoint %d", p.reqCount)
logs.Log.Error("collecting failed check") logs.Log.Error("collecting failed check")
for _, bl := range p.failedBaselines { for i, bl := range p.failedBaselines {
logs.Log.Error(bl.String()) logs.Log.Errorf("[failed.%d] %s", i, bl.String())
} }
} }

View File

@ -113,15 +113,22 @@ Loop:
} }
func (r *Runner) Outputting() { func (r *Runner) Outputting() {
var outFunc func(baseline2 *baseline)
if len(r.Probes) > 0 {
outFunc = func(bl *baseline) {
logs.Log.Console("[+] " + bl.Format(r.Probes) + "\n")
}
} else {
outFunc = func(bl *baseline) {
logs.Log.Console("[+] " + bl.String() + "\n")
}
}
for { for {
select { select {
case bl := <-r.OutputCh: case bl := <-r.OutputCh:
if bl.IsValid { if bl.IsValid {
if len(r.Probes) > 0 { outFunc(bl)
logs.Log.Console("[+]" + bl.Format(r.Probes) + "\n")
} else {
logs.Log.Console("[+] " + bl.String() + "\n")
}
} else { } else {
logs.Log.Debug(bl.String()) logs.Log.Debug(bl.String())
} }