t01f68d3b51e9579600.jpg


前言


OnionScan 0.2 已经发布了!这篇文章将带着你去了解它最新最棒的功能之一 -- 定制爬虫

http://p0.qhimg.com/t01576690d9994fc43e.png

别说话,快上车!

OnionScan打包了多种类型的暗网服务识别方式,例如比特币地址,pgp密钥,以及Email地址。

然而由于许多服务使用非标准化格式发布数据,导致使用工具进行自动化处理的难度增大。

OnionScan通过为每个网站规定一种定制relationships的方式来解决这个问题,这些relationships在之后会导入到与他们相关的引擎,以便更好的使用。

http://p8.qhimg.com/t01f69951ee4db7d3cc.jpg


例子


作为例子,我们先来看看Hansa商城。写爬虫嘛,我们想要得到他所卖商品的名称,属于什么商品类别,售卖者是谁呢?通过审查信息,我们获悉这些都信息可以从/listing产品页面中获得。

t01d37ed4b3396f615c.png

在此之前,我们必须建立一个定制的网络爬虫来提取这些信息,处理信息,将信息加入表单以便我们可以进行分析。在OnionScan 0.2中我们只需要简单的定义一下配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
    "onion":"hansamkt2rr6nfg3.onion",
    "base":"/",
    "exclude":["/forums","/support", "/login","/register","?showFilters=true","/img", "/inc", "/css", "/link", "/dashboard", "/feedback", "/terms", "/message"],        
    "relationships":[{"name":"Listing", 
                     "triggeridentifierregex":"/listing/([0-9]*)/",
                      "extrarelationships":[
                            {
                              "name":"Title",
                              "type":"listing-title",
                              "regex":"<h2>(.*)</h2>"
                            },
                            {
                              "name":"Vendor",
                              "type":"username",
                              "regex":"<a href=\"/vendor/([^/]*)/\">"
                            },
                            {
                              "name":"Price",
                              "type":"price",
                              "regex":"<strong>(USD [^<]*)</strong>"
                            },
                            {
                              "name":"Category",
                              "type":"category",
                              "regex":"<li><a href=\"/category/[0-9]*/\">([^<]*)</a></li>",
                              "rollup": true
                            }
                      ]
                    }
                    ]
}

以下我们进行分步讲解:

前两行指定暗网服务器,在这里我们的目标为"onion":"hansamkt2rr6nfg3.onion"。至于base URL我们想要从根目录下开始扫描("base":"/")。一些暗网服务器只有子目录下才有可用数据,比如/listings。在那种情况下我们可以使用base参数告知OnionScan略过网站的其他部分。

接下来exclude告知OnionScan排除某些类似"/forums","/support", "/login","/register"的链接,因为这些链接里面的内容丝毫不能引起我们的肾上腺激素进行分泌作用。

最后便是relationships参数了,这也是我们爬虫的关键部分了。

relationships是由一个name参数和一个triggeridentifierregex参数来进行定义的,正则表达式应用于网站的URL,并且一旦规则匹配就会触发relationships。在本例中,我们告知OnionScan只要URL匹配到"/listing/([0-9]*)/"就触发Listing relationships。同时OnionScan还会把URL中的数字(([0-9]*)) 作为relationships独特的标识符。

其次每条relationships信息都可以有一个extrarelationships参数,OnionScan会寻找这些信息,并为前文提取完的信息分配唯一的标识符。

举例,在我们的配置文件中我们定义了4个额外的关联信息:Title, Vendor, Price以及Category。每个额外关联中都有一个name和type参数,以及一个正则表达式regex,这些参数OnionScan会在他们的相关引擎中使用。该正则表达式是用来从之前触发条件的网页中提取信息用的。

对于Hansa商城这个例子来说,通过寻找超链接结构 <a href=\"/vendor/([^/]*)/\"> 我们可以从/listing/产品销售页面中获知产品供应商名称。通过寻找类似的超链接结构,我们还可以获得标题,价格以及产品目录清单。

Category下面的rollup参数是OnionScan用来统计数据的指令,在之后我们可以通过该命令画出图表进行研究。

此时此刻,我们应该告知OnionScan如何从Hansa商城读取一份销售清单了,接下来就看OnionScan的表现了。

将上面的配置文件放到名为service-configs的文件夹中,之后使用以下命令调用OnionScan扫描商城:

1
./onionscan -scans web --depth 1 --crawlconfigdir ./service-configs/ --webport 8080 --verbose hansamkt2rr6nfg3.onion

OnionScan运行一段时间之后,你可以在浏览器中打开localhost:8080,在搜索框中键入hansamkt2rr6nfg3.onion。向下滚动列表,最后你应该可以获取以下信息:

http://p7.qhimg.com/t01f69951ee4db7d3cc.jpg


后记


正如你所看到的,OnionScan通过简单的配置就能完成这么多任务。我们前面定义的这些爬虫关联信息现在都可以进行搜索,并且还可以关联OnionScan发现的其他信息。

由于我们设置了OnionScan的rollup参数,所以有生成Category的图表。希望大家在认识到该功能强大的同时,能与我们一同维护,分享不同类型的配置信息。

这仅仅是开始!我们还有很多点子想在OnionScan上实现,赶快通过Github找到我们吧。



本文由 安全客 翻译,翻译:人丑批不丑
原文链接:https://mascherari.press/building-custom-dark-web-bots-with-onionscan-custom-crawls/