Fiddler抓包VSCode和探索

前言: 最近在使用 VSCode 调试 web 程序时,遇到一些问题,当时不知道如何是好。所以决定抓看来看一看,然后一顿操作猛如虎,成功安装了抓包软件 – Fiddler Classic。我并没有使用 Postman 这种重量级的 HTTP 测试软件,而是直接使用了 VSCode 的插件 – REST Client。然后,我发现在 Fiddler 里面居然无论如何都是看不见这个插件发出来的数据包,或者更直接一点,看不到 VSCode 的包。经过一番在互联网上的搜索,最后发现了需要在 VSCode 中配置代理才行。不过,正是这番折腾也让我重新思考起了以前一个困惑我的问题,抓包软件的工作原理是什么?我曾经对这个很好奇,知道了它是通过代理来实现的,但是这种浅显的理解,遇到问题时还是会显得束手无策。下面就让我们再去探索一番,如果每一次探索都能获取到更深一层的理解,那便是最好不过的事情了。所以学习更像是一种螺旋上升的过程,不是一蹴而就,当然了如果不持续努力就会一直原地踏步,甚至缓慢下降。

在这里插入图片描述

VSCode 抓包配置

先看看一下这个问题的解决方案吧!这里先来一个示例,查看指定QQ号的头像,这是一个在网上公开可查询的 API,我相信大家的为人,所以这里我没有使用自己的 QQ 号。

浏览器抓包测试

在这里插入图片描述

然后在 Fiddler 中可以查看该请求,注意我在上面禁用了缓存,防止因为缓存导致看不到图片了。这里可能数据包太多了,导致看不过来,可以在抓到数据包后暂停抓包或者在上面的列中进行搜索或者过滤。现在是浏览器的包,这是一切正常的,下面我们来使用 VSCode 的 REST Client 插件来请求这个接口试试。

在这里插入图片描述

VSCode 抓包测试

首先在 VSCode 中访问,这是没有问题的,可以正常请求到数据,而且它还很贴心的直接渲染成图片了。

在这里插入图片描述

这里我设置只抓取非浏览器的数据包,不然数据包太多了,看起来很麻烦。
在这里插入图片描述

然后你猜怎么着?我本来是想演示,VSCode 不配置是抓不到包的,结果今天在我自己的电脑上,它就正常了。因为我之前是在其它电脑上操作的,换了一个环境,结果它就正常了。不过现在我想要的是不正常的结果。不过,我现在对这一块也有了解,不至于像上次一样手足无措了。既然,正常了,那就直接去看下一部分,待会再聊这个话题。

在这里插入图片描述

注意:因为我使用的 VSCode 版本较新,可能是新版的配置变更了。所以我贴出来我的版本,如果你的表现或者配置与我不一致,可以考虑更新到同一版本或者更高的版本。

在这里插入图片描述

注意:经过我的又一次分析,我发现 VSCode 的包 Fiddler 抓不到是因为它们两个之间启动顺序的关系。VSCode 是基于开源的 Chromium 内核的,就是浏览器内核,所以按理说它是可以自动识别代理的。所以,其实问题就是因为我是先开的 VSCode,然后启动的 Fiddler,但是 VSCode 不会自动识别代理的开启和关闭,必须重启 VSCode 才行,这确实是一个未曾想到的坑。

Fiddler 抓包的原理

当我们正常的访问网络服务时,忽略其它的因素的存在(专业一点应该叫透明),我们是直接访问远程服务的。然后开启代理之后,我们是通过代理来访问远程服务的,即我们先把请求发给代理,代理再去请求远程,然后把响应信息返回给应用程序。我这里使用单箭头,因为我只是画了请求的过程,哈哈,似有不妥,但是你理解就好了。

在这里插入图片描述

注意:在 Fiddler 中讨论的是 HTTP 代理,它应该是使用最广泛的了,不过代理不止只有 HTTP 代理。

所以,现在我们去看看 Fiddler,启动它之后,它会开启一个代理服务器,并监听 8888 端口。我们打开菜单,查看 connections 栏,可以看见下面这个弹窗。

在这里插入图片描述

