码迷,mamicode.com
首页 > 数据库 > 详细

CMDB项目之获取今日未采集资产列表和API验证

时间:2017-10-03 00:22:25      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:form   ges   ade   elf   logs   哪些   emc   amp   blog   

获取今日未采集资产列表:

要点:

1、server表添加两个字段:latest_date(可以为空);服务器状态信息;

2、哪些情况会获取到未采集服务器信息?

  ①latest_date为空的情况,比如初始创建尚未汇报资产;

  ②今日还未采集过,注意latest_date__date__lt<current_date,双下划线加date表示只取年月日部分。

  ③服务器状态为在线状态

3、服务器更新资产时设置current_date=datetime.datetime.now();

4、get_host_list函数:

  注意:内容放在response.text部分(response=request.get(url))

代码区:

 

###############服务端###############

@csrf_exempt
def server(request):
    ‘‘‘
    requests不能发送字典类型数据,纵观我们学的form表单提交数据,
    ajax发送数据,均是不支持字典类型数据的发送的。
    具体原因百度知晓。
    :param request: 
    :return: 
    ‘‘‘
    if request.method == ‘GET‘:
        # 获取今日未采集主机列表[latest_date为None或者latest_date不为今日且服务器状态为在线]
        current_date = date.today()
        host_list = models.Server.objects.filter(
            Q(Q(latest_date=None) | Q(latest_date__date__lt=current_date)) & Q(server_status_id=2)).values(‘hostname‘)
        ‘‘‘
        [‘hostname‘:‘c1.com‘]
        ‘‘‘
        host_list = list(host_list)
        print(host_list)
        return HttpResponse(json.dumps(host_list))

 

#############客户端#############

class SshSaltClient(BaseClient):

    def get_host_list(self):
        response=requests.get(self.api) #<Response [200]>
        # print(response.text)    # [{"hostname": "c1.com"}]注意这种用法
        return json.loads(response.text)

 

 

API验证

要点:过三关

第一关:时间限制(客户端时间与服务端相隔多久的时间以外,我们队请求做限制)

第二关:加密规则限制(主要应用MD5加密)

第三关:对于已访问过得加密str我们设置已访问列表,正常用户不可能再次拿着这个访问过得数据请求服务器,如果列表里没有str,证明是正常用户访问,记得把该条数据添加到已访问列表。

这个内容会越来越庞大,实际会应用到memcache和redis。

最后这三关基本已可以实现防黑客攻击的效果,但是不排除黑客网速比我们网速快的情况,不妨我们把要发送的数据做一层加密,接着黑客的网速早点提交至服务器,也未尝不可呢?

代码区:

##############客户端##############

import requests
import time
import hashlib


def md5(arg):
    md5 = hashlib.md5()
    md5.update(arg.encode(‘utf-8‘))
    return md5.hexdigest()


key = ‘asdfghjklmnbvcxz‘
ctime = str(time.time())
client_str = ‘%s|%s‘ % (key, ctime)
client_md5_str = md5(client_str)
client_header_str = ‘%s|%s‘ % (client_md5_str, ctime)
print(client_header_str)

response = requests.get(url=‘http://127.0.0.1:8000/api/tests.html‘, headers={‘auth-api‘: ‘cae76146bfa06482cfee7e4f899cc414|1506956350.973326‘})
print(response.text)

 

##############服务端##############

def md5(arg):
    md5 = hashlib.md5()
    md5.update(arg.encode(‘utf-8‘))
    return md5.hexdigest()

key = ‘asdfghjklmnbvcxz‘
vistied_str_dict={}

def tests(request):

    client_header_str = request.META.get(‘HTTP_AUTH_API‘)
    print(client_header_str)
    client_md5_str, client_ctime = client_header_str.split(‘|‘, maxsplit=1)
    client_float_ctime = float(client_ctime)
    server_float_ctime = float(time.time())
    # 第一关
    if (client_float_ctime + 20) < server_float_ctime:
        return HttpResponse("太慢了")

    # 第二关
    server_str = ‘%s|%s‘ % (key, client_ctime)
    server_md5_str = md5(server_str)

    if client_md5_str != server_md5_str:
        return HttpResponse(‘休想‘)

    # 第三关
    if vistied_str_dict.get(client_md5_str):
        return HttpResponse(‘放弃吧‘)
    else:
        vistied_str_dict[client_md5_str] = client_ctime
        return HttpResponse(‘你得到我了‘)

 

最后,未用装饰器,明天加上。

CMDB项目之获取今日未采集资产列表和API验证

标签:form   ges   ade   elf   logs   哪些   emc   amp   blog   

原文地址:http://www.cnblogs.com/metianzing/p/7622963.html

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