ios网页视频抓取工具(mitmdump可以对接Python脚本,在Python中可以修改请求报文和响应报文)

优采云 发布时间: 2022-01-23 06:02

  ios网页视频抓取工具(mitmdump可以对接Python脚本,在Python中可以修改请求报文和响应报文)

  mitmdump 可以连接 Python 脚本,可以在 Python 脚本中修改请求消息和响应消息。

  

  安装 mitmdump

  只需在命令行模式下 pip install mitmproxy

  连接你的手机

  将手机直接连接到计算机的 WiFi

  第 1 步:将手机连接到 WiFi

  第二步:点击手机WiFi中的代理设置,选择手动设置代理

  第三步:服务器ip填写电脑的ip(如果不知道,在命令行模式下输入ipconfig查看),端口填写8080(默认端口)

  ##经过以上三步,你手机的所有网络请求和响应都会流经mitmproxy。现在我们还没有开通mitmproxy服务,所有手机暂时无法上网。

  抓包

  可以通过在命令行模式下键入 mitmdump 来启动 mitmproxy 服务。现在将捕获手机上的所有网络请求和响应。

  ##现在手机可以上网了,只要有网络请求和响应,都会显示在命令行界面。

  使用 Python 脚本修改网络请求

  脚本文件保存为script.py(可以使用任何文件名,只要是py后缀即可)

  接下来写script.py

  # 修改请求的话,函数名必须为request,参数必须为flow,不然执行不了。

# flow就是我们利用mitmproxy抓包抓取下来的请求报文。

def request(flow):

flow.request.url = 'http://httpbin.org/get'

  现在启动mitmproxy服务和Python脚本,在命令行界面输入mitmdump -s script.py

  虽然脚本中的函数只有一行代码,但是现在所有的网络请求url都修改为/get,你可以尝试用手机浏览器输入任意网站。(如果你打开应用程序也是如此,请求被发送到/get,所以你手机上需要上网的应用程序现在不可用。)

  如果只是修改 url,一些 网站 会拒绝响应。您可以使用请求功能来修改更多的请求消息信息。

  def request(flow):

flow.request.headers['user-agent'] = 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.108 Safari/537.36 MZBrowser/7.9.6'

flow.request.headers['accept'] = '*/*'

flow.request.headers['referer'] = 'https://www.qq.com/'

flow.request.headers['accept-encoding'] = 'gzip, deflate, br'

flow.request.headers['accept-language'] = 'zh-CN,en-US;q=0.8'

flow.request.url = 'https://www.qq.com'

  抓包工具如何使用,看个人需求。如果是用来实现爬虫的话,mitmproxy就和浏览器的开发者工具一样。

  最基本的代码是:

  import requests

def request(flow):

## 获取请求的url

url = flow.request.url

## 获取请求的headers(伪装成由手机发起请求)

headers = flow.request.headers

data = requests.get(url=url, headers=headers)

  至于后面的数据怎么处理,就看个人需求了。

  示例:抓取 抖音 小视频

  第一步:连接手机

  第 2 步:编写代码

  第三步:mitmdump -s file.py

  import requests

## num变量用来设置文件名

num = 1

def request(flow):

## 获取请求url和headers

url = flow.request.url

headers = flow.request.headers

global num

## 抓包之后自行观察,得出小视频的抓取逻辑

if 'ixigua' in url:

filename = str(num) + '.mp4'

resp = requests.get(url=url, headers=headers, stream=True)

with open(filename, 'wb') as f:

f.write(resp.content)

num += 1

  

  或者您可以使用响应方法。效果与使用请求方法相同。

  不同的是,如果写了request方法,手机app还没有将请求发送到“抖音服务器”(被mitmproxy拦截);

  如果是response方法,此时“抖音 server”已经发回了response,我们mitmproxy截取了它的response消息,这样我们PC端就不需要再发送请求了。直接使用响应消息的正文。

  ## num变量用来设置文件名

num = 10000

def response(flow):

## 获取请求url

url = flow.request.url

global num

## 抓包之后自行观察,得出小视频的抓取逻辑

if 'ixigua' in url:

filename = str(num) + '.mp4'

resp = flow.response

with open(filename, 'wb') as f:

f.write(resp.content)

num += 1

  一定要注意def request(flow)和def response(flow)的区别

  如果在request方法中,flow.response没有返回任何内容,因为此时请求还没有被转发。

  保存的只是一个空文件。

  这样你就可以用手指轻点把抖音的小视频下载到电脑了。(这不是爬虫,因为不涉及自动操作,需要用手指手动操作手机屏幕,如果需要自动操作,可以使用Appium)

  如果你想下载音乐什么的,原理是一样的。音乐的代码不会公布,因为它涉及版权问题。

  由于 mitmproxy 不能在 Windows 中使用,所以只能使用 mitmdump。(虽然抓包功能是一样的,但是在命令行界面看mitmdump真的很晕。)可以使用charles抓包进行分析。查尔斯配置连接手机的方法是一样的。

  (安卓系统和IOS系统是一样的)

  1.下载查尔斯

  2.在PC上下载charles证书(然后设置为“受信任的根证书”)

  3.在移动端(手机)下载charles证书

  4.在移动端连接局域网(然后手动设置IP和端口)

  在charles中,当有流量通过时,Host会高亮显示,如下图*敏*感*词*所示,更方便分析。

  

  分析完后使用mitmdump连接python脚本,最终可以将手机端的数据手动抓取到PC端。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线