Fiddler Classic can debug traffic from any application that accepts a HTTP Proxy. All WinINET trafic is trouted through Fiddler Classis when “File > Capture Traffic” is checked.

这里最重要的就是这个第一句了:Fiddler Classic 可以调试接受 HTTP 代理的任何应用的流量。这里的关键字是接受,所以那就有人可以 reject拒绝 喽!其它的信息,这里忽略不去理会,因为并不属于这里的重点。

注:有些软件因为一些原因,不会走代理,例如有道词典,我就没有抓到它的包(我上次见的说法是它不使用 HTTP 协议,也有可能是它不走代理,不过具体不了解,表现就是代理看不到它的请求信息)。

也就是说,Fiddler 开了一个代理服务器,所有的应用程序(接受 HTTP 代理)都会它发送请求,然后由它进行中转发送,并接受响应数据,然后再转给发送者。那你有没有想过,其它程序为什么会知道 Fiddler 的代理呢?或者它们为什么会相信一个未知的软件呢?这其实是一个很有趣的问题。因为它们并不知道 Fiddler,也不会去关心它的存在(当然了,得排除哪些不想让你调试它们的软件)。
答案其实很简单,系统代理,操作系统都是会支持网络代理功能的。但是它并不是真正工作的代理软件,只是告诉其它软件,这里启用了系统代理,因为是操作系统,所以应用软件都能知道系统启用了代理功能。

而 Fiddler 就是真正工作的 代理软件,如下图的 Gateway(网关)这里的截图。

在这里插入图片描述

然后去 Windows 中查看系统代理,不同版本的系统截图可能不一致,不过大体上也不会相差太大的。我现在使用的是 Window11,下面是我的系统的截图。不过这里居然没有设置端口而是直接在URL中指定了,可能这样也是可以正常工作的吧。所以,你现在应该大致上明白了吧。因为操作系统是支持代理这个功能的,而且这也是必须由操作系统支持的,因为通过代理上网是非常必要的功能。既然系统支持了,那么软件就不可能不支持了,否则用户启用了代理,而软件不走代理,那么就会导致软件的行为和用户的预期不一致了,这是 BUG呀!有些工作是必须通过代理上网的,代理的运用是很广泛的,例如企业内部的 VPN 服务。

在这里插入图片描述

现在的浏览器都践行这种 KISS 原则,它会自动检测到代理开启,所以不需要用户去手动配置了。不过,对于我们这些非普通的用户,还是有必要了解代理的工作原理的。不然,如果出现问题了,你就会变成真正的傻瓜了。

注:KISS(Keep It Simple and Stupid)傻瓜原则

在这里插入图片描述
所以,我们可以看清 Fiddler 的本质其实是一个 HTTP 代理软件,兼具抓包功能(这个功能比较强大,反而让人忽视了它的本质)。因为代理本质上就是数据的中转站,那它自然就可以选择查看或者不查看用户的请求了。如果它不看,那它就是纯粹的代理软件 如果它看了那它是抓包软件了。

VSCode 的代理配置

打开下面这个界面,然后搜索 http: proxy,可以看见下面这些配置。最上面的这个是代理配置,如果没有设置的话,它会继承 http_proxyhttps_proxy 这两个环境变量,不过我也没有设置它们,并且查看了确实没有。然后是下面的这个配置 Http: Proxy Support,它下面写着它的作用:Use the proxy support for extensions. (对插件使用代理支持),因为我这里没有在 VSCode 中开启代理,看起来是这个配置的作用。

在这里插入图片描述

在这里插入图片描述

注意:这里可以看到我改了 Http: Proxy Authorization,这个是代理认证相关的属性,我只是点击进去,它给配置了默认的 null 值,然后我就退出来了。不过,这里我也没有使用需要认证的代理,所以也没关系的。

在这里插入图片描述

在这里插入图片描述

