抓包服务实现(9)—Django服务实现Rewrite
Django服务针对Rewrite如何设计?
- 保存Rewrite配置并支持修改、删除
- 能选择Rewrite配置并确定Map
- 支持更改request、response任意字段
- Map Local规则优先级高于Rewrite
核心问题是如何修改request、response任意字段的值
保存Rewrite配置
我们希望有一个Rewrite总表,用来记录并提供选择去确定Map
from native_project.response import Response
from native_project.mongdb import MongoDB
from bson import ObjectId
MappingMongoDB = MongoDB('rewrite_settings')
TemporaryMongoDB=MongoDB('temporary_rewrite')
def save_rewrite(request):
if request.method == 'GET':
map_title = request.GET.get('map_title')
path = request.GET.get('path')
rewrite_way = request.GET.get('rewrite_way')
field = request.GET.get('field')
field_value = request.GET.get('field_value')
if MappingMongoDB.find_one({'path': path}):
return Response.fail('the path is duplicate')
else:
map_setting = {
'map_title': map_title,
'path': path,
'rewrite_way': rewrite_way,
'field': field,
'field_value': field_value,
'isMap': 'False'
}
MappingMongoDB.insert_one(map_setting)
return Response.success(0)
- 可以设置每个Rewrite配置的title,这样更加清晰的表达此配置的作用
- 本次只设计path、rewrite_way、field、field_value四个字段,后续字段可以自己叠加,而且设置path不能重复
- 默认值isMap=false,该字段表示是否正在使用中
获取Rewrite配置表
def list_rewrite(request):
if request.method == 'GET':
mapping_data = MappingMongoDB.find({})
new_list = []
for mapping in mapping_data:
data = {
'mapping_id': str(mapping['_id']),
'map_title': mapping['map_title'],
'path': mapping['path'],
'rewrite_way': mapping['rewrite_way'],
'field': mapping['field'],
'field_value': mapping['field_value'],
'isMap': mapping['isMap']
}
new_list.append(data)
return Response.success(new_list)
暂存Rewrite配置
暂存意思是本次抓包都是根据选择的Rewrite配置进行Map的
from native_project.response import Response
from native_project.mongdb import MongoDB
import json
Response = Response()
MappingMongoDB=MongoDB('rewrite_settings')
TemporaryMongoDB = MongoDB('temporary_rewrite')
def temporary_rewrite(request):
if request.method == 'GET':
mapping=request.GET.get('mapping')
map_list=json.loads(mapping)
TemporaryMongoDB.delete_many({})
MappingMongoDB.update_many({},{'isMap':'False'})
for map_temporary in map_list:
map_setting={
'map_title':map_temporary['map_title'],
'path':map_temporary['path'],
'rewrite_way':map_temporary['rewrite_way'],
'field':map_temporary['field'],
'field_value':map_temporary['field_value'],
}
TemporaryMongoDB.insert_one(map_setting)
MappingMongoDB.update_one({'path':map_temporary['path']},{'isMap':'True'})
return Response.success(0)
- 先清空temporary_rewrite临时表,并且把Rewrite_setting表所有配置都变成isMap=False
- 然后遍历所选的配置,插入到临时表,并且更新isMap=True
删除Rewrite配置
def delete_rewrite(request):
if request.method == 'GET':
path = request.GET.get('path')
query = {'path': path}
MappingMongoDB.delete_one(query)
TemporaryMongoDB.delete_one(query)
return Response.success(0)
删除settings配置的时候同时删除该临时配置