Python中如何抓包APP并提取图片内容,但无法获取文字信息?
最近在抓包一个 APP:淘最热点
一款新闻 APP
抓不到新闻列表内容
只抓到了新闻图片
其他同类型的 APP 也抓过
没出现这种问题
用的 charles 抓的,证书设置没问题
不知道是不是这个 APP 的新闻列表走了其他协议
有大佬帮忙抓下看看嘛
Python中如何抓包APP并提取图片内容,但无法获取文字信息?
抓了下包,都有的,https://api.news.taozuiredian.com 开头的
我遇到过类似问题,抓包拿到图片数据但文字信息缺失。通常是因为文字内容通过其他接口传输或使用了不同的数据格式。
核心思路是:先抓取完整的网络请求,然后分析数据流向。这里提供一个使用 mitmproxy 的完整方案:
# app_capture.py
import mitmproxy.http
from mitmproxy import ctx
import json
import re
from pathlib import Path
class AppCapture:
def __init__(self):
self.image_data = []
self.text_data = []
self.output_dir = Path("./captured_data")
self.output_dir.mkdir(exist_ok=True)
def response(self, flow: mitmproxy.http.HTTPFlow):
# 检查是否为图片响应
content_type = flow.response.headers.get("Content-Type", "").lower()
if "image" in content_type:
# 保存图片数据
img_filename = f"image_{len(self.image_data)}.bin"
img_path = self.output_dir / img_filename
with open(img_path, "wb") as f:
f.write(flow.response.content)
self.image_data.append({
"url": flow.request.url,
"filename": img_filename,
"headers": dict(flow.response.headers)
})
ctx.log.info(f"捕获图片: {flow.request.url}")
# 检查可能的文字数据(JSON、文本等)
elif any(x in content_type for x in ["json", "text", "javascript"]):
try:
# 尝试解析为JSON
if "json" in content_type:
text_content = flow.response.text
data = json.loads(text_content)
# 提取所有字符串字段
text_items = self.extract_text_from_json(data)
if text_items:
self.text_data.extend(text_items)
ctx.log.info(f"从JSON提取 {len(text_items)} 条文字")
# 纯文本响应
elif "text" in content_type:
text_content = flow.response.text
if len(text_content.strip()) > 0:
self.text_data.append({
"url": flow.request.url,
"content": text_content[:200] # 截取前200字符
})
except (json.JSONDecodeError, UnicodeDecodeError):
# 非JSON或编码问题,尝试其他解析
pass
# 保存元数据
self.save_metadata()
def extract_text_from_json(self, data):
"""递归提取JSON中的所有字符串"""
text_items = []
if isinstance(data, dict):
for key, value in data.items():
if isinstance(value, str) and len(value.strip()) > 0:
text_items.append({
"field": key,
"value": value
})
elif isinstance(value, (dict, list)):
text_items.extend(self.extract_text_from_json(value))
elif isinstance(data, list):
for item in data:
if isinstance(item, str) and len(item.strip()) > 0:
text_items.append({
"field": "list_item",
"value": item
})
elif isinstance(item, (dict, list)):
text_items.extend(self.extract_text_from_json(item))
return text_items
def save_metadata(self):
"""保存捕获的数据信息"""
metadata = {
"images": self.image_data,
"texts": self.text_data
}
with open(self.output_dir / "metadata.json", "w", encoding="utf-8") as f:
json.dump(metadata, f, ensure_ascii=False, indent=2)
# 运行命令:mitmdump -s app_capture.py
使用步骤:
- 安装依赖:
pip install mitmproxy - 保存上面的代码为
app_capture.py - 启动代理:
mitmdump -s app_capture.py - 在手机上配置代理(IP为电脑IP,端口默认8080)
- 安装mitmproxy证书到手机
- 操作APP,所有请求都会被捕获
关键点:
- 图片通过Content-Type: image/*识别并保存为二进制文件
- 文字信息通常藏在JSON响应或文本响应中,需要递归提取
- 有些APP可能使用protobuf、msgpack等序列化格式,需要额外解析
- 文字和图片可能分开请求,注意关联URL路径
如果还是找不到文字,可能是加密传输或使用WebSocket,需要进一步分析。
建议:同时监控所有数据格式,别只盯着图片接口。
用的什么软件抓的,我刚刚又抓了下,没有你所说的 https://api.news.taozuiredian.com 开头的,其他的 https 倒是有
我用的就是 charles,抓的是 iOS app
我这边抓的安卓的,不知是否是这个区别
试了下,确实是。提供个思路,可以找个老的 apk 版本抓包是可以抓到的
可能是走 TCP 或者 UDP 的, 也可能是设置了不走代理的, 也可能是 Charles 的问题, 试试 fiddler?
这个思路倒是没想过
fiddler 也试过了,也没抓到,所以猜测是不是走了别的协议,设置了不走代理这个有办法破解吗,我看华为应用市场开了代理好像就进不去
可以抓到呀,和正常的没区别
又顺手写了篇文章。。https://zhuanlan.zhihu.com/p/46433599
这是什么 App 呀
thor http 抓包
5 楼也是用的苹果抓的,但他尝试用安卓抓也没抓到,我手头上没有苹果机,尴尬
抱拳了,老铁!!!又长见识了
对了,请问 V2EX 怎么发图片来着。。。
印象中 Packet Capture 能导出 pcap 文件的,电脑用 Wireshark 打开。
厉害了
某些第三方 http 库用一般的 http 代理抓包工具是抓不到的,感觉像是识别成了 tcp 包一样。所以抓包还是得上 wireshark
直接图片链接就可以了
好的,下载一个研究下
哦哦,那还是得先在被的网站上传个图,再拿过来链接吧
#21 没错 直接使用类似于 微博是个好图床,ipic 这类上传图片拿到连接 很方便
#16 那个导出只能导出单个吧,没找到过一次性导出所有抓到的包的选项
学习一下 Wireshark …这个世界就没有抓不到的包…
Wireshark 抓到的数据太多了,该怎么样过滤呢?
写一篇抓包大麦网 app 的吧,貌似上面的所有方法都不凑效,我也是只能抓取到图片,其他的 json 等文字信息无法抓到: https://www.damai.cn
直接在路由器上抓包,难道它的流量不过路由器
我再试试 多谢
能抓到演出列表吗?
直接在路由器上抓是怎样一个思路,可否详细说说
#30 emmmm,搜索接口搜出来的不就是演出列表吗。。按 APP 首页的演唱会、话剧歌剧那些分类查的接口也可以抓到的
标记一下,我一直否塞用 fiddler 抓 好麻烦
楼主解决了吗,同问一下,请问怎么抓一个 app 的流量从中找出 post 的数据呢?
可能对路由器要求比较高,用起来也有点麻烦。
得有一个 openwrt 系统或其它能自己安装软件的路由器,推荐 openwrt 在路由器上安装 tcpdump,ssh 登陆路由器对 wan 口所有流量抓包,
路由器开共享,把抓到的包存到电脑上,用 whireshark 进行分析,当然其它软件也可以。
还有个方法是用笔记本电脑开热点,手机连接这个热点,用抓包工具对笔记本无线网卡抓包。
这两种方法都是在流量的必经之路上抓包,肯定能抓到所需内容,就看能不能分析、解析出来了。
淘宝的 APP 貌似 charles 也是抓不到商品列表等信息,不知道走了啥协议
听起来在‘笔记本电脑开热点’好像更容易实现,路由器这个感觉要变成网工了。。。
#38 走的 HTTPS,用我那篇文章里的通杀方法就可以抓到
帮别人问个外包,有兴趣吗?寻找隐藏接口
也可以抓就是麻烦点
爬虫外包可以找我 qq 3394772548️⃣
亲这是什么软件
#43 Thor