下面我把这个配置给关掉再试一试!这个默认的配置项 override 的作用就是,对插件启用代理支持,覆盖默认的请求选项。现在改成 off,禁用插件的代理支持。然后多次请求那个查看 QQ 头像的接口,可以发现已经无法再看到相应的请求了。这里现在设置了只查看 VSCode 的请求数据。这个 code 进程就是 VSCode。所以,以后如果遇到 VSCode 无法抓包的问题就开启下面这个选项就行了(注意VSCode的版本)。下面使用 GIF 来演示关闭代理支持之后的抓包情况。

在这里插入图片描述

在这里插入图片描述

注意:因为我的 VSCode 版本较新,如果是使用的老的版本,可能需要手动配置上面的 Http: proxy,不过要小心,如果你之后关闭了代理软件,你的 VSCode 就无法联网了!!!

代理软件最常见的问题

下面举一个例子,这应该是代理软件最常出现的问题,大部分人应该都遇到过的 – 代理软件的非正常关闭。让我们先把 Fiddler 关闭,然后查看系统代理,正常情况下它是关闭的,现在让我们手动打开它,配置和之前一样。然后,接下来会发生什么呢?

在这里插入图片描述

服务中断,你的浏览器就无法访问任何网页了,就像下面这样。 不过某些软件,例如 QQ 之类的会继续正常工作,因为它不走代理(它用的不是 HTTP 协议,不过这种软件都是很复杂的了,只是说通讯的部分不使用)。这个很好解释,就像上面那那个图一样,软件把请求发给系统代理,就是 Fiddler 启动的代理服务器,然后这个服务器早就关闭了,所以所有的请求都根本没有人接收,自然就会报错了。解决办法那自然就有两个了,关闭系统代理或者重新开启 Fiddler (或者任何你使用的代理软件)。只要是用过代理软件的人,应该都会踩过这个坑,哈哈。

在这里插入图片描述

TIM(QQ) 设置代理:

在这里插入图片描述

小小的扩展

你有没有想过到底代理是怎么工作的呢?带着这个疑问,让我们进行一点微不足道的探索吧!这里我来提供一个小小的示例程序,跟着我一起去看看吧,不要弄那么复杂了,这个代码就是随便写的,展示一下简单的原理。

package main

import (
	"log"
	"net"
)

const RSP = "HTTP/1.1 200 OK\r\n" +
	"content-type: application/json; charset=utf-8\r\n" +
	"content-length: 39\r\n" +
	"server: CrazyDragon\r\n" +
	"\r\n" +
	"{\"rsp\": \"Hello, I am CrazyDragonProxy\"}\r\n"

func main() {
	// 监听本地的 9999 端口
	server, err := net.Listen("tcp", "localhost:9999")
	if err != nil {
		log.Fatal(err)
	}

	// 读取数据的切片
	data := make([]byte, 1024)
	for {
		if conn, err := server.Accept(); err == nil {
			if n, err := conn.Read(data); err == nil {
				log.Printf("%s", string(data[:n])) // 打印接受到的数据

				conn.Write([]byte(RSP)) // fake response! 随便弄一个假的响应糊弄了事
				conn.Close()
			} else {
				log.Fatal(err)
			}
		} else {
			log.Fatal(err)
		}
	}
}


先开启代理设置,配置如下:

在这里插入图片描述

然后就按照这个 GIF 中做的即可,注意我虽然开了代理,但是代理后面并没有软件,所以此时 VSCode 的插件是无法正常联网的,因为代理软件没开!!!然后我启动了代理软件(我自己写的垃圾,不过它已经可以符合一个正常的代理了),然后这个插件就可以正常工作了。

注意: 有时候开启了代理,但是 VSCode 还是不走代理,并且配置也是正常的。可以考虑重启或者 Reload Window 刷新一下,因为配置可能没更新,VSCode 没有更新系统代理的变更。

在 VSCode 中演示:

在这里插入图片描述

在浏览器中演示:

注:这里有一个小问题,似乎第一次请求会卡住,不知道为什么?所以我强制刷新一下。

在这里插入图片描述

下面这个是打印输出的部分信息,中间的方框内是接收到的访问 QQ 头像的请求,这里出现了很多 CONNECT 请求,它也是 HTTP 方法的一种,不过它不会用在 WEB 请求中。而是专门用来给 HTTPS 进行代理的,HTTPS 代理曾经也是一个难题(TLS),这就是解决方案,不过我也就了解这么多。我这里只是一个简单的 HTTP 代理,它尝试来建立连接,当然是不会成功了,哈哈。

