Qianlitp / crawlergo

A powerful browser crawler for web vulnerability scanners
GNU General Public License v3.0
2.85k stars 480 forks source link

add: 增加爬虫整体运行 最大超时时间 #137

Closed HeisenbergV closed 1 year ago

HeisenbergV commented 1 year ago

目前没有整个进程的最大运行时间控制,因此实现此功能; 但无法达到精准的控制,只能在秒级别内,比如设置20秒,会在20-23秒左右停止

配置:

  1. 增加配置项:max-run-time 单位秒: ./crawlergo --max-run-time=20 www.xxx.com
  2. config.go: MaxRunTime 默认最大执行时间为 3600秒

控制点

  1. 产生新url 阶段- task_main.go:addTask2Pool(): 若检测超时则无法再添加新的url 创建新的tab

    func (t *CrawlerTask) addTask2Pool(req *model.Request) {
    t.taskCountLock.Lock()
    if t.crawledCount >= t.Config.MaxCrawlCount {
        t.taskCountLock.Unlock()
        return
    } else {
        t.crawledCount += 1
    }
    
    if t.Start.Add(time.Second * time.Duration(t.Config.MaxRunTime)).Before(time.Now()) {
        t.taskCountLock.Unlock()
        return
    }
    t.taskCountLock.Unlock()
    .....
  2. 创建tab准备爬取 阶段- task_main.go:Task()

    // 设置tab超时时间,若设置了程序最大运行时间, tab超时时间和程序剩余时间取小
    timeremaining := t.crawlerTask.Start.Add(time.Duration(t.crawlerTask.Config.MaxRunTime) * time.Second).Sub(time.Now())
    tabTime := t.crawlerTask.Config.TabRunTimeout
    if t.crawlerTask.Config.TabRunTimeout > timeremaining {
        tabTime = timeremaining
    }
    
    if tabTime <= 0 {
        return
    }

    每个tab的最大超时时间由TabRunTimeout控制,因此这里的逻辑是: 进程剩余时间和tab最大超时时间 取最小,作为 tab的超时时间。 如果没时间了,则取消创建。