自研抓包服务实现(9)—Django服务实现Rewrite

抓包服务实现(9)—Django服务实现Rewrite
Django服务针对Rewrite如何设计?
  1. 保存Rewrite配置并支持修改、删除
  2. 能选择Rewrite配置并确定Map
  3. 支持更改request、response任意字段
  4. 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)
  1. 可以设置每个Rewrite配置的title,这样更加清晰的表达此配置的作用
  2. 本次只设计path、rewrite_way、field、field_value四个字段,后续字段可以自己叠加,而且设置path不能重复
  3. 默认值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)
  1. 先清空temporary_rewrite临时表,并且把Rewrite_setting表所有配置都变成isMap=False
  2. 然后遍历所选的配置,插入到临时表,并且更新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配置的时候同时删除该临时配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值