Python中如何使用Fiddler进行网络调试?

为什么我 fidder 抓手机 app 的包能抓一些 https 的包(比如说 b 站),但是打开抖音 app 却显示网络错误,然后关掉 https,又可以抓了


Python中如何使用Fiddler进行网络调试?
15 回复

APP 可以用双向数字证书加解密 这样好像就能杜绝网络调试工具


在Python里用Fiddler抓包调试,核心是让Python的请求走Fiddler的代理。Fiddler默认在本机(127.0.0.1)的8888端口开了一个HTTP/HTTPS代理服务器。你只需要在发请求时设置代理参数,并处理HTTPS证书问题。

关键步骤:

  1. 启动Fiddler:确保Fiddler正在运行,并开启了Allow remote computers to connect(Tools -> Options -> Connections)。
  2. 在代码中配置代理:无论你用requestsurllib还是其他库,都需要将代理设置为http://127.0.0.1:8888
  3. 处理HTTPS证书:因为Fiddler会对HTTPS流量进行解密(中间人),你需要忽略证书验证错误(仅限调试环境!)。

代码示例(使用requests库):

import requests

# 设置代理(Fiddler默认地址)
proxies = {
    'http': 'http://127.0.0.1:8888',
    'https': 'http://127.0.0.1:8888'
}

# 对于HTTPS请求,需要禁用证书验证(仅调试用!)
response = requests.get('https://httpbin.org/get', 
                        proxies=proxies, 
                        verify=False)

print(response.text)

代码示例(使用urllib):

import urllib.request
import ssl

# 创建处理器并设置代理
proxy_handler = urllib.request.ProxyHandler({
    'http': 'http://127.0.0.1:8888',
    'https': 'http://127.0.0.1:8888'
})

# 创建忽略SSL证书的上下文(仅调试用!)
ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE

# 构建opener
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)

# 发起请求(使用自定义的SSL上下文)
response = urllib.request.urlopen('https://httpbin.org/get', context=ssl_context)
print(response.read().decode())

一句话总结:配好代理关掉证书验证,流量就能进Fiddler了。

这些软件检测到有代理,会拒绝连接的。 不是 fiddler 的问题。

Android 的不清楚, 但 iOS APP 是可以指定系统内置根证书才受信任, 自签名的添加到系统根证书也没用。

那有没有什么解决方法啊?

安卓应用也可以设置只信任系统代理。
最好是修改应用的 manifest 允许用户证书。

一楼说的对,这种基本没办法解决

有些应用防 fd

手机要安装证书

见过这几种的:检测到代理直接退出、检测到代理就不走代理、检测到代理就走自己的协议、双向证书验证
试试 packet capture

chrome f12

ssl pinning

今天也碰到这个问题,有解决方案吗?

ssl pinning
+1

SSL pinning Android 端装 Xposed 用 Just Trust Me 可解,但如果还带 ClientAuth 的话就很恶心了,要反编译提取证书和私钥密码导入 fiddler, 如果混淆加固做的好的话只有等大手破解

iOS 不越狱肯定无解

回到顶部