码迷,mamicode.com
首页 > 其他好文 > 详细

Censys

时间:2017-11-07 18:01:50      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:for   get   ase   put   互联网   查询   也有   lease   country   

 

技术分享

Censys

  Censys持续监控互联网上所有可访问的服务器和设备,以便您可以实时搜索和分析它们,了解你的网络攻击面,发现新的威胁并评估其全球影响。从互联网领先的扫描仪ZMap的创造者来说,我们的使命是通过数据驱动安全。

  Censys跟国外的Shodan和国内的ZoomEye类似,可以搜索世界范围内的联网设备。Shodan和ZoomEye是个人用的比较多的两款,当然国内还有傻蛋fofa, 国外也有其他类似的搜索引擎,这里就不一一列举了。

  Censys与Shodan相比是一款免费搜索引擎,当然也有一定的限制(速度和搜索结果),而新改版后的ZoomEye对国内的搜索结果做了处理,几乎没有什么价值,对于非天朝的搜索还是可以适用的,如果对这两款搜索引擎感兴趣的朋友可以去试用一下,博客中也有关于这两款搜索引擎介绍,可自行查找。

  先来膜拜一下发表在信息安全顶会CCS‘15 : A Search Engine Backed by Internet-Wide Scanning 。

  Censys提供6种API的使用方式,如下:

 

技术分享

  不过这里我们仅介绍第一种的使用,即获取搜索条件下的ip地址,这个也是我们用的最多的。

使用说明

  当然在使用之前也是需要注册一个账号的,因为在使用API时需要提供API Credentials即你的ID和Secret,可以在个人信息中看到。

技术分享

 

   最下面是使用的速度限制,我们可以在程序中设置一个延时,比如每查询一次睡眠三秒钟,总体来说,速度还是比较可观的。

官方示例

技术分享

  初看确实感觉搜索语法好像略微繁琐,没有Shodan和ZoomEye那么简练,而且文档也不够,怎么说呢,简单明了吧。不信你点开看看

查询语法

  Search 的Data Parameters 主要有四个,分别是

  • query:查询语句
  • page:查询页
  • fields:查询的结果域(可选)
  • flatten:平整的结果(可选)
Example:
{
  "query":"80.http.get.headers.server: Apache",
  "page":1,
  "fields":["ip", "location.country", "autonomous_system.asn"],
  "flatten":true
}

  好了,说明部分差不多到这里了,下面给出一个完整的示例。

示例

  一般来说我们在查询的时候,会加上一定的限制条件,比如天朝的某些设备,如:"query": "weblogic and location.country_code: CN"。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys
import json
import requests
import time

API_URL = "https://www.censys.io/api/v1"
UID = "aa7c1f3a-b6ab-497d-9788-5e9e4898a655"
SECRET = "agcyou4JbRZpSadoH6i4D28VaB4XB2e4"
page = 1
PAGES = 1


def getIp(query, page):
    ‘‘‘
    Return ips and total amount when doing query
    ‘‘‘
    iplist = []
    data = {
        "query": query,
        "page": page,
        "fields": ["ip", "protocols", "location.country"]
    }
    try:
        res = requests.post(API_URL + "/search/ipv4", data=json.dumps(data), auth=(UID, SECRET))
    except:
        pass
    try:
        results = res.json()
    except:
        pass
    if res.status_code != 200:
        print("error occurred: %s" % results["error"])
        sys.exit(1)
    # total query result
    iplist.append("Total_count:%s" % (results["metadata"]["count"]))

    # add result in some specific form
    for result in results["results"]:
        for i in result["protocols"]:
            # iplist.append(result["ip"] + ‘:‘ + i + ‘ in ‘ + result["location.country"][0])
            iplist.append(result["ip"] + : + i)
    # return ips and total count
    return iplist, results["metadata"]["count"]


if __name__ == __main__:

    query = input(please input query string : )
    ips, num = getIp(query=query, page=page)

    print("Total_count:%s" % num)

    dst = input(please input file name to save data (censys.txt default) : )

    # 保存数据到文件
    if dst:
        dst = dst + .txt
    else:
        dst = censys.txt

    # get result and save to file page by page
    with open(dst, a) as f:
        while page <= PAGES:
            print(page : + str(page))
            iplist, num = (getIp(query=query, page=page))
            page += 1

            print(iplist, \nlen = , len(iplist))

            for i in iplist:
                f.write(i + \n)
            time.sleep(3)
    print(Finished. data saved to file, dst)

  好像结果不是很准确 ~ 哈哈 ~ 另外,个人可以对返回iplist做相应的改变以方便自己使用 ~ 

References

  信息收集之censys

 

Censys

标签:for   get   ase   put   互联网   查询   也有   lease   country   

原文地址:http://www.cnblogs.com/Hi-blog/p/7798940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!