首页 > 编程语言 >Python 调用Zoomeye搜索接口

Python 调用Zoomeye搜索接口

时间:2023-01-05 10:35:52浏览次数:32  
标签:__ args Python Zoomeye 接口 json 搜索 print data

钟馗之眼是一个强大的搜索引擎,不同于百度谷歌,它主要收集网络中的主机,服务等信息,国内互联网安全厂商知道创宇开放了他们的海量数据库,对之前沉淀的数据进行了整合、整理,打造了一个名符其实的网络空间搜索引擎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": "[email protected]",
        "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: [email protected]")

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 参数实现次数的查询。

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

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

标签:__,args,Python,Zoomeye,接口,json,搜索,print,data
From: https://blog.51cto.com/lyshark/5989486

相关文章

  • PythonSpider
    ......
  • python爬虫之抓取高清壁纸
    对于很多电脑玩家喜欢给自己电脑装饰精美的壁纸,但是碍于图片大小清晰度等原因无法找到合适的,今天我就利用爬虫技术手段,现实高清壁纸抓取,需要的小伙伴可以一起过来看看!#cod......
  • 嵌入式:I/O接口扩展
    嵌入式:I/O接口扩展S3C2410A共有117个多功能复用输入输出口(I/O口),分为8组PORTA~PORTH。PORTA除了作为功能口外,它只作为输出口使用;其余的PORTB~PORTH都可以作为输入输出口使......
  • 极客编程python入门-内建模块datetime
    datetimedatetime是Python处理日期和时间的标准库。获取当前日期和时间>>>fromdatetimeimportdatetime>>>now=datetime.now()#获取当前datetime>>>print(now)2015......
  • Python爬虫常用哪些库?
    经常游弋在互联网爬虫行业的程序员来说,如何快速的实现程序自动化,高效化都是自身技术的一种沉淀的结果,那么使用Python爬虫都会需要那些数据库支持?下文就是有关于我经常使用的......
  • Python 实现Ping命令状态检测
    ping是一种因特网包探索器,用于测试网络连接量的程序,Ping是工作在TCP/IP网络体系结构中应用层的一个服务命令,主要是向特定的目的主机发送ICMP请求报文,测试目的站是否可达......
  • Python源设置以及国内源地址
    #########国内源地址##############腾讯开源镜像站http://mirrors.cloud.tencent.com/pypi/simple豆瓣http://pypi.douban.com/simple/网易开源镜像站http://mirrors.1......
  • Python学习day02
    一、用户交互1.猜年龄death_age=80name=input("yourname:")age=int(input("yourage:"))print("yourname"name)print("youcanstilllivefor"death_age-age"yea......
  • python中模块的__all__属性详解
    python中模块的__all__属性详解python模块中的__all__属性,可用于模块导入时限制示例1普通类#kk.pyclassA():def__init__(self,name,age):self.name......
  • python组合数据类型(容器数据类型)
    全!python组合数据类型(容器类型)组合数据类型为python解释器中内置的标准类型,包含组合数据类型在内的内置标准类型有:数字、序列、映射、类等等序列类型三种基本序列类......