#!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # Author: f0rsaken

 import getopt
 import requests
 import sys
 import time

 USER = ""
 PASS = ""

 def main():
     try:
         opts, args = getopt.getopt(sys.argv[1:], "hu:p:m:q:l:", ["help", "user=", "pass=", "mode=", "query=", "limit="])
     except getopt.GetoptError as e:
         print("[-] %s" % e)
         usage()
         sys.exit(2)

     username = USER
     password = PASS
     mode = "host"
     query = ""
     limit = 2048

     for o, a in opts:
         if o in ("-h", "--help"):
             usage()
             sys.exit()
         elif o in ("-u", "--user"):
             username = a
         elif o in ("-p", "--pass"):
             password = a
         elif o in ("-m", "--mode"):
             if a in ("host", "web"):
                 mode = a
             else:
                 print("[-] Unknown Mode!")
                 usage()
                 sys.exit(2)
         elif o in ("-q", "--query"):
             query = a
         elif o in ("-l", "--limit"):
             try:
                 limit = int(a)
             except ValueError as e:
                 print("[-] %s" % e)
                 usage()
                 sys.exit(2)
         else:
             pass

     if not query:
         print("[-] Query Keyword Not Found!")
         usage()
         sys.exit(2)

     print("[!] Mode: %s" % mode)
     print("[!] Query: %s" % query)
     print("[!] Limit: %s" % limit)

     try:
         choice = raw_input("Start Query? [Y/n] ")
     except NameError as e:
         choice = input("Start Query? [Y/n] ")

     if choice.lower() == "n":
         sys.exit()

     authorization = get_authorization(username, password)
     if not authorization:
         sys.exit(1)

     resources_info = get_resources_info(authorization)
     if not resources_info:
         sys.exit(1)
     else:
         print("[*] Plan: %s" % resources_info["plan"])
         print("[*] Resources: Host %s Web %s" % (resources_info["resources"]["host-search"], resources_info["resources"]["web-search"]))

     result = list()
     page = 1
     while page <= limit:
         temp = search(authorization, mode, query, str(page))
         if not temp:
             break
         result.extend(extract(mode, temp))
         print("Download Page: %s" % page)
         page += 1
     result = set(result)

     log = "ZoomEye_" + str(time.time()) + ".txt"
     with open(log, "w") as f:
         f.writelines(result)

     print("Please Check The %s" % log)

 def usage():
     print("Usage: python %s [options]" % sys.argv[0])
     print("")
     print("Options:")
     print("  -h, --help                        Show Help Message And Exit")
     print("  -u USER, --user=USER              ZoomEye E-Mail")
     print("  -p PASS, --pass=PASS              ZoomEye Password")
     print("  -m MODE, --mode=MODE              host || web (Default: host)")
     print("  -q QUERY, --query=QUERY           Query Keyword")
     print("  -l LIMIT, --limit=LIMIT           Page Limit (Default: 2048)")

 def get_authorization(username, password):
     authorization = dict()
     access_token = get_access_token(username, password)
     if access_token:
         authorization["Authorization"] = "JWT " + access_token["access_token"]
     else:
         pass
     return authorization

 def get_access_token(username, password):
     try:
         r = requests.post("https://api.zoomeye.org/user/login", json={"username": username, "password": password})
     except requests.RequestException as e:
         print("[-] %s" % e)
         print("[-] Get Access Token Failed!")
     else:
         if r.status_code == requests.codes.ok:
             return r.json()
         else:
             print("[-] %s %s \n[-] %s" % (r.status_code, r.json()["error"], r.json()["message"]))
             print("[-] Get Access Token Failed!")

 def get_resources_info(authorization):
     try:
         r = requests.get("https://api.zoomeye.org/resources-info", headers=authorization)
     except requests.RequestException as e:
         print("[-] %s" % e)
         print("[-] Get Resources Info Failed!")
     else:
         if r.status_code == requests.codes.ok:
             return r.json()
         else:
             print("[-] %s %s \n[-] %s" % (r.status_code, r.json()["error"], r.json()["message"]))
             print("[-] Get Resources Info Failed!")

 "):
     try:
         url = "https://api.zoomeye.org/" + mode + "/search?query=" + query + "&page=" + page
         print("GET %s" % url)
         r = requests.get(url, headers=authorization)
     except requests.RequestException as e:
         print("[-] %s" % e)
         print("[-] %s Search Failed!" % mode.capitalize())
     else:
         if r.status_code == requests.codes.ok:
             return r.json()
         else:
             print("[-] %s %s \n[-] %s" % (r.status_code, r.json()["error"], r.json()["message"]))
             print("[-] %s Search Failed!" % mode.capitalize())

 def extract(mode, temp):
     result = list()
     if mode == "host":
         for line in temp["matches"]:
             result.append(line["ip"] + ":" + str(line["portinfo"]["port"]) + "\n")
     else:
         for line in temp["matches"]:
             result.append(line["site"] + "\n")
     return result

 if __name__ == "__main__":
     main()

