CMDB项目获取今天的未收资产清单和API验证

优采云 发布时间: 2020-08-08 20:53

  获取今天未收资产的列表:

  要点:

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

  2. 在什么情况下会获得未采集的服务器信息?

  ①当last_date为空时,例如尚未报告的资产的初始创建;

  ②今天尚未采集,请注意latest_date__date__lt

  ③服务器状态为在线

  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) #

# 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('你得到我了')

  最后,装饰器未使用,明天将添加.

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线