我是靠谱客的博主 灵巧吐司,最近开发中收集的这篇文章主要介绍信息搜集:网络空间搜索引擎语法及API的应用网络空间搜索引擎语法及API的应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

网络空间搜索引擎语法及API的应用


​ 搜索引擎是指从互联网搜集信息,经过一定整理以后,提供给用户进行查询的系统。传统的搜索引擎对我们来说并不陌生,像Google、百度等。与传统搜索引擎相比,网络空间搜索引擎有很大不同,其搜索目标为全球的IP地址,实时扫描互联网和解析各种设备,对网络中的设备进行探测识别和指纹分析,并将其扫描的目标信息进行分布式存储,供需求者检索使用。

1. 传统网络空间搜索框架

一般由五部分组成:

§ 扫描和指纹识别 § 分布存储 § 索 引 § UI界面 § 调度程序

2. 常见搜索引擎平台

目前的网络空间搜索引擎平台比较多,各具特色,均可通过用户指定的关键词来搜索网络中的设备或者设备信息。常见的网络空间搜索引擎有Shodan、Censys、ZoomEye(钟馗之眼)、Fofa、PunkSPIDER、IVRE(Drunk)和傻蛋等。现介绍ZoomEye(钟馗之眼)。

ZoomEye(钟馗之眼)是国内安全厂商知道创宇倾力打造的知名空间搜索引擎,它可以识别网络中站点组件指纹和主机设备指纹,更侧重于Web资产发现。下图是ZoomEye搜索引擎界面:

3. 搜索引擎语法

ZoomEye支撑公网设备指纹检索和Web指纹检索。Web指纹识别包括应用名、版本、前端框架、后端框架、服务端语言、服务器操作系统、网站容器、内容管理系统和数据库等。设备指纹识别包括应用名、版本、开放端口、操作系统、服务名、地理位置等。直接输入关键词即可开始搜索。

设备指纹检索语法

语 法描 述示 例
app:组件名组件名称app:“Apaache httpd”
ver:组件版本组件的版本号ver:“2.2.16”
port:端口号目标系统开放端口port:3389
os:操作系统目标操作系统类型os:linux
service:服务名系统运行的服务类型service:webcam
hostname:主机名目标系统的主机名hostname:google.com
country:国家或者地区代码目标系统的地理位置country:US
city:城市名称目标系统所在城市city:“beijing”
ip:指定的IP地址目标系统对应的IP地址ip:8.8.8.8
org:组织机构所属的组织机构org:“Vimpelcom”
asn:自治系统编号自治系统编号asn:42893
ssl: SSL证书SSL证书ssl:“corp.google.com”

Web指纹检索语法

语 法描 述示 例
app:组件名组件名称app:“Apache httpd”
ver:组件版本组件的版本号ver:“2.2.16”
site:网站域名目标网站域名site:google.com
os:操作系统目标操作系统类型os:linux
title:页面标题网站的标题title:Nginx
keywords:页面关键字网站页面的关键字keywords:Nginx
desc:页面说明页面描述字段desc:Nginx
headers:请求头部HTTP请求中的Headersheaders:Server
country:国家或者地区代码目标系统的地理位置country:US
city:城市名称目标系统所在城市city"beijing"
ip:指定的IP地址目标系统对应的IP地址ip:8.8.8.8
org:组织机构所属的组织机构org:“Vimpelcom”
asn:自治系统号自治系统编号asn:42893

下面列举搜索设备指纹的使用示例,比如查询在美国纽约市的Linux系统,且系统中运行组件为Apache的服务器,语法构造如下:

app:"Apache httpd" + os:"linux" + country:US + city:"New York City"

搜索结果如下图:

接下来搜索Web指纹检索的使用示例,比如查询美国纽约地区使用Linux系统的网站,语法构造如下:

site:google.com + os:linux + country:US + city:"New York City"

搜索结果如下图:

4. 搜索引擎API的应用

ZoomEye除了以上介绍的智能检索功能以外,还提供了强大的Result API功能,用户通过它能够更好地与平台连接,调用平台各类资源。现利用Python程序调用ZoomEye的API接口实现自动化信息搜集。ZoomEye—API被分为两种验证方式,API-KEY和登录验证(Login verification)。

运 行 环 境:

OS: macOS Monterey Version 12.3.1(英文版)

IDE:PyCharm 2020.1

Python: Version 3.9.9

1) 登录验证(Login verification)

​ 平台主要使用的是Json Web Token的登录验证方式,用户进行登录,并获取access_token 就可以直接调用API功能,使用host方法查询开放6379端口的服务器IP地址,并输出检索到的IP地址和端口号,示例代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :4/18/22 7:03 PM
# 文件      :Zoomeye_host_token.py
# IDE      :PyCharm

import requests
import json

import zoomeye.sdk as zoomeye

# 定义一个函数获取access_token
def get_access_token(username, password):
    # 实例化一个zm对象
    zm = zoomeye.ZoomEye()
    # 账号赋值给对象的账号属性,账号密码赋值给账号密码属性
    zm.username = username
    zm.password = password
    return zm.login()

# 定义主函数
def main():
    # 输入zoomeye账号和密码
    username = input('请输入账号: ')
    password = input('请输入账号密码:')
    # headers里的Authorization值必须JWT前缀加空格
    headers = { "Authorization":"JWT " + get_access_token(username=username, password=password)}
    # 赋值给url
    url = 'https://api.zoomeye.org/host/search?query=port:6379&page=1&facets=app,os'
    # 请求信息赋值给info
    info = requests.get(url=url, headers=headers)
    # 转换为json数据
    r_decoded = json.loads(info.text)
    # 遍历匹配项列表,输出IP地址和端口号
    for line in r_decoded['matches']:
        print(line['ip'] + ': ' + str(line['portinfo']['port']))

#  启动主程序
if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print('interrupted by user, killing all threads....')

运行结果如下:

备注:headers头部Authorization必须包含JWT 前缀

2)API-KEY 验证

对于每个账户,在它的个人资料页的底部会找到一串API-KEY字符串,将这个字符串添加到ZoomEye-API字段。本人的个人资料的字符串如下图:

备注:API-KEY与账号绑定而且可以被重置

示例代码如下:

#_*_coding:utf-8_*_
# 作者      :liuxiaowei
# 创建时间   :4/18/22 4:11 PM
# 文件      :ZoomEye_host.py
# IDE      :PyCharm

# 导入相关模块
import requests
import json

# 定义主函数
def main():
    # 定义头部headers
    headers = { "API-KEY":"E4b729d3-5730-D778B-87f2-408604aedbd"}
    # 赋值url
    url = 'https://api.zoomeye.org/host/search?query=port:6379&page=1&facets=app,os'
     # 请求信息赋值给info
    info = requests.get(url=url, headers=headers)
    # 转换为json数据
    r_decoded = json.loads(info.text)
    # 遍历匹配项列表,输出IP地址和端口号
    for line in r_decoded['matches']:
        print(line['ip'] + ': ' + str(line['portinfo']['port']))

# 运行主程序
if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print('interrupted by user, killing all threads....')

运行结果如下图:

希望此文对您有所帮助和启发,欢迎点赞收藏和转发加关注!谢谢!

最后

以上就是灵巧吐司为你收集整理的信息搜集:网络空间搜索引擎语法及API的应用网络空间搜索引擎语法及API的应用的全部内容,希望文章能够帮你解决信息搜集:网络空间搜索引擎语法及API的应用网络空间搜索引擎语法及API的应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部