ZoomEye 钟馗之眼 搜索工具 基于API的更多相关文章

  1. ZoomEye(钟馗之眼)搜索技巧记录:

    做个记录方便查看 钟馗之眼: 指定搜索的组件:    app:组件名称    ver:组件版本    例:搜索 apache组件版本2.4:app:apache var:2.4指定搜素的端口:     ...

  2. 基于文本图形(ncurses)的文本搜索工具 ncgrep

    背景 作为一个VIM党,日常工作开发中,会经常利用grep进行关键词搜索,以快速定位到文件.如图: 利用grep进行文本搜索 但是,这一过程会有两个效率问题: 展示的结果无法进行直接交互,需要手动粘贴 ...

  3. 揭开Faiss的面纱 探究Facebook相似性搜索工具的原理

    https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html 本月初雷锋网报道,Facebook 开源了 AI 相似性搜索工具 Faiss.而在 ...

  4. 文件快速搜索工具-Everything的使用(转)

    首先它是一款基于名称实时定位文件和目录的搜索工具,有以下几个优点: 快速文件索引 快速文件搜索 较低资源占用 轻松分享文件索引 实时跟踪文件更新 通过使用everything小工具,可以提高我们的工作 ...

  5. Everything:速度最快的文件名搜索工具(Linux版本) 转

    Everything是windows的一个快速搜索工具. 基本上转移到Linux上来后,没有怎么用过. 一直在用Gnome-Do,感觉还可以. 这个程序只是用来练习wxPython用的,目前还只是一个 ...

  6. 文件搜索工具everything

    Everything是voidtools开发的一款文件搜索工具,官网描述为“基于名称实时定位文件和目录(Locate files and folders by name instantly) (“Ev ...

  7. Python开发环境Wing IDE搜索工具介绍

    Wing IDE编辑器的搜索工具提供了一个基于友好GUI的搜索和替换工具. 某些情况下搜索可能会跨越整个文件,也有可能被限制到当前所选择的区域:可以区分大小写,也可以设置为不区分:可以被限制为只匹配整 ...

  8. [转帖]推荐一款比 Find 快 10 倍的搜索工具 FD

    推荐一款比 Find 快 10 倍的搜索工具 FD https://www.hi-linux.com/posts/15017.html 试了下 很好用呢. Posted by Mike on 2018 ...

  9. centos locate搜索工具

    locate搜索工具 [root@localhost ~]# yum install mlocate [root@localhost ~]# locate passwd locate: can not ...

随机推荐

  1. Windows无法完成安装,若要在此计算机上安装Windows,请中心启动安装。

    现在安装系统已经很简单了,我觉得U盘启动的话两步就差不多了, 壹:设置BIOS,将U盘启动作为系统默认启动选项 贰:直接进去大白菜之类的,一键安装... 今天终于看到第三部了, 报错:Windows无 ...

  2. [Storm] No data flows into bolt

    最近在HDP2.1的HBase环境中安装了一个Storm测试机器(单节点,JDK8),遇到了几个问题,记录下来. 尝试步骤 1. 使用和HBase一样HDP版本,直接安装Storm yum insta ...

  3. [转]MySQL日志——Undo | Redo

    本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...

  4. Entity Framework 使用Mysql的配置文件

    <?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...

  5. HDU 1690 Bus System

    题目大意:给出若干巴士不同价格的票的乘坐距离范围,现在有N个站点,有M次询问,查询任意两个站点的最小花费 解析:由于是多次查询不同站点的最小花费,所以用弗洛伊德求解 时间复杂度(O^3) 比较基础的弗 ...

  6. mysql使用load导入txt文件所遇到的问题及解决方法

    导入txt文件,有导入向导这种方式: 另外可以使用load的方式导入.最开始使用以下代码插入: load data local infile 'F:\\Data\\predict_data.txt' ...

  7. C#数字日期装换为中文日期

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  8. JDBC的批处理操作三种方式 pstmt.addBatch()

    package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...

  9. Angular2 依赖注入

    1. 使用DI 依赖注入是一个很重要的程序设计模式. Angular 有自己的依赖注入框架,离开了它,我们几乎没法构建 Angular 应用.它使用得非常广泛,以至于几乎每个人都会把它简称为 DI. ...

  10. 小米4 miui专用 Xposed安装器86版

    转载自 http://www.52pojie.cn/thread-516435-1-1.html 写在前面:各位用xp受到不同限制,有些机型还找不到框架包,又要刷第三方rec又要谨慎选择框架版本.官方 ...