You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
404StarLink/detail/ZoomEye-go.md

10 KiB

ZoomEye-go https://github.com/gyyyy/ZoomEye-go

Language Author GitHub stars Version Time

ZoomEye-go

ZoomEye 是一款网络空间搜索引擎,用户可以使用浏览器方式 搜索网络设备

ZoomEye-go 是一款基于 ZoomEye API 开发的 Golang 库,提供了 ZoomEye 命令行模式,同时也可以作为 SDK 集成到其他工具中。该库可以让技术人员更便捷地搜索筛选导出 ZoomEye 的数据。

下载安装

  • Releases 中获得已经编译好的二进制文件

  • 直接通过Github下载源代码,或运行 go get 进行下载安装:

     go get -u github.com/gyyyy/ZoomEye-go
    

    进入项目目录,执行 make 命令完成编译,编译好的二进制文件存放于 bin 目录下:

     make [all/linux/macos/win64/win32]
    

使用命令行模式

基础配置

ZoomEye-go 二进制文件同目录下创建 conf.yml 文件,对配置变量进行自定义设置:

# API-Key和JWT存放路径
ZOOMEYE_CONFIG_PATH: "~/.config/zoomeye/setting"

# 搜索结果数据缓存路径
ZOOMEYE_CACHE_PATH: "~/.config/zoomeye/cache"

# 搜索和过滤结果数据保存路径
ZOOMEYE_DATA_PATH: "data"

# 本地数据超时时间,默认为5天
EXPIRED_TIME: 432000

若不创建或修改配置文件,ZoomEye-go 相关文件路径和其他参数默认值都将与 conf_default.yml 描述一致。

初始化用户凭证

首次使用 ZoomEye-go 时,需要通过 init 命令对用户凭证进行初始化,该凭证将自动作为之后其他 ZoomEye API 接口调用时的身份标识。ZoomEye-go 实现了 ZoomEye API 支持的两种认证方式:

  1. API-Key (推荐)

    ./ZoomEye-go init -apikey [API-KEY]
    
  2. JWT

    ./ZoomEye-go init -username [USERNAME] -password [PASSWORD]
    

使用示例:

./ZoomEye-go init -apikey "XXXXXXXX-XXXX-XXXXX-XXXX-XXXXXXXXXXX"
succeed to initialize

[ZoomEye Resources Info]

  Role:  developer
  Quota: 10000

推荐使用 API-Key 认证方式,用户可以登录 ZoomEye个人信息 中获取,注意不要将其泄露给其他人JWT 认证方式获取的凭证具有时效性,失效后需要重新初始化才能正常使用,本地存储的旧的凭证数据会被覆盖。

可以通过 init -h 获取帮助。

查询用户资源信息

通过 info 命令可以查询 ZoomEye 当前用户个人信息以及数据配额,初始化成功后也会自动查询:

./ZoomEye-go info
succeed to query

[ZoomEye Resources Info]

  Role:  developer
  Quota: 10000

搜索

搜索是 ZoomEye-go 最核心的功能,通过 search 命令指定搜索关键词进行使用,支持的参数说明如下:

-num [NUM]           设置显示/搜索的数据条数,默认为 20(建议设置20的倍数,因为ZoomEye一次接口查询为20条)
-type [host/web]     设置搜索资源类型,默认为 host(如:-type "web")
-force               强制调用 ZoomEye API 查询,忽略本地数据和缓存
-count               查询该 dork 在 ZoomEye 数据库中的总量
-facet [FIELD,...]   查询该 dork 在 ZoomEye 数据库中全量数据的分布情况,以逗号分隔(如:-facet "app,service,os")
-stat [FIELD,...]    统计本次搜索结果数据中指定字段的分布情况,以逗号分隔(如:-stat "app,service,os")
-figure [pie/hist]   输出统计数据的饼状图/柱状图(仅在指定了 -facet 或 -stat 参数下有效)
-filter [FIELD,...]  对本次搜索结果数据中指定字段进行筛选,以逗号分隔(如:-filter "app,ip,title")
-save                保存本次搜索结果数据,若使用 filter 参数指定了筛选条件,筛选结果也会保存

根据搜索资源类型的不同(由参数 -type 确定),其他部分参数值范围存在差异,并且可能根据 ZoomEye 官方更新而改变:

  • -facet-stat ,它们取值一样,只是统计的数据集范围不同
    • -typehost 时,可以使用 app,device,service,os,port,country,city
    • -typeweb 时,可以使用 webapp,component,framework,frontend,server,waf,os,country,city
  • -filter
    • -typehost 时,可以使用 app,version,device,ip,port,hostname,city,country,asn,banner,time,*
    • -typeweb 时,可以使用 app,headers,keywords,title,ip,site,city,country,time,*

使用示例:

./ZoomEye-go search "telnet" -count
succeed to search (in 272.080753ms)

[ZoomEye Total]

  Count: 57003299


./ZoomEye-go search "telnet" -num 1
succeed to search (in 370.930383ms)

