精易论坛

标题: python借助mitmproxy 监听获取DY视频 [打印本页]

作者: 老衲无悔    时间: 2020-5-3 15:22
标题: python借助mitmproxy 监听获取DY视频
本帖最后由 老衲无悔 于 2020-5-3 15:24 编辑

前些日子研究了python下的xx监听(类似FD),拿DY试了下手..要配合mitmproxy达到监听效果,个人使用感受比FD好用和稳定很多.把源码发出现大家共同研究一下

安装好mitmproxy后,保存源码为DY.py,手机配置代理,并在手机浏览器打开http://mitm.it/安装相应的证书
纯命令行方式
mitmdump 8001 -s DY.py --set block_global=false

--set block_global=false    禁止全局代码
-q                          静默方式
-p 8001                     代理监听8001端口
-s DY.py                    使用DY.PY监听规则

有网页方式
mitmweb 8001 -s DY.py --set block_global=false



import json
import os
import urllib.request
import time
import threading
import re

def custom_time(timestamp):
    # 转换成localtime
    time_local = time.localtime(timestamp)
    # 转换成新的时间格式(2016-05-05 20:28:54)
    dt = time.strftime("%Y-%m-%d(%H%M%S)", time_local)
    #dt = time.strftime("%Y-%m-%d", time_local)
    return dt


def down(url, savepath):
    urllib.request.urlretrieve(url, savepath)


def restr(str):
    cop = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")        # 匹配不是中文、大小写、数字的其他字符
    return cop.sub('', str)                                 #将str中匹配到的字符替换成空字符


#返回JSON
def mycmd(cmd):
    p = os.popen(cmd)
    x=p.read()
    x=json.loads(x)
    return x


def mycmd2(cmd):
    p = os.popen(cmd)
    x=p.read()
    return x


def separatemedia(mp4file,savepath):
    #使用ffmpeg分离音频视频
    videocmd='ffmpeg -i {mp4} -vcodec copy -an -y {path}no_audio.mp4'.format(mp4=mp4file, path=savepath)
    mycmd2(videocmd)
    cmdstr="ffmpeg -i {mp4} -f mp3 -vn -acodec libmp3lame -y {path}audio.mp3".format(mp4=mp4file, path=savepath)
    mycmd2(cmdstr)


def down2(url, savepath, savepath2):
    urllib.request.urlretrieve(url, savepath)
    separatemedia(savepath, savepath2)


#函数名必须这样写 这是mitmdump规则
def response(flow):
    if 'aweme/v1/aweme/post/?' in flow.request.url:
        for video in json.loads(flow.response.text)['aweme_list']:
            video_info={}
            video_info['date']=custom_time(video['create_time'])                                    #发布时间
            video_info['name']=video_info['date'] if video['desc']=='' else restr(video['desc'])    #视频说明
            video_info['id']=video['aweme_id']                                                      #视频ID
            video_info['user']=restr(video['author']['nickname'])                                   #作者
            filename='d:\\video\\'+video_info['user']+'\\'+video_info['name']+'\\'
            is_exists = os.path.exists(filename)
            if not is_exists:
                os.makedirs(filename)
            else:
                filename='d:\\video\\'+video_info['user']+'\\'+video_info['name']+video_info['id']+'\\'
                os.makedirs(filename)

            imgurl=video['video']['cover']['url_list']                                              #图片地址
            if len(imgurl)>0:
                video_info['imgurl']=imgurl[0]
                t = threading.Thread(target=down, args=(imgurl[0],filename+video_info['name']+'.jpg'))
                t.setDaemon(True)
                t.start()
            downurl=video['video']['play_addr']['url_list']                                 #无水印视频地址
            if len(downurl)>0:
                video_info['downurl']=downurl[0]
                k = threading.Thread(target=down2, args=(downurl[0],filename+video_info['name']+'.mp4',filename))
                k.setDaemon(True)
                k.start()
            print(video_info)







作者: gaoqing    时间: 2020-5-3 16:19
谢谢分享 !
作者: tygk    时间: 2020-11-28 16:31
我之前写过一个appium**,用scapy一边抓包,视频信息这些全部捕获




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4