概述
网络空间搜索引擎语法及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请求中的Headers | headers: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的应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复