在这里插入图片描述

所以如果访问 https 网址,效果就是这样的,这里肯定是 CONNECT 建立失败了,就是有关于 TLS 这方面的东西。所以我测试使用的是 http 的网址。

在这里插入图片描述

什么决定了使用代理

为什么有的可以选择走代理,有的可以选择不走代理呢?这是由什么决定的呢?如果你有过网络爬虫的经验,应该就能明白了。编程语言的 HTTP 客户端都是可以配置使用代理的,就以为 Go 为例:

在这里插入图片描述

因为代理是很重要的功能,所以它是一个 HTTP 客户端必不可少的功能。不过,上面也说了可以选择 no_proxy(禁用代理),所以有些软件即使使用 HTTP 协议,你也是抓不到的,因为它根本就不使用代理。风过留声,雁过留痕。既然不从代理走,代理也就根本无法感知到它们的存在了。

总结

有趣的探索结束了,我确实感觉自己收获了不少,也把以前的一些知识串联起来了。希望各位读者也能从中有所收获。

参考链接

If I have been able to see further, it was only because I stood on the shoulders of giants. 如果说我看得比别人更远些,那是因为我站在巨人的肩膀上。

HTTP 代理原理及实现
技术分享| HTTP 代理
部分APP无法代理抓包的原因及解决方法
大厂app抓不到包怎么办?这篇文章告诉你答案!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/105183.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript-2-菜鸟教程

字符串 可以使用 索引 位置访问字符串中的每个字符 可以使用内置属性 length 来计算字符串的长度 var txt "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var sln txt.length;<script>var x "John"; // x是一个字符串// 使用 new 关键字将字符…

APP破解去广告

1.修改图标和名称 名称直接改 找到图标在进去把他替换掉 2.修改app包名实现分身 修改包名实现app分身_Tian翊的博客-CSDN博客 3.修改资源去广告 安卓逆向006之修改APK资源去广告_修改安装包去除app内广告-CSDN博客 打开模拟器后在cmd命令行输入adb devices连接上 在模拟器中…

【Java 进阶篇】Java Request 原理详解

在网络应用开发中&#xff0c;HTTP请求是一项常见而关键的任务。当我们使用Java编写网络应用时&#xff0c;了解HTTP请求的工作原理变得至关重要。本文将详细介绍Java中HTTP请求的原理&#xff0c;包括请求的结构、发送请求的方法以及处理请求的过程。 HTTP请求的基本结构 HT…

薛定谔的猫重出江湖?法国初创公司AliceBob研发猫态量子比特

总部位于巴黎的初创公司Alice&Bob使用超导芯片的两个相反的量子态&#xff08;他们称之为“猫态量子比特”芯片&#xff09;来帮助开发量子计算的不同自旋方式。&#xff08;图片来源&#xff1a;网络&#xff09; 有的人认为&#xff0c;构建量子计算机的模块模仿了著名的…

用友U8SMSProxy -SQL注入漏洞

0x01 漏洞介绍 用友GRP-U8 R10政务管理软件是由用友政务公司基于云技术所推出的第十代政务产品。这款产品继承了用友R9、R9i、U8等行政事业版产品的各项优点&#xff0c;并融合了全国广大用户的最佳实践应用。它旨在为政府财政部门、社保部门、卫生部门、教育部门、民政部门、党…

代码随想录打卡第五十天|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍 题目&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 …

hibernate源码(1)--- schema创建

sessionFactory 配置项&#xff1a; hibernate的核心是sessionFactory&#xff0c;那我们看看如何构建session Factory。 参考官网&#xff1a; plugins {id("java") } group "com.atai.hibernatespy" version "1.0-SNAPSHOT" repositories…

如何在《阴阳师》游戏中使用单机单窗口软件工具进行防封技巧?

