Python调用Zoomeye搜索接口的实现

作者:lyshark 时间:2021-08-26 03:59:24 

钟馗之眼是一个强大的搜索引擎,不同于百度谷歌,它主要收集网络中的主机,服务等信息,国内互联网安全厂商知道创宇开放了他们的海量数据库,对之前沉淀的数据进行了整合、整理,打造了一个名符其实的网络空间搜索引擎ZoomEye,运用Python接口可以灵活的实现数据采集。

钟馗之眼的常用搜索关键字如下所示。

app:组件名称
ver:组件版本
搜索 apache组件    版本2.4  --> app:apache ver:2.4
port:端口号 ---> 例如:搜索开放了SSH端口的主机 port:22
指定搜索的操作系统 OS:操作系统名称 ---> OS:Linux
指定搜索的服务 service:服务名称 --->  例如,搜素SSH服务  Service:SSH
指定搜索的地理位置范 --> country:国家   city:城市名    country:China --> city:Beijing
搜索指定的CIDR网段 例如: CIDR:192.168.158.12/24
搜索指定的网站域名 ---> site:www.baidu.com
搜索指定的主机名 ---> hostname:zwl.cuit.edu.cn
搜索指定的设备名  --> device:router
搜索具有特定首页关键词的主机 ---> keyword:technology

提供的搜索脚本如下。

import os,json,requests
import argparse

def login():
   url_login="https://api.zoomeye.org/user/login"
   data={
       "username": "1098395580@qq.com",
       "password": "xiaohua@1998"
   }
   data=json.dumps(data)
   r=requests.post(url=url_login,data=data)
   return json.loads(r.content)['access_token']

def GetResidual(token):
   url="https://api.zoomeye.org/resources-info"
   headers={'Authorization':'JWT ' + token}
   r=requests.get(url=url,headers=headers)
   datas=json.loads(r.content)
   print("剩余搜索次数: {}".format(datas['resources']['search']))

def Search(token,search,files,page):
   url="https://api.zoomeye.org/web/search?query={}&page={}".format(search,page)
   headers={'Authorization':'JWT ' + token}
   r=requests.get(url=url,headers=headers)
   data = json.loads(r.content)['matches']
   with open(files,'w',encoding='utf-8') as f:
        json.dump(data,f,ensure_ascii=False)
   print("[+] 保存文件: {} 长度: {} 页码: {} 查询语法: {}".format(files,len(data),page,search))

def Get_System(files):
   try:
       with open(files,'r',encoding='utf8') as fp:
           json_data = json.load(fp)
           json_len = len(json_data)
           for item in range(0,json_len):
               print("IP地址: %15s   |" %(json_data[item]['ip'][0]),end="")
               print("地区: %1s %3s "%(json_data[item]['geoinfo']['continent']['names']['zh-CN'],
               json_data[item]['geoinfo']['subdivisions']['names']['zh-CN']))
   except Exception:
       pass

def Banner():
   print("  _          ____  _                _    ")
   print(" | |   _   _/ ___|| |__   __ _ _ __| | __")
   print(" | |  | | | \___ \| '_ \ / _` | '__| |/ /")
   print(" | |__| |_| |___) | | | | (_| | |  |   < ")
   print(" |_____\__, |____/|_| |_|\__,_|_|  |_|\_\\")
   print("       |___/                             \n")
   print("E-Mail: me@lyshark.com")

if __name__== "__main__":
   Banner()
   parser = argparse.ArgumentParser()
   parser.add_argument("-s","--search",dest="search",help="根据传入语法搜索指定内容")
   parser.add_argument("-f","--file",dest="file",help="保存文件的名字 *.json")
   parser.add_argument("-p","--page",dest="page",help="需要检索第几页的数据")
   parser.add_argument("-q","--query" ,dest="query",help="单独使用,可用于查询剩余次数")
   parser.add_argument("-g","--get" ,dest="get",help="提取本地json文件并解析出关键数据")
   args = parser.parse_args()
   if args.search and args.file and args.page:
       token = login()
       Search(token,args.search,args.file,args.page)
   elif args.query and args.search == None:
       token = login()
       GetResidual(token)
   elif args.get:
       Get_System(args.get)
   else:
       parser.print_help()

查询使用次数: 默认情况下,钟馗之眼每月给与10000条左右的查询次数,可以使用 -q 参数实现次数的查询。

Python调用Zoomeye搜索接口的实现

**搜索功能的使用:**通过-s选项指定你需要搜索的关键字,可以结合钟馗之眼搜索语法使用-p就是搜索的页码数-f保存为json文件。

Python调用Zoomeye搜索接口的实现

在JSON中解析IP地址: 在本地JSON文件中解析IP地址,提取出关键数据。

Python调用Zoomeye搜索接口的实现

来源:https://blog.51cto.com/lyshark/5989486

标签:Python,Zoomeye,搜索接口
0
投稿

猜你喜欢

  • Django处理Ajax发送的Get请求代码详解

    2023-06-29 08:40:40
  • ASP字符串大写转换成小写 ASP小写转换成大写 ucase lcase

    2011-03-31 10:59:00
  • python cv2在验证码识别中应用实例解析

    2022-03-29 09:35:58
  • Python标准库使用OrderedDict类的实例讲解

    2022-07-17 22:27:31
  • Tensorflow2.1 MNIST图像分类实现思路分析

    2023-04-17 03:35:32
  • javascript 词法作用域和闭包分析说明

    2024-04-17 09:56:42
  • 初步探究Python程序的执行原理

    2022-11-06 10:30:20
  • redis服务器环境下mysql实现lnmp架构缓存

    2024-01-20 01:44:29
  • python 配置uwsgi 启动Django框架的详细教程

    2022-10-29 06:11:15
  • Python实现简单拆分PDF文件的方法

    2022-09-27 19:20:37
  • 编写Python脚本把sqlAlchemy对象转换成dict的教程

    2023-02-22 07:26:47
  • PHP登录(ajax提交数据和后台校验)实例分享

    2024-04-28 09:43:41
  • SQL Server数据库管理常用SQL和T-SQL语句

    2009-05-07 14:01:00
  • Python程序中使用SQLAlchemy时出现乱码的解决方案

    2022-11-07 23:19:28
  • python用什么编辑器进行项目开发

    2021-04-17 19:25:20
  • python文件操作之批量修改文件后缀名的方法

    2023-05-10 15:57:06
  • python中k-means和k-means++原理及实现

    2022-01-17 10:52:07
  • python是先运行metaclass还是先有类属性解析

    2022-02-10 23:24:48
  • Python中的Numpy 面向数组编程常见操作

    2021-08-21 20:31:32
  • 重命名SQLServer数据库的方法

    2024-01-26 15:40:34
  • asp之家 网络编程 m.aspxhome.com