当前位置: 首页 > 科技观察

用好OnionScan,做你自己的暗网爬虫

时间:2023-03-19 13:15:17 科技观察

开心!OnionScan0.2终于发布了!在新版本的OnionScan中,最引人注意的新特性就是“自定义抓取”。我们将通过本文教您如何使用这个强大的功能。【OnionScan0.2下载地址】对暗网比较了解的同学可能知道什么是OnionScan吧?OnionScan是一个很棒的工具,您可以使用它扫描暗网中的隐藏服务并收集一些潜在的泄漏数据。此外,OnionScan还可以帮你搜索各种匿名服务的标识,比如比特币钱包地址、PGP密钥、邮箱地址等。但是,暗网中的很多服务数据都是以非标准数据格式发布的,而不同的服务可能会使用不同的数据格式,这使得我们很难使用软件工具来自动化处理这些数据。不过不用担心,OnionScan可以帮我们解决这个问题。OnionScan允许我们自定义各个网站之间的关系,然后我们可以将这些关系导入到OnionScan的关联引擎(CorrelationEngine)中。接下来,系统帮助我们关联和分类这些关系,就像它处理其他标识符一样。下面我们以暗网市场Hansa为例。我们在收集这个市场的数据时,首先需要收集的往往是市场上在售商品的名称和类别,有时我们可能还需要收集这些商品的供应商信息。事实上,我们可以直接进入产品的/listing页面来获取所有这些信息。然而,我们现在要DIY一个暗网爬虫。我们将使用这个爬虫来爬取并导出我们需要的数据,然后对数据进行处理,最后将其转换成我们可以进行自动化分析的数据格式。借助OnionScan0.2,我们只需要定义一个简单的配置文件就可以轻松实现这些操作。相关代码如下所示:{"onion":"hansamkt2rr6nfg3.onion","base":"/","exclude":["/forums","/support","/login","/register","?showFilters=true","/img","/inc","/css","/link","/dashboard","/feedback","/terms","/message"],"关系":[{"name":"Listing","triggeridentifierregex":"/listing/([0-9]*)/","extrarelationships":[{"name":"Title","type":"listing-title","re??gex":"(.*)"},{"name":"Vendor","type":"username","re??gex":""},{"name":"Price","type":"price","re??gex":"(USD[^<]*)"},{"name":"Category","type":"category","regex":"([^<]*)","rollup":true}]}]}上面的代码可能看起来很复杂,但是不用担心,我们会一一解释代码中的“洋葱”开头的参数定义了我们要扫描的暗网服务(“onion”:“hansamkt2rr6nfg3.onion”)。“base”参数定义了我们要从网站的哪个路径开始扫描,这里我们将从网站的根目录(“base”:“/”)开始扫描。和普通网站一样,大部分暗网服务只在网站子目录下保存有效数据,比如刚才的“listing”目录。在这种情况下,我们可以使用“base”参数来告诉OnionScan从网站的哪一部分开始扫描,这样可以节省我们很多时间。“exclude”参数允许OnionScan排除某些类型的扫描对象,例如“/forums”、“/support”、“/login”和“/register”。一般情况下,我们一定不要碰这些链接,因为它们可能会执行一些我们不希望发生的行为。接下来是“relationships”参数,这个参数中定义的逻辑是爬虫的核心部分。我们的逻辑关系主要是由“name”和“triggeridentifierregex”这两个参数定义的。正则表达式主要应用于目标网站的URL地址。当正则表达式匹配到关系中剩余的规则时,就会触发相应的操作。本例中,我们在OnionScan中定义正则表达式“/listing/([0-9]*)/”,会触发URL地址中的Listing关系。需要注意的是,OnionScan还会根据URL地址中的“([0-9]*)”来识别资源之间的关系。每个关系都有一个“extrarelationships”参数,这个参数中定义的关系是OnionScan在执行搜索操作时需要使用的。例如,在我们的配置文件中,我们额外定义了四个关系,分别是“Title”、“Vendor”、“Price”和“Category”。每个附加定义的关系都需要定义“名称”和“类型”参数,OnionScan的关联引擎将使用这些参数。另外,我们还需要在关系中定义一个正则表达式,即“regex”参数,通过它我们可以提取出目标页面中的数据关系。在Hansa市场的例子中,我们可以看到我们可以使用正则表达式“”从产品的/listing页面中提取制造商信息。同样,我们也可以通过这个方法提取商品的标题、价格、类别。“rollup”参数是OnionScan中的一个指令,它可以让OnionScan统计我们搜索到的产品类别的数量,并将统计结果以可视化的形式输出。现在,我们已经通过配置文件告诉OnionScan应该从Hansa市场中提取哪些数据,但是OnionScan应该如何使用这个配置文件呢?接下来将我们刚刚定义的配置文件放到“service-configs”文件夹中,然后使用下面的命令让OnionScan扫描市场:./onionscan-scansweb-depth1--crawlconfigdir./service-configs/--webport8080--verbosehansamkt2rr6nfg3.onion搜索结果如下图所示:从上图中可以看到,我们只需要定义一个简单的配置文件,OnionScan就可以帮我们完成剩下的工作。我们之所以能够得到这张统计表,是因为我们之前将“rollup”参数设置为“true”,所以OnionScan会为我们提供这样一个直观的统计数据。