go语言编写的指纹识别,指纹数据1800+,大量指纹跑完需要花费大量时间,用go的目的是尽可能的节省时间(单机上)和尽可能的发挥最大效率。
./goWhatweb test.txt
- 目录下
goWhatweb
是在MAC
下编译好的 - 但是根据
go
的特性,可以静态编译成二进制运行到任何平台
- 如何快速识别指纹?
1. 为指纹添加更多的筛选条件,如php|asp|aspx类指纹
2. 基于决策的指纹识别,每次决策增加一定权值
这当然会在'一定程度'上提高识别效率,但是却要收集到更多的指纹。对于不想如此大费周章的懒人来说(比如我),最好的优化效率方法就是”爆破“的方式,在提升程序运行的速度上进行改进。对于目前的1800+指纹,我认为单纯的增加筛选条件也�并不会比”纯爆破“类型强很多。
-
内存加载指纹,在内存中对每个指纹的命中率进行统计,优先使用命中率高的指纹。(就是对排序数组中的路径hash做一次位置替换)
-
根据统计,指纹可能达到了1800+,累计访问路径会达到1600,如果访问一个不知名的cms至少会请求1600+次,减少请求&提高效率的方法:
- 判断网站连通性,在请求之前,会访问一次首页,存储时间间隔来用于下一部判断,若时间间隔较长,则取消该次请求,标记该URL失败原因为“请求首页时间间隔过长”
- 优先使用命中率高的指纹,其次是排序(同一个访问地址有不同的cms指纹情况)中较高的指纹,在识别成功后立即关闭其他请求。
- 优先使用head请求,head为200才会进行下一步get请求。
- 每发包200次会随机延时片刻,在请求首页是否正常,若不正常则延时更大片刻,延时超过1分钟则取消该URL其他请求,标记该URL失败原因为“请求量过大 {}次请求后网页无法访问”
- 将请求UA伪装为随机爬虫
- WAF识别,识别到WAF后,自动减缓发包频率
- 针对单个URL的并发默认会达到7次(同时针对该URL的GET请求7个),当有waf时,这个数值为1
- 单个URL超时次数超过阈值(默认200),则该URL整个响应请求暂停,标记失败原因为"超时次数过多"
-
上述针对单个URL的指纹识别可能无法发挥机器的最大效率,所以设计上goWhatweb对多个URL同时进行指纹分析,并执行上述规则,每个URL的指纹分析是独立的,互不干扰的。所以,更多的URL会将机器的性能和宽带性能发挥到最大。