【解决方法】Fiddler捕捉数据包全是tunnel to

本文揭秘了如何通过修改FiddlerScript解决手机应用数据抓取中遇到的网络问题,包括设置代理导致的手机上网障碍和加密包的困扰。核心在于理解并利用OnBeforeRequest函数进行欺骗服务器,让数据无密可守。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

困扰了我很久的这个问题被解决了
这个东西一直都没有办法解决,让我们在后面想要做到爬取手机应用上的数据根本就做不到。

因为,根据网络上设置的很多方法,改变了ip代理之后,我就发现我的手机上不了网络了。都上不了网络了,我还怎么抓到对应的包呢?所以,在这陷入了深思。
手机上不了网!设置完代理之后手机上不了网!得到的所有包的信息显示的都是加密的(tunnel to)

这里写图片描述
这样类似的字样,已经把我搞得头都炸了!

解决方案
修改FiddlerScript
也就是改写Fiddler代理脚本。

这里写图片描述
然后找到 OnBeforeRequest这个函数,用下面的函数来替换原来的函数
目的就是为了欺骗对方的服务器。
修改之后,记得要保存!!!!!
点击左上角的 Save Script 这个按钮
之后,我们就可以发现,手机就变得可以上网了!!!
而且看到对应的包都是没有被加密的! 我仿佛又看到一堆的数据在向我招手!!!

static function OnBeforeRequest(oSession: Session) { 
	// Sample Rule: Color ASPX requests in RED  
	// if (oSession.uriContains(".aspx")) { oSession["ui-color"] = "red"; }  
	// Sample Rule: Flag POSTs to fiddler2.com in italics  
	// if (oSession.HostnameIs("www.fiddler2.com") && oSession.HTTPMethodIs("POST")) { oSession["ui-italic"] = "yup"; }  
	// Sample Rule: Break requests for URLs containing "/sandbox/"  
	// if (oSession.uriContains("/sandbox/")) {  
	//  oSession.oFlags["x-breakrequest"] = "yup"; 
	// Existence of the x-breakrequest flag creates a breakpoint; the "yup" value is unimportant.  
	// }  
	if ((null != gs_ReplaceToken) && (oSession.url.indexOf(gs_ReplaceToken) > -1)) { // Case sensitive  
		oSession.url = oSession.url.Replace(gs_ReplaceToken, gs_ReplaceTokenWith);
	}
	if ((null != gs_OverridenHost) && (oSession.host.toLowerCase() == gs_OverridenHost)) {
		oSession["x-overridehost"] = gs_OverrideHostWith;
	}
	if ((null != bpRequestURI) && oSession.uriContains(bpRequestURI)) {
		oSession["x-breakrequest"] = "uri";
	}
	if ((null != bpMethod) && (oSession.HTTPMethodIs(bpMethod))) {
		oSession["x-breakrequest"] = "method";
	}
	if ((null != uiBoldURI) && oSession.uriContains(uiBoldURI)) {
		oSession["ui-bold"] = "QuickExec";
	}
	if (m_SimulateModem) { 
		// Delay sends by 300ms per KB uploaded.  
		oSession["request-trickle-delay"] = "300"; 
		// Delay receives by 150ms per KB downloaded.  
		oSession["response-trickle-delay"] = "150";
	}
	if (m_DisableCaching) {
		oSession.oRequest.headers.Remove("If-None-Match");
		oSession.oRequest.headers.Remove("If-Modified-Since");
		oSession.oRequest["Pragma"] = "no-cache";
	} 
	// User-Agent Overrides  
	if (null != sUA) {
		oSession.oRequest["User-Agent"] = sUA;
	}
	if (m_Japanese) {
		oSession.oRequest["Accept-Language"] = "ja";
	}
	if (m_AutoAuth) { 
		// Automatically respond to any authentication challenges using the  
		// current Fiddler user's credentials. You can change (default)  
		// to a domain\\username:password string if preferred.  
		//  
		// WARNING: This setting poses a security risk if remote  
		// connections are permitted!  
		oSession["X-AutoAuth"] = "(default)";
	}
	if (m_AlwaysFresh && (oSession.oRequest.headers.Exists("If-Modified-Since") || oSession.oRequest.headers.Exists("If-None-Match"))) {
		oSession.utilCreateResponseAndBypassServer();
		oSession.responseCode = 304;
		oSession["ui-backcolor"] = "Lavender";
	}
	var hosts = 'zkd.me develop.dog';
	FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
	if (hosts.indexOf(oSession.host) > -1) {
		FiddlerApplication.Log.LogFormat("Capture session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
		if (oSession.HTTPMethodIs('CONNECT')) {
			FiddlerApplication.Log.LogString('create fake tunnel response');
			oSession['x-replywithtunnel'] = 'FakeTunnel';
			return;
		}
		if (oSession.isHTTPS) {
			FiddlerApplication.Log.LogString('switch https to http request');
			oSession.fullUrl = oSession.fullUrl.Replace("https://", "http://");
			oSession.port = 80;
		}
		FiddlerApplication.Log.LogFormat("Processed session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
	}
	FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}

### 使用 Fiddler 抓取手机 App 通过隧道 (tunnel) 传输的数据包 #### 配置 Fiddler 和 设备网络环境 为了使设备能够正常访问互联网并允许 Fiddler 捕捉 HTTPS 流量,需确保设备和电脑在同一 Wi-Fi 网络下。接着配置设备的 HTTP 代理指向运行 Fiddler 的计算机 IP 地址,并设置端口为8888(默认情况下)。如果更改了IP地址或端口号,则需要相应调整这些参数[^2]。 #### 安装根证书至移动设备 由于大多数应用程序会验证服务器的身份,因此必须让客户端信任来自 Fiddler 的中间人证书。为此,先在桌面版浏览器中打开 `http://localhost:8888` 下载 DO_NOT_TRUST_FiddlerRoot 证书文件;随后按照不同操作系统指引将其安装成为受信认证机构的一部分。对于 Android 而言,可能还需要额外授予某些权限以便成功部署此 CA 证照[^4]。 #### 修改应用安策略以绕过 SSL Pinning 部分现代移动端软件采用了SSL pinning技术来增强安性,阻止未授权的中间件介入HTTPS通信过程。针对这类情况,可以考虑利用Xposed框架配合特定模块解除这项限制,或者寻找其他变通方案如修改APK源码后再重新打包安装测试版本的应用程序实例[^1]。 #### 解决 Tunnel To 连接问题 当遇到大量仅显示 "CONNECT hostname:port" 或者 "TUNNEL TO..." 类型请求而无法查看具体内容时,应确认已开启解密功能: - 在 Fiddler 中依次点击菜单栏 Tools -> Options; - 切换到 HTTPS 标签页勾选 Decrypt HTTPS traffic 复选框; - 如果目标站点启用了 HSTS (HTTP Strict Transport Security),还需进一步操作取消对该域名的记忆记录:Rules -> Customize Rules... ,编辑 OnBeforeRequest 函数加入代码片段清除 hsts 缓存[^3]。 ```javascript if (oSession.HostnameIs("example.com")) { oSession.oFlags["ui-hide"] = false; oSession.utilCreateResponseAndBypassServer(); oSession.oResponse.headers.Add("Strict-Transport-Security", ""); } ``` 以上措施有助于更面地监控基于 TLS/SSL 加密协议之上的交互细节。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值