zoomeye api information collection

0x00 前言

最近由于工作需要选择了使用zoomeye,个人觉得它更符合国内的用户使用习惯,比起shadan,censys这些国外的,简体中文更适合我们,api的文档也更容易看懂。zoomeye的api接口使用很方便,主要使用的是 Json Web Token 的登录验证方式,用户只需使用用户名和密码,登录一次,获取access_token。并在接下来的其他 API 请求 HTTP 头中带上

access_token (格式如下 Authorization: JWT+access_token) 即可,无需再次登录验证。

0x01 具体实现

所以通过python的requests模块就可以很好的使用,首先是模拟登录获取access_key.

def login():
    user = raw_input('[-] input : username :')
    passwd = raw_input('[-] input : password :')
    data = {
        'username' : user,
        'password' : passwd
    }
    data_encoded = json.dumps(data)
    try:
        r = requests.post(url = 'http://api.zoomeye.org/user/login',data = data_encoded)
        r_decoded = json.loads(r.text)
        print r_decoded
        global access_token
        access_token = r_decoded['access_token']
    except Exception,e:
        print '[*] login fail, please try again '
        exit()

获取access_key后,同样用requests模块带上header头模拟一个get请求,然后抓取返回的json数据,利用python自带的json模块可以将返回的数据转化为python的数据结构,有点像多维数组,最后再通过键名访问key值。
zoomeye文档中给出的语法如下:
http://api.zoomeye.org/host/search?query=”xxxx”&facet=app,os,country&page=

query	string	查询关键词	   必需	    port:80 nginx
page	integer	翻页参数(默认为1)	   可选	     7
facets	string	统计项目,如果为多个,使用, 号分隔各个统计项	可选	app,device

详细实现代码:

def apiTest():
    page = 1
    global access_token
    with open('access_token.txt','r') as input:
        access_token = input.read()
    headers = {
        'Authorization' : 'JWT ' + access_token,
    }
    while(True):
        try:
            r = requests.get(url = 'http://api.zoomeye.org/host/search?query="corporate/webpages/login.jsp"&facet=app,os,country&page=' + str(page),headers = headers)
            r_decoded = json.loads(r.text)
            for x in r_decoded['matches']:
                print x['ip']

总的来说,zoomeye对于一般的信息收集还是很好用的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注