[仅供学习,禁止用于违法]编写一个程序来手动设置Windows的全局代理开或关,实现对所有网络请求拦截和数据包捕获(抓包或VPN的应用)

news2024/11/20 1:42:58

在这里插入图片描述

文章目录

  • 介绍
    • 一、实现原理
    • 二、通过注册表设置代理
      • 2.1 开启代理
      • 2.2 关闭代理
      • 2.3 添加代理地址
      • 2.4 删除代理设置信息
    • 三、代码实战
      • 3.1 程序控制代理操作控制
        • 3.1.1 开启全局代理
        • 3.1.2 添加代理地址
        • 3.1.3 关闭代理开关
        • 3.1.4 删除代理信息
      • 3.2 拦截所有请求

介绍

 有一天突发奇想,很好奇那些抓包软件是如何做的,所以就特地去研究了一下😄。

 分享一下如何通过程序的方式设置Windows全局代理,包括代理模式的开启或关闭以及代理服务器IP、端口的动态改变。
关于全局代理有比较多的应用场景,如抓包工具Wireshark、Fiddler、Fiddler、VPN都会涉及到Windows的代理,就拿Wireshark抓包工具来说,为什么它可以拦截到我们所有请求?下面介绍一下设计到的原理和代码实现。

一、实现原理

 在开始讲解原理之前,我们先来看一下如何通过界面的方式开启Windows全局代理。首先在自己的电脑上搜索代理服务器设置,找到后打开可看到如下界面:

在这里插入图片描述
然后点击设置,我们就可以看到下面这个界面,在这里主要关注3个部分,分别是代理的开关、代理ip地址和端口。
在这里插入图片描述
 当我们在这里打开全局代理的开关后,Windows中所有的请求都会首先通过这里,这一点很重要,然后再将请求发送出去,因此我们就可以在我们自己的程序中编写程序监听这个ip和端口,实现拦截的操作,下面是一些抓包工具的简要原理图。
在这里插入图片描述
 从上图我们可以看出,如果需要拦截到程序中所有的请求并进行处理,首先就需要开启代理服务并知道IP地址和端口号,那么是如何通过程序进行控制的呢?这里会设计到Windows注册表的使用,下面进行介绍。
为了方便下面的讲解,这里特别说明一下,本文涉及到的代理ip和端口都以上图的为准,也就是127.0.0.133210,下文以抓包工具案例进行讲解。

二、通过注册表设置代理

 在抓包软件中,对代理的操作,一般有4步,分别是开启代理、关闭代理、设置代理地址、删除代理地址,其实,本质上在程序中控制这4个操作,是通过操作Windows注册表来实现的。

2.1 开启代理

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f

2.2 关闭代理

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f

2.3 添加代理地址

 在下面这个指令中,我们添加了参数127.0.0.1:33210,这个就是设置代理ip和端口。

reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "127.0.0.1:33210" /f

2.4 删除代理设置信息

reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /f

 从上面我们知道它是通过注册表命令reg实现的,可以在cmd窗口执行,因此它也具备了通过程序方式的调用,从而在我们的业务逻辑中进行动态操作,比如Java程序可以通过Runtime.getRuntime().exec(command)调用上面的注册表命令,Go语言可以使用exec.Command(command)调用。

三、代码实战

 为了减少代码行数,下面以Go语言为例介绍如何通过程序的方式操作代理以及如何拦截Windows中所有的请求,这也是抓包工具的应用。

3.1 程序控制代理操作控制

3.1.1 开启全局代理

 这一步就是把全局代理的开关给打开。

package main

import (
	"log"
	"os/exec"
)

func main() {
	// 使用 exec.Command 执行 reg add 命令
	// reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
	cmd := exec.Command("reg", "add", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "1", "/f")
	// 执行命令
	err := cmd.Run()
	if err != nil {
		log.Fatal(err)
	}

	log.Println("全局代理已开启")

}
3.1.2 添加代理地址

 当我们在代码中执行这段程序以后,就会发现在Windows代理配置中多了127.0.0.1:33210的配置。

package main

import (
	"log"
	"os/exec"
)