[Host Search Result]

  +-----------------------+----------------------+----------------------+------------------------------------------+----------------------+
  | Host                  | Application          | Service              | Banner                                   | Country              |
  +-----------------------+----------------------+----------------------+------------------------------------------+----------------------+
  | 159.203.16.45:10005   | Pocket CMD telnetd   | telnet               | \xff\xfb\x01\xff\xfb\x03\xff\xfc\'\xf... | Canada               |
  +-----------------------+----------------------+----------------------+------------------------------------------+----------------------+
  | Total: 1                                                                                                                              |
  +-----------------------+----------------------+----------------------+------------------------------------------+----------------------+


./ZoomEye-go search "weblogic" -facet "country" -figure "hist"
succeed to search (in 177.088662ms)

[ZoomEye Facets - HIST]

  Type: country
  
  United States  [232751]  ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉
          Japan  [ 45285]  ▉▉▉▉▉▉▉
          China  [ 37926]  ▉▉▉▉▉▉
        Bahrain  [ 28816]  ▉▉▉▉▌
        Germany  [ 28001]  ▉▉▉▉▍
   South Africa  [ 27929]  ▉▉▉▉▍
         Sweden  [ 25679]  ▉▉▉▉
         Brazil  [ 25655]  ▉▉▉▉
          India  [ 25036]  ▉▉▉▉
        Ireland  [ 24407]  ▉▉▉▊

可以通过 search -h 获取帮助。

缓存机制

ZoomEye-go 参考官方 ZoomEye-python 的设计,在命令行模式下提供了相似的缓存机制,数据默认存储在 ~/.config/zoomeye/cache 目录,尽可能节约用户配额。搜索过的数据将默认在本地缓存 5 天,在缓存数据有效期内,重复执行同条件搜索不会消耗配额。可以设置 -force 参数强制调用 ZoomEye API 进行搜索,结果会覆盖当前缓存数据。

通过 clear 命令可以清空所有缓存数据和用户数据。

加载分析本地数据

ZoomEye-go 也可以通过 load 命令加载本地数据文件,并将它解析成搜索结果数据类型,支持与 search 命令类似的 -count-facet-stat-figure-filter 参数对数据进行统计分析。不同的是,-save 参数仅会保存 -filter 的执行结果。

可以通过 load -h 获取帮助。

设备历史数据搜索

ZoomEye-go使用history命令根据指定的IP查询设备历史数据,支持的参数说明如下:

-filter [FIELD,...]  对本次搜索结果数据中指定字段进行筛选,以逗号分隔(如:-filter "time,app,service")
-num [NUM]           设置显示的数据条数
-force               强制调用 ZoomEye API 查询,忽略本地缓存

其中,-filter参数支持的取值范围有:time,port,service,app,raw,*

使用示例:

./ZoomEye-go history "1.2.3.4" -filter "time=^2016-,app,service"
succeed to query (in 533.785779ms)

[History Info]

  1.2.3.4
  
  Hostname:          [unknown]
  Country:           United States
  City:              Mukilteo
  Organization:      [unknown]
  Last Updated:      2016-11-22T12:08:31
  
  Open Ports:        1
  Historical Probes: 1


[History Result]

  +---------------------+---------------------------+---------------------------+
  | Time                | Service                   | App                       |
  +---------------------+---------------------------+---------------------------+
  | 2016-11-22T12:08:31 | ssh                       | OpenSSH                   |
  +---------------------+---------------------------+---------------------------+
  | Total: 1                                                                    |
  +---------------------+---------------------------+---------------------------+

使用SDK API

使用示例:

package main

import (
	"github.com/gyyyy/ZoomEye-go/zoomeye"
)

func main() {
	// 初始化用户凭证
	zoom := zoomeye.New()
	jwt, _ := zoom.Login("username@zoomeye.org", "password")
	// 或使用 API-Key 进行初始化,不需要再调用 Login() 方法
	// zoom := zoomeye.NewWithKey("XXXXXXXX-XXXX-XXXXX-XXXX-XXXXXXXXXXX")

	// 查询用户资源信息
	info, _ := zoom.ResourcesInfo()

	// 搜索
	result, _ := zoom.DorkSearch("port:80 nginx", 1, "host", "app,service,os")
	// 多页搜索,5页(100条)以上会进行并发搜索,减少搜索耗时
  // results, _ := zoom.MultiPageSearch("wordpress country:cn", 5, "web", "webapp,server,os")
  // 多页搜索(结果合并)
	// result, _ := zoom.MultiToOneSearch("wordpress country:cn", 5, "web", "webapp,server,os")

	// 对搜索结果进行统计
	stat := result.Statistics("app,service,os")

	// 对搜索结果进行筛选
	filt := result.Filter("app,ip,title")

	// 设备历史搜索(需要高级用户或VIP用户权限,结果包含多少条记录就会扣多少额度,非土豪慎用)
	history, _ := zoom.HistoryIP("1.2.3.4")
  // 对搜索结果进行筛选
  histFilt := history.Filter("time=^2016", "app")
}

项目相关

最近更新