对于crawlergo|rad|burpsuite|awvs爬虫的对比
字数 3031 2025-08-15 21:33:37
Web爬虫工具对比分析及使用指南
1. 测试环境与工具概述
本次测试对比了多种Web爬虫工具在相同测试站点(http://testphp.vulnweb.com)上的表现,包括:
- 手写基准爬虫:基于Python的简单爬虫,仅抓取a标签下的href和script标签下的src
- crawlergo:基于Chrome的浏览器爬虫
- rad:轻量级爬虫工具
- Burp Suite Pro v202012:专业Web安全测试工具中的爬虫模块
- AWVS 2019:Acunetix Web Vulnerability Scanner中的爬虫模块
2. 各工具详细分析
2.1 手写基准爬虫
实现代码
from urllib.parse import urlparse,urljoin
from bs4 import BeautifulSoup
import requests
import validators
from queue import Queue
import threading
requests.packages.urllib3.disable_warnings()
class jsfinder():
def __init__(self,url,cookie=""):
self.baseUrl = self.return_entire_url(url)
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36",
"cookie": cookie}
self.q = Queue()
self.crawed_list = set()
self.urlList = []
self.q.put(url)
self.spider_status = 1
def return_entire_url(self,url):
if url is not None:
if url.startswith('http') or urlparse(url).scheme:
return url.strip()
else:
if self.baseUrl == "":
self.baseUrl = "http://" + url
print(self.baseUrl)
return urljoin(self.baseUrl,url.strip())
else:
pass
def spider(self):
while(not self.q.empty() or self.spider_status):
url = self.q.get()
if url in self.crawed_list :
continue
print("requesting:",url)
try:
resp = requests.get(url=url, headers=self.headers, timeout=5, verify=False)
self.htmlParse(resp)
self.crawed_list.add(url)
except:
print("requests error:",url)
if self.spider_status == 1:
time.sleep(5)
self.spider_status = 0
print(self.q.qsize())
def htmlParse(self,response):
tempList = []
blacklist = ['#',None,'javascript:']
soup = BeautifulSoup(response.text.encode('utf-8'), 'html.parser')
for href in soup.find_all('a'):
tempList.append(href.get('href'))
for href in soup.find_all('script'):
tempList.append(href.get('src'))
tempList = list(set(tempList)-set(blacklist))
for i in tempList:
url = self.return_entire_url(i)
if validators.url(url):
print("get:",url)
if url not in self.crawed_list :
self.urlList.append(url)
if urlparse(url).netloc in self.baseUrl:
self.q.put(url)
特点
- 仅抓取a标签的href和script标签的src
- 使用队列和多线程进行爬取
- 简单的URL规范化处理
- 结果包含46个链接,包含许多跨域链接和带参数的URL
2.2 crawlergo
使用示例
#!/usr/bin/python3
# coding: utf-8
import simplejson
import subprocess
def main():
target = "http://testphp.vulnweb.com/"
cmd = ["/path/to/crawlergo", "-c", "/usr/bin/google-chrome", "-o", "json", target]
rsp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = rsp.communicate()
result = simplejson.loads(output.decode().split("--[Mission Complete]--")[1])
req_list = result["req_list"]
for req in req_list:
print(req)
if __name__ == "__main__":
main()
特点
- 基于Chrome浏览器,能执行JavaScript
- 返回48条请求记录
- 返回数据包含完整的请求信息:URL、方法、headers、数据和来源(source)
- 能自动填充表单并提交
- 支持XHR请求的捕获
- 结果中包含POST请求和表单提交数据
2.3 rad
使用命令
./rad_linux_amd64 --target http://testphp.vulnweb.com --text-output rad.log
特点
- 轻量级命令行工具
- 返回42条记录,去重后39条
- 输出简洁,仅包含请求方法和URL
- 能发现Mod_Rewrite_Shop目录下的路径
- 支持GET和POST请求的识别
2.4 Burp Suite Pro
特点
- 扫描速度较慢,但结果数量随时间增加
- 初始截图显示49个结果,后续增加到100+
- 能发现大量Mod_Rewrite_Shop目录下的路径
- 包含详细的响应信息:状态码、内容类型、响应长度等
- 专业级工具,功能全面但资源消耗较大
2.5 AWVS 2019
特点
- 扫描速度较快(可能是自家网站优化原因)
- 返回405个结果
- 大量结果集中在Mod_Rewrite模块下
- 包含许多深层目录结构和文件
- 专业扫描器,包含安全扫描功能
3. 工具对比分析
3.1 数据量对比
| 工具 | 初始结果数量 | 特点 |
|---|---|---|
| 手写爬虫 | 46 | 包含跨域链接 |
| crawlergo | 48 | 包含完整请求信息 |
| rad | 42(去重39) | 简洁输出 |
| Burp Suite | 49(增至100+) | 随时间增加 |
| AWVS | 405 | 大量Mod_Rewrite结果 |
3.2 功能对比
| 功能 | 手写爬虫 | crawlergo | rad | Burp Suite | AWVS |
|---|---|---|---|---|---|
| JavaScript执行 | ❌ | ✔️ | ❌ | ✔️ | ✔️ |
| 表单自动填充 | ❌ | ✔️ | ❌ | ✔️ | ✔️ |
| XHR请求捕获 | ❌ | ✔️ | ❌ | ✔️ | ✔️ |
| 请求详情返回 | ❌ | ✔️ | ❌ | ✔️ | ✔️ |
| 扫描速度 | 快 | 中 | 快 | 慢 | 快 |
| 资源消耗 | 低 | 中 | 低 | 高 | 高 |
| 专业安全扫描 | ❌ | ❌ | ❌ | ✔️ | ✔️ |
3.3 数据质量分析
-
手写爬虫 vs rad:
- 17个共同发现的URL
- rad发现了更多Mod_Rewrite_Shop目录下的路径
-
手写爬虫 vs crawlergo:
- 18个共同发现的URL
- crawlergo发现了更多动态生成的URL和表单提交
-
crawlergo vs rad:
- 结果高度相似
- crawlergo提供更详细的请求信息
-
Burp Suite vs AWVS:
- 都发现大量URL
- AWVS结果更多集中在Mod_Rewrite模块
- Burp Suite提供更详细的响应分析
4. 使用建议
4.1 工具选择指南
-
快速URL收集:
- 首选:rad(轻量快速)
- 备选:crawlergo(更详细但稍重)
-
完整请求分析:
- 首选:crawlergo(提供完整请求信息)
- 备选:Burp Suite(更全面但更重)
-
安全扫描:
- 首选:AWVS(专业扫描)
- 备选:Burp Suite(可定制性高)
-
简单需求/定制开发:
- 手写爬虫(灵活可控)
4.2 最佳实践
-
crawlergo使用技巧:
- 结合Chrome使用以获得最佳效果
- 解析输出时注意"Mission Complete"分隔符
- 可利用source字段区分请求来源(DOM/XHR/Navigation等)
-
rad高效使用:
- 适合批量扫描多个目标
- 输出可重定向到文件便于后续分析
- 可结合其他工具进行后续处理
-
Burp Suite优化:
- 适当调整爬虫速度设置
- 利用Scope限制目标范围
- 结合其他模块进行综合测试
-
AWVS扫描建议:
- 对自家产品优化较好
- 适合全面安全评估
- 注意资源消耗,避免影响正常业务
5. 技术细节深入
5.1 crawlergo高级功能
-
请求来源(source)类型:
- Target:初始目标
- DOM:从DOM解析的URL
- XHR:Ajax请求
- Navigation:导航请求
- OpenWindow:通过window.open触发的请求
-
表单自动填充:
- 自动识别表单并填充测试数据
- 支持复杂表单提交
- 可捕获提交后的请求和响应
-
动态内容处理:
- 完全支持JavaScript渲染
- 能捕获动态生成的URL
- 处理单页应用(SPA)效果较好
5.2 rad核心优势
-
轻量高效:
- 单二进制文件,无依赖
- 低资源消耗
- 快速启动和扫描
-
输出简洁:
- 易于解析和处理
- 可轻松集成到自动化流程
- 适合大规模扫描任务
-
基础功能完备:
- 支持基本认证
- 处理常见Web技术
- 适度的JavaScript支持
5.3 专业工具深度功能
-
Burp Suite爬虫模块:
- 与代理工具深度集成
- 支持自定义爬取策略
- 可结合主动/被动扫描
-
AWVS扫描引擎:
- 深度内容分析
- 高级安全检测算法
- 全面的漏洞检测
6. 总结与推荐
6.1 工具对比总结
| 维度 | 手写爬虫 | crawlergo | rad | Burp Suite | AWVS |
|---|---|---|---|---|---|
| 易用性 | 中 | 高 | 高 | 中 | 中 |
| 功能性 | 低 | 高 | 中 | 极高 | 极高 |
| 性能 | 高 | 中 | 高 | 低 | 中 |
| 详细度 | 低 | 高 | 低 | 极高 | 高 |
| 适用场景 | 定制开发 | 全面爬取 | 快速扫描 | 专业测试 | 安全审计 |
6.2 推荐方案
-
日常安全测试:
- crawlergo + rad组合
- 快速全面覆盖
-
专业渗透测试:
- Burp Suite全功能使用
- 结合手动测试
-
自动化监控:
- rad定期扫描
- 配合自定义脚本分析
-
定制开发基础:
- 参考手写爬虫实现
- 根据需求扩展功能
通过合理选择和组合这些工具,可以构建高效的Web应用爬取和安全测试工作流程,满足不同场景下的需求。