func main() {
	// 使用 exec.Command 执行 reg add 命令
	// reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "127.0.0.1:12888" /f
	cmd := exec.Command("reg", "add", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyServer", "/t", "REG_SZ", "/d", "127.0.0.1:33210", "/f")

	// 执行命令
	err := cmd.Run()
	if err != nil {
		log.Fatal(err)
	}

	log.Println("代理信息已添加")
}
3.1.3 关闭代理开关

 这里需要注意,这里只是将代理的开关给关掉了,并没有删除上面添加的代理信息,所有就有了下面的一个步骤。

package main

import (
	"log"
	"os/exec"
)

func main() {
	// 使用 exec.Command 执行 reg add 命令
	// reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
	cmd := exec.Command("reg", "add", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyEnable", "/t", "REG_DWORD", "/d", "0", "/f")

	// 执行命令
	err := cmd.Run()
	if err != nil {
		log.Fatal(err)
	}

	log.Println("代理已关闭")
}
3.1.4 删除代理信息

 这一步就会删除注册表中的配置的代理信息(不想删也可以不删,随意😄)。

package main

import (
	"log"
	"os/exec"
)

func main() {
	// 使用 exec.Command 执行 reg delete 命令
	// reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /f
	cmd := exec.Command("reg", "delete", "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", "/v", "ProxyServer", "/f")

	// 执行命令
	err := cmd.Run()
	if err != nil {
		log.Fatal(err)
	}

	log.Println("代理信息已删除")
}

3.2 拦截所有请求

 其实这里就是通过Socket监听上面配置的代理ip:port,从而达到拦截所有TCP请求的目的,这里会设计到网络编程的应用,下面以Go语言为例,用代码简单演示一下。

package main

import (
	"fmt"
	"log"
	"net"
)

func main() {
	// 在本地地址127.0.0.1:33210上启动TCP监听
	listener, err := net.Listen("tcp", "127.0.0.1:33210")
	if err != nil {
		log.Fatal("监听失败:", err)
	}

	fmt.Println("等待连接...") // 输出等待连接的提示消息

	// 接受连接并处理数据
	for {
		conn, err := listener.Accept() // 接受连接请求
		if err != nil {
			log.Fatal("接收连接失败:", err)
		}

		go handleConnection(conn) // 在协程中处理连接
	}
}

func handleConnection(conn net.Conn) {
	defer conn.Close() // 延迟关闭连接,确保在函数返回时连接被关闭

	buffer := make([]byte, 1024) // 创建一个缓冲区用于接收数据
	for {
		readLen, err := conn.Read(buffer) // 读取数据到缓冲区
		if err != nil {
			log.Println("读取数据失败:", err)
			break
		}

		data := string(buffer[:readLen]) // 将字节数据转换为字符串

		fmt.Println("接收到数据:", data) // 打印接收到的数据
	}
}

启动上面代码后,然后去浏览器随便打开一个页面,可以发现请求的报文都被我们编写的程序拦截到了,还有就是,如果我们电脑中有一些守护进程定时发送的请求也会被拦截到(这就有点儿意思啦😄,有些公司就是就喜欢偷偷默默搞一些隐藏程序监控员工电脑),下面是演示运行截图。
在这里插入图片描述
上面若有手误或错误的地方请在评论区留言。🙇‍

🙂🙂🙂

往期精选

💖 无线路由攻击和WiFi密码破解实战[渗透技术]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Finereport基于linux的简单安装(单节点)

简介 本文以单节点简单部署为例,不适用企业级高可用部署策略。 FineReport的运行依赖于Tomcat ,Tomcat 是免费且性能相对稳定的 Web 应用服务器,也可以充当JSP容器。它是一个用于运行Java Servlet和JavaServer Pages(JSP)的Web服务…

十八、FreeRTOS之FreeRTOS任务通知

本节需要掌握以下内容: 1、任务通知的简介(了解) 2、任务通知值和通知状态(熟悉) 3、任务通知相关API函数介绍(熟悉) 4、任务通知模拟信号量实验(掌握) 5、任务通知…

第一课【习题】使用DevEco Studio高效开发

用哪一种装饰器修饰的组件可作为页面入口组件 ArkTS Stage模型支持API Version 9,关于其工程目录结构说法正确的是? 4. DevEco Studio提供模拟器供开发者运行和调试HarmonyOS应用/服务,以下说法错误的是? DevEco Studio支持使…

2023年9月8日 Go生态洞察:gopls的扩展与Go生态系统的成长

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Qt之实现文字滚动效果

一.效果 二.实现 roller.h #ifndef ROLLER_H #define ROLLER_H#include <QWidget> #include <QPaintEvent> #include <QShowEvent> #include <QHideEvent> #include <QTimer>class Roller : public QWidget { public:explicit Roller(QWidget …

git标签的管理与思考

git 标签管理 git 如何打标签呢&#xff1f; 标签是什么? 标签 相当于一个 版本管理的一个贴纸&#xff0c;随时 可以通过标签 切换到 这个版本的状态 &#xff0c; 有人可能有疑问 git commit 就可以知道 代码的改动了&#xff0c; 为啥还需要标签来管理呢&#xff1f; …

建行驻江门市分行纪检组以廉政家访助推廉洁家风

为强化员工行为管理&#xff0c;深入了解员工的家庭情况以及员工8小时以外的生活&#xff0c;近日&#xff0c;建行驻江门市分行纪检组组长带队对两名青年纪检员开展廉政家访。 驻行纪检组组长亲切问候并访谈了青年纪检员的家庭成员&#xff0c;详细了解其家庭生活情况&#x…

【QED】小樱的问题

目录 题目描述输入格式输出格式 测试样例样例说明 思路核心代码 题目描述 在 f u f u fufu fufu乐园&#xff0c;每天都会有各种各样精彩的内容发生。就比如说&#xff0c;今天&#xff0c;小樱的米饭店开张啦&#xff01; 为了吸引 f u f u fufu fufu们前来购买小樱的大米&a…

来自bioBakery Lab的宏基因组学微生物群落的代谢功能分析工具-HUMAnN 3.0的安装配置及分析使用方法-安装填坑

HUMAnN 3.0 简介&#xff1a; HUMAnN 3.0 是一个用于宏基因组数据分析的工具&#xff0c;能够从宏基因组测序数据中推断出微生物群落的代谢功能信息。它可以识别微生物群落中存在的代谢途径&#xff0c;并定量这些通路的丰度。HUMAnN 3.0 依赖于多个工具和数据库来实现这些功能…

validateEmail

邮箱验证 validateEmail /*** 邮箱验证* * author ZengWenFeng* email 117791303QQ.com* mobile 13805029595* date 2016.08.09*/private static final Pattern PATTERN_EMAIL Pattern.compile("^[_A-Za-z0-9-\\](\\.[_A-Za-z0-9-])*" "[A-Za-z0-9-](\\.[A-Z…

【数电笔记】56-消抖开关

目录 说明&#xff1a; 1. 按键抖动形成的原因 2. 按键消抖的方法 3. 用与非RS触发器构成消抖开关&#xff08;硬件消抖&#xff09; 说明&#xff1a; 笔记配套视频来源&#xff1a;B站本系列笔记并未记录所有章节&#xff0c;只对个人认为重要章节做了笔记&#xff1b;标…

抖去推--短视频剪辑、矩阵无人直播saas营销工具一站式开发

抖去推是一款短视频剪辑和矩阵无人直播SAAS营销工具一站式开发平台。它提供了以下功能和特点&#xff1a; 1. 短视频剪辑&#xff1a;抖去推提供了一系列的剪辑工具&#xff0c;包括自动剪辑、特效制作、配音配乐等&#xff0c;可以帮助用户轻松制作出高质量的短视频。 2. 矩阵…

npm : 无法加载文件 D:\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。

今天在使用vscode下载项目的依赖时&#xff0c;输入 pnmp install,结果报错: npm : 无法加载文件 D:\nodejs\node_global\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。原因&#xff1a; 因为在此系统上禁止运行脚本&#xff0c;也就是说没有权限&#xff0c;查一下&#…

两年外包生涯做完,感觉自己废了一半。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

【Java基础篇 | 面向对象】—— 聊聊什么是接口(下篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 上篇&#xff08;【Ja…

船舶机电设备智能故障诊断系统

1 船舶电气设备故障诊断专家系统 体系结构 整个系统的体系结构采用浏览器&#xff0f; 服务器 &#xff08;B&#xff0f; S&#xff09; 三层体系结构 &#xff08; 如图 1 所示 &#xff09;。B&#xff0f;S 模式是一种 以 Web 技术为基础的系统平台模式 。 把传统…

LeetCode刷题--- 求根节点到叶节点数字之和

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏&#xff1a;http://t.csdnimg.cn/ZxuNL http://t.csdnimg.cn/c9twt 前言&#xff1a;这个专栏主要讲述递归递归、搜索与回溯算法&#xff0c;所以下面题目主要也是这些算法做的 我讲述…

协同过滤算法springboot+java+ssm高校图书馆图书借阅管理系统k32vr

课题主要分为四大模块&#xff1a;即管理员模块&#xff0c;员工模块&#xff0c;教师模块和学生模块&#xff0c;主要功能包括&#xff1a;首页&#xff0c;个人中心&#xff0c;员工管理&#xff0c;学生管理&#xff0c;教师管理&#xff0c;图书分类管理&#xff0c;图书信…

交通|车辆路径启发式中的分解策略

推文作者&#xff1a;Amiee&#xff0c;研究方向&#xff1a;交通物流 编者按&#xff1a; VRP问题由于其理论难度和实践价值&#xff0c;学者们设计了大量的精确或启发式求解算法。本文讨论了车辆路径启发式中分解技术的主要特征&#xff0c;强调了它们的优缺点&#xff0c;并…

唱响主旋律——建行江门市分行推动服务实体经济高质量发展

建行江门市分行主动对接当地战略部署&#xff0c;在侨乡热土踏歌而行&#xff0c;全力当好服务实体经济的主力军和维护金融稳定的压舱石&#xff0c;在助力再造一个现代化新江门上贡献建行力量。 输血实体 为实体经济服务是金融的天职。建行江门市分行积极发挥在重大基建领域…