利用 Katana 作爲 Go 庫實現高性能 Web 爬蟲

在信息收集、安全測試等領域,高性能、高併發的 Web 爬蟲工具是核心基礎設施之一。ProjectDiscovery 出品的 Katana 是一個基於 Golang 編寫的輕量級爬蟲,它默認以 CLI 工具形式提供。但實際上,它也可以作爲庫被直接集成進你的 Go 項目中,從而實現更靈活的定製。本文將介紹:Katana 的設計理念與功能,如何將 Katana 作爲庫引入到我們的項目當中,如何編寫自定義爬蟲邏輯和咱們擴展 Katana 的爬取策略或輸出邏輯

Katana 簡介

Katana 是 ProjectDiscovery 團隊開發的一款現代化 Web 爬蟲,支持以下特性:

在默認 CLI 使用中,它是個強大的爬蟲終端工具。但 Katana 的強大之處在於它本質上是模塊化設計,核心功能可以像 SDK 一樣在你自己的項目中使用。

將 Katana 作爲庫使用

首先,Katana 本質是一個 Go 模塊。你可以直接在你的項目中引入它,具體操作如下所示:

mkdir katana-demo
cd katana-demo/
go mod init katana-demo
go get github.com/projectdiscovery/katana/pkg/output 
go get github.com/projectdiscovery/katana/pkg/engine/common@v1.1.2

使用 Katana 掃描單個 URL, 具體鍵入如下代碼:

package main
import (
	"math"
	"github.com/projectdiscovery/gologger"
	"github.com/projectdiscovery/katana/pkg/engine/standard"
	"github.com/projectdiscovery/katana/pkg/output"
	"github.com/projectdiscovery/katana/pkg/types"
)
func main() {
	options := &types.Options{
		MaxDepth:     3,             // 最大爬取深度
		FieldScope:   "rdn",         // 爬取範圍字段(例如,根域名)
		BodyReadSize: math.MaxInt,   // 最大響應體讀取大小
		Timeout:      10,            // 請求超時時間,單位爲秒
		Concurrency:  10,            // 併發爬取的 goroutine 數量
		Parallelism:  10,            // 處理 URL 的 goroutine 數量
		Delay:        0,             // 每次爬取請求之間的延遲時間,單位爲秒
		RateLimit:    150,           // 每秒最多發送的請求數
		Strategy:     "depth-first", // 爬取策略(深度優先或廣度優先)
		OnResult: func(result output.Result) { // 每次結果的回調函數
			gologger.Info().Msg(result.Request.URL)
		},
	}
	crawlerOptions, err := types.NewCrawlerOptions(options)
	if err != nil {
		gologger.Fatal().Msg(err.Error())
	}
	defer crawlerOptions.Close()
	crawler, err := standard.New(crawlerOptions)
	if err != nil {
		gologger.Fatal().Msg(err.Error())
	}
	defer crawler.Close()
	var input = "http://www.baidu.com"
	err = crawler.Crawl(input)
	if err != nil {
		gologger.Warning().Msgf("無法爬取 %s: %s", input, err.Error())
	}
}

運行效果如下所示:

解析:

結語

將 Katana 作爲庫使用,能極大提升我們在信息收集、滲透測試中構建定製爬蟲能力。不再依賴 CLI,而是可以將其深度融合進更復雜的系統之中,例如漏洞掃描框架、資產發現平臺,定製爬蟲模塊,自動化掃描系統,使用 Katana 都是一個優秀的底層模塊選擇。

參考資料

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Nbz9UAgMlEs12YtYhrhTvA