CMDB项目之获取今日未采集资产列表和API验证
Posted 始怡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMDB项目之获取今日未采集资产列表和API验证相关的知识,希望对你有一定的参考价值。
获取今日未采集资产列表:
要点:
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验证的主要内容,如果未能解决你的问题,请参考以下文章