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 ...
随机推荐
- sqlserver数据库标注为可疑的解决办法(转)
前几天客户那边的服务器死机了,然后客户强制关机,重新启动服务器后,系统就没法正常使用,连接不上服务器,我远程操作后,看到数据库标注为可疑,由于客户之前没备份数据库,看来只能是修复了: 1:停止数据库服 ...
- 用C#创建Windows服务(Windows Services)
用C#创建Windows服务(Windows Services) 学习: 第一步:创建服务框架 创建一个新的 Windows 服务项目,可以从Visual C# 工程中选取 Windows 服务(W ...
- web性能优化
常用方法 压缩源码和图片 JavaScript文件源代码:可以采用混淆压缩的方式,CSS文件源代码进行普通压缩,JPG图片可以根据具体质量来压缩为50%到70%,PNG可 以使用一些开源压缩软件来压缩 ...
- 关于li元素嵌套的事儿
今天阅读<锋利的jQuery>第二版2.6节案例研究部分的时候,遇到一个问题. <ul> <li class="a1"><a href=& ...
- Block使用
1.对block的理解 > block是iOS4.0之后出现的,是仿照java中匿名函数所创造的,它是c级别的语法,效率比协议-代理高 > block的是一个匿名函数(没有名字的函数) ...
- iOS9网络适配(ATS)
[转]iOS9 new_001:iOS9网络适配(ATS) 下载Xcode7打开APP后大家都发现自己的APP无法联网了,why? 苹果官方文档介绍如下: App Transport Security ...
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- flask源码分析
本flask源码分析不间断更新 而且我分析的源码全是我个人觉得是很beautiful的 1 flask-login 1.1 flask.ext.login.login_required(func),下 ...
- C#中base 关键字的作用
引用:http://msdn.microsoft.com/en-us/library/hfw7t1ce.aspx base base 关键字用于从派生类中访问基类的成员: 调用基类上已被其他方法重写的 ...
- C语言移位算符">>"
右移算符>>是将二进制数的每一位右移.如:a=32,a>>2,就是将32的二进制数100000每一个二进制位向右移动两位.得到的是二进制数1000,也就是8. #include ...