如何在《阴阳师》游戏中使用单机单窗口软件工具进行防封技巧&#xff1f; 首先&#xff0c;定义在《阴阳师》游戏中&#xff0c;使用单机单窗口软件工具进行防封技巧涉及到如何安装和配置软件&#xff0c;以及如何在游戏中应用这些技巧。 我曾经使用过在《阴阳师》游戏中防封…

threejs(6)-操控物体实现家居编辑器

// 导入threejs import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; // 导入lil.gui import { GUI } from "three/examples/jsm/libs/lil-gui.module.min.js";…

冲刺学习-MySQL-常见问题

MySQL索引的最左原则 联合索引的说明 建立三个字段的联合索引联合索引&#xff08;a&#xff0c;b&#xff0c;c&#xff09;相当于建立了索引&#xff1a;&#xff08;a&#xff09;&#xff0c;&#xff08;a&#xff0c;b&#xff09;&#xff0c;&#xff08;a&#xff0…

Win安装protobuf和IDEA使用protobuf插件

一、Win安装protobuf 1、下载编译器 protobuf下载地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 选择自己需要的版本下载&#xff0c;这里下载的是 protoc-3.19.1-win64.zip&#xff0c;下载之后进行解压即可。 2、配置环境变量 path 系统变量中添加…

基于JAVA的天猫商场系统设计与实现,springboot+jsp,MySQL数据库,前台用户+后台管理,完美运行,有一万五千字论文

目录 演示视频 基本介绍 论文目录 系统截图 演示视频 基本介绍 基于JAVA的天猫商场系统设计与实现&#xff0c;springbootjsp&#xff0c;MySQL数据库&#xff0c;前台用户后台管理&#xff0c;完美运行&#xff0c;有一万五千字论文。 本系统在HTML和CSS的基础上&#xf…

Stream流式处理

Stream流式处理&#xff1a; 建立在Lambda表达式基础上的多数据处理技术。 可以对集合进行迭代、去重、筛选、排序、聚合等处理&#xff0c;极大的简化了代码量。 Stream常用方法 Stream流对象的五种创建方式 //基于数组 String[] arr {"a","b","c…

一句话解释什么是出口IP

出口 IP 是指从本地网络连接到公共互联网时所使用的 IP 地址。这个 IP 地址是由 Internet 服务提供商(ISP)分配给你的,它可以用来标识你的网络流量的来源。如果你使用的是 NAT(网络地址转换)技术,则在 NAT 设备内部会进行地址转换,使得多个设备可以共享同一个公共 IP 地…

wsl2环境的搭建

安装WSL WSL Windows官方页面&#xff1a;安装 WSL | Microsoft Learn 系统要求版本&#xff1a;我的电脑->属性可以查看系统版本&#xff0c;采用内部版本 18362 或更高版本以管理员权限运行 powershell启用Windows10子系统功能&#xff0c;再打开的powershell窗口中输入如…

day06-Flex布局

Flex布局 目标&#xff1a;熟练使用 Flex 完成结构化布局 01-标准流 标准流也叫文档流&#xff0c;指的是标签在页面中默认的排布规则&#xff0c;例如&#xff1a;块元素独占一行&#xff0c;行内元素可以一行显示多个。 02-浮动 基本使用 作用&#xff1a;让块元素水平排…

性能测试 —— 生成html测试报告、参数化、jvm监控

1.生成HTML的测试报告 1.1配置 (1)找到jmeter 的安装目录&#xff0c;下的bin中的jmeter.properties&#xff08;jmeter配置文件&#xff09; (2) ctrl f &#xff0c;搜索jmeter.save.saveservice.output_format&#xff0c;取消井号 并且 把等号后的xml改为csv&#xff0c;…

Web APIS——第一天(下)

一、随机轮播图案例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthde…

Linux 安装maven两种方式(使用yum或手动安装)

1.用yum自动安装 yum install maven -y 配置阿里云镜像 ​vim /etc/maven/settings.xml​​ &#xff0c;mirrors节点下添加&#xff1a; <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/conte…

前端html+css+js实现的2048小游戏,很完善。

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 逻辑用的是JavaScript&#xff0c;界面用canvas实现&#xff0c;暂时还没有添加动画。 视频浏览地址