ZoomEye 钟馗之眼 搜索工具 基于API
#!/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的更多相关文章
- ZoomEye(钟馗之眼)搜索技巧记录:
做个记录方便查看 钟馗之眼: 指定搜索的组件: app:组件名称 ver:组件版本 例:搜索 apache组件版本2.4:app:apache var:2.4指定搜素的端口: ...
- 基于文本图形(ncurses)的文本搜索工具 ncgrep
背景 作为一个VIM党,日常工作开发中,会经常利用grep进行关键词搜索,以快速定位到文件.如图: 利用grep进行文本搜索 但是,这一过程会有两个效率问题: 展示的结果无法进行直接交互,需要手动粘贴 ...
- 揭开Faiss的面纱 探究Facebook相似性搜索工具的原理
https://www.leiphone.com/news/201703/84gDbSOgJcxiC3DW.html 本月初雷锋网报道,Facebook 开源了 AI 相似性搜索工具 Faiss.而在 ...
- 文件快速搜索工具-Everything的使用(转)
首先它是一款基于名称实时定位文件和目录的搜索工具,有以下几个优点: 快速文件索引 快速文件搜索 较低资源占用 轻松分享文件索引 实时跟踪文件更新 通过使用everything小工具,可以提高我们的工作 ...
- Everything:速度最快的文件名搜索工具(Linux版本) 转
Everything是windows的一个快速搜索工具. 基本上转移到Linux上来后,没有怎么用过. 一直在用Gnome-Do,感觉还可以. 这个程序只是用来练习wxPython用的,目前还只是一个 ...
- 文件搜索工具everything
Everything是voidtools开发的一款文件搜索工具,官网描述为“基于名称实时定位文件和目录(Locate files and folders by name instantly) (“Ev ...
- Python开发环境Wing IDE搜索工具介绍
Wing IDE编辑器的搜索工具提供了一个基于友好GUI的搜索和替换工具. 某些情况下搜索可能会跨越整个文件,也有可能被限制到当前所选择的区域:可以区分大小写,也可以设置为不区分:可以被限制为只匹配整 ...
- [转帖]推荐一款比 Find 快 10 倍的搜索工具 FD
推荐一款比 Find 快 10 倍的搜索工具 FD https://www.hi-linux.com/posts/15017.html 试了下 很好用呢. Posted by Mike on 2018 ...
- centos locate搜索工具
locate搜索工具 [root@localhost ~]# yum install mlocate [root@localhost ~]# locate passwd locate: can not ...
随机推荐
- getchar fflush 的分析笔记
问题描述: 统计从键盘输入的若干个字符中有效字符的个数,以换行符作为输入结束.有效字符是指第一个空格符前面的字符,若输入字符中没有空格符,则有效字符为除了换行符之外的所有字符. 示例代码: #incl ...
- 子div设置float后导致父div无法自动撑开的问题
子div设置float后会导致父div无法自动撑开 原因:内部的DIV因为float:left之后,就丢失了clear:both和display:block的样式,所以外部的DIV不会被撑开. 以下是 ...
- V4L2框架分析学习二
转载于:http://www.techbulo.com/1198.html v4l2_device v4l2_device在v4l2框架中充当所有v4l2_subdev的父设备,管理着注册在其下的子设 ...
- Set集合的使用
#include<iostream> #include<set> using namespace std; typedef struct { int i,j; char s; ...
- 读取图像,LUT以及计算耗时
使用LUT(lookup table)检索表的方法,提高color reduce时对像素读取的速度. 实现对Mat对象中数据的读取,并计算color reduce的速度. 方法一:使用Mat的ptr( ...
- MySQL日志
在MySQL中共有4中日志:错误日志.二进制日志.查询日志和慢查询日志 一.错误日志 错误日志名 host_name.err,并默认在参数DATADIR指定的目录中写入日志文件.可使用 --log-e ...
- 悲剧啊!Mysql的上古BUG!!!
导读 这是MySQL8.0修复的上古bug之一,在2003年由Percona的CEO(当时应该还没Percona吧)提出的bug#199,光看这bug号就扑面而来一股上古时代的沧桑气息. 问题的本质在 ...
- 项目vue2.0仿外卖APP(二)
vue-cli开启vue.js项目 github地址:https://github.com/vuejs/vue-cli Vue.js开发利器vue-cli,是vue的脚手架工具. 在工地上,脚手架是工 ...
- 全排列算法的JS实现
问题描述:给定一个字符串,输出该字符串所有排列的可能.如输入“abc”,输出“abc,acb,bca,bac,cab,cba”. 虽然原理很简单,然而我还是折腾了好一会才实现这个算法……这里主要记录的 ...
- leetcode一些常用函数
6移位操作 “>> 右移,高位补符号位” 这里右移一位表示除2“>>> 无符号右移,高位补0”: 与>>类似“<< 左移” 左移一位表示乘2,二位 ...