不是页面上所有的接口都可以正常调用,当接口有一些加密的参数就不行。
mitmdump的作用和fiddler一样,用于抓包,获取请求/响应等信息,但是同时它可以和python一起使用,抓包的同时执行py文件对抓包数据进行处理,比如,最常用的是获取到响应后期望将需要的数据存入csv文件中。
响应数据现在最常见的就是json格式的,json格式就是用{key:value}括起来的键值对,key用双引号,value可以是object/string/array/number/null/true/false,每个键值对之间用逗号隔开。一般来说,处理json格式数据时会将其转换成python中的列表或字典。
一/py文件编写
分析抓包出来的json格式文件,想要获取所有的user_list中user_info的某些字段信息并写入csv文件
待会再mitmdump要执行的py文件如下
import json
import csv
#函数名必须这样写 这是mitmdump规则
def parsejson(acceptjsonstring):
# 定义一个数组,存放解析后的数据
user_data = []
# 将json字符串转换成python对象
list_info = json.loads(acceptjsonstring)
for eachuser in list_info["user_list"]:
# 定义一个字典,存放每一个用户信息
userdic = {}
userdic["nickname"] = eachuser["user_info"]["nickname"]
userdic["signature"] = eachuser["user_info"]["signature"]
userdic["enterprise_verify_reason"] = eachuser["user_info"]["enterprise_verify_reason"]
userdic["unique_id"] = eachuser["user_info"]["unique_id"]
userdic["follower_count"] = eachuser["user_info"]["follower_count"]
userdic["total_favorited"] = eachuser["user_info"]["total_favorited"]
userdic["uid"] = eachuser["user_info"]["uid"]
user_data.append(userdic)
print(user_data)
return user_data
def save_data(data, path):
header = list(data[0].keys()) # 数据列名
with open(path, 'a+', newline='', encoding="gb18030") as f:
writer = csv.DictWriter(f, fieldnames=header)
writer.writerows(data) # 写入数据
def response(flow):
#下面这个网址是通过fiddler获取到的 但是有些数据我们无法解密,所以需要用mitmdump捕获数据包然后做分析\
if 'aweme/v1/web/discover/search/?' in flow.request.url:
info_data = parsejson(flow.response.text)
save_data(info_data, "D:/xntest/parse_data.csv")
代码解析:
1.直接从def response(flow)开始看,第一句判断截取的请求url中是否包含
'aweme/v1/web/discover/search/?',这是我们从抓包工具或者F12抓出来的接口中查出来我们需要分析的接口中请求包含这些信息才进行解析
2. 第二句info_data = parsejson(flow.response.text)调用解析的方法,将json字符串转换成pytho对象后解析出需要的字段,先建立了一个空数组user_data=[]用于后续存放用户信息,共有6条,再遍历每一个用户信息,将所取的字段信息存入字典userdic={}中,最后返回
返回的数据格式如下:
[{'uid': '4037834391699166', 'nickname': '冷冻食品供应商南通品康', 'signature': '冷冻果蔬找品康-品质保证有担当', 'enterprise_verify_reason': '南通品康商贸有限公司', 'unique_id': '35771688NTPK', 'follower_count': 1516, 'total_favorited': 2662}, {'uid': '103848226867', 'nickname': '猪副产品 鸡 鸭冷冻批发供应商', 'signature': '主营。鸡鸭猪冷冻分割,电话18653750161微信同号。信息回复不及时请打电话或微信', 'enterprise_verify_reason': '', 'unique_id': 'zhang884699', 'follower_count': 2332, 'total_favorited': 3290}, {'uid': '4133789960770127', 'nickname': '郑州万邦冻品牛肉', 'signature': '13721432701', 'enterprise_verify_reason': '', 'unique_id': 'zgnr9999', 'follower_count': 2102, 'total_favorited': 2098}, {'uid': '3452111150654059', 'nickname': '牛肉批发', 'signature': '', 'enterprise_verify_reason': '', 'unique_id': 'dyn34xpmmego', 'follower_count': 1959, 'total_favorited': 16999}, {'uid': '103685684391', 'nickname': '南昌宏达冷冻食品商行', 'signature': '', 'enterprise_verify_reason': '', 'unique_id': '2038633993', 'follower_count': 438, 'total_favorited': 286}, {'uid': '4468868683144187', 'nickname': '沈阳国际冻品牛肉批发中心', 'signature': '沈阳于洪水产覆盖东北全境 经营有国内进口牛羊猪产品 鸡鸭鹅鱼虾 天上跑的 地下飞的 水里游的 订购热线13840370013微信同步', 'enterprise_verify_reason': '', 'unique_id': '93569657009', 'follower_count': 478, 'total_favorited': 43}]
3.第三句调用保存方法写入csv
save_data(info_data, "D:/xntest/parse_data.csv")
二/mitmdump执行检查结果
1.先在PC端使用mitmdump时需要设置网络代理,代理端口号是mitmdump端口号
2.启动mitmdump,并执行py文件
py文件存放于python安装目录的scripts下,cmd命令行进入到该目录下
注意:如果是通过安装包安装的mitmproxy,那么执行py脚本时脚本文件就放在cmd命令行的当前目录下,比如直接放在【上海】目录下
3.浏览要分析的网页抓取到接口,这时候在mitmdump窗口就能看到在py文件中设置的打印信息。