惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
S
Security @ Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
The Hacker News
The Hacker News
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
博客园 - 司徒正美
雷峰网
雷峰网
L
LINUX DO - 最新话题
博客园 - 叶小钗
云风的 BLOG
云风的 BLOG
The Last Watchdog
The Last Watchdog
V2EX - 技术
V2EX - 技术
S
Security Affairs
有赞技术团队
有赞技术团队
月光博客
月光博客
T
Threatpost
T
Tor Project blog
O
OpenAI News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
V2EX
Know Your Adversary
Know Your Adversary
Project Zero
Project Zero
博客园 - 三生石上(FineUI控件)
D
Docker
AWS News Blog
AWS News Blog
AI
AI
P
Proofpoint News Feed
K
Kaspersky official blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Securelist
F
Fortinet All Blogs
F
Full Disclosure
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
量子位
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Palo Alto Networks Blog
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
美团技术团队
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 打造自己的流媒体音乐服务 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
实用自动代理配置示例
2024-04-25 · via mephisto.cc

自动代理上网算是个比较常用的需求,比如好多测试工程师使用charles抓包是就需要配置代理。常见的浏览器插件Proxy SwitchyOmega等其实也是方便你设置代理的。

本文主要讲代理自动配置,昨天配置后,的确很方便实用,可能对读者有用,分享出来。

先看维基百科解释,摘取核心部分。

代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。

一个PAC文件包含一个JavaScript的函数“FindProxyForURL(url, host)”,这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则使用一个特定的代理器或者直接访问,这些规则也有优先级。当使用高优先级的规则无法访问的时候,低优先级的访问规则(如果存在)就提供了备用的访问方式。浏览器在访问网页以前,会首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自动发现协议自动配置的。

话不多说,直接上pac代码:

 1mephisto@RMBP ~/gfw> cat proxy.pac
 2function FindProxyForURL(url, host) {
 3
 4    var _http = 'PROXY 192.168.18.193:1081';
 5
 6    if (shExpMatch(host, '*.v2ex.com')) { return _http; }
 7    if (shExpMatch(host, '*.google.com')) { return _http; }
 8    if (shExpMatch(host, '*.gmail.com')) { return _http; }
 9    if (shExpMatch(host, '*.google.co.jp')) { return _http; }
10    if (shExpMatch(host, '*..googleusercontent.com')) { return _http; }
11    if (shExpMatch(host, '*.googleusercontent.com')) { return _http; }
12    if (shExpMatch(host, '*.googleapis.com')) { return _http; }
13    if (shExpMatch(host, '*.github.com')) { return _http; }
14    if (shExpMatch(host, '*.githubassets.com')) { return _http; }
15    if (shExpMatch(host, '*.githubusercontent.com')) { return _http; }
16    if (shExpMatch(host, '*.youtube.com')) { return _http; }
17    if (shExpMatch(host, '*.inkscape.org')) { return _http; }
18    if (shExpMatch(host, '*.bootstrapcdn.com')) { return _http; }
19    if (shExpMatch(host, '*.reddit.com')) { return _http; }
20    if (shExpMatch(host, '*.openvpn.net')) { return _http; }
21    if (shExpMatch(host, '*.wikipedia.org')) { return _http; }
22    if (shExpMatch(host, '*.wikimedia.org')) { return _http; }
23    if (shExpMatch(host, '*.medium.com')) { return _http; }
24    if (shExpMatch(host, '*.web.dev')) { return _http; }
25    if (shExpMatch(host, '*.openai.com')) { return _http; }
26    if (shExpMatch(host, '*.googleadservices.com')) { return _http; }
27    if (shExpMatch(host, '*.gstaic.com')) { return _http; }
28    if (shExpMatch(host, '*.ycombinator.com')) { return _http; }
29    if (shExpMatch(host, '*.ytimg.com')) { return _http; }
30    if (shExpMatch(host, '*.ggpht.com')) { return _http; }
31    if (shExpMatch(host, '*.googlevideo.com')) { return _http; }
32    if (shExpMatch(host, '*.x.com')) { return _http; }
33    if (shExpMatch(host, '*.twitter.com')) { return _http; }
34    if (shExpMatch(host, '*.twimg.com')) { return _http; }
35    if (shExpMatch(host, '*.hysteria.network')) { return _http; }
36    if (shExpMatch(host, '*.facebook.com')) { return _http; }
37    if (shExpMatch(host, '*.instagram.com')) { return _http; }
38
39    return 'DIRECT';
40  }

上面的代码不漂亮,可以说有点丑但是能工作!有洁癖的自己改下,简单解释就是匹配到目标网址,走http代理 192.168.18.193:1081,其它的不走代理直接访问。

这样的作用是什么,我想你看网址应该都能明白。

都介绍pac文件了,当然要顺带说下怎么搭建本地代理。服务端的代理我以前写过,请在我的个人网站搜索相关文章。

1. 代理服务

 1mephisto@RMBP ~/gfw> pwd
 2/Users/mephisto/gfw
 3mephisto@RMBP ~/gfw> ls
 4OmegaProfile_auto_switch.pac  config.yaml                   hysteria-darwin-amd64*        proxy.pac
 5mephisto@RMBP ~/gfw> cat config.yaml
 6server: stock.mephisto.cc:443
 7
 8auth: your_passwd
 9
10bandwidth:
11  up: 20 mbps
12  down: 100 mbps
13
14tls:
15  insecure: true
16
17
18socks5:
19  listen: 127.0.0.1:1080
20
21http:
22  listen: 0.0.0.0:1081
23mephisto@RMBP ~/gfw> ./hysteria-darwin-amd64 -c config.yaml
242024-04-25T17:07:17+08:00       INFO    client mode
252024-04-25T17:07:18+08:00       INFO    connected to server     {"udpEnabled": true, "tx": 2500000, "count": 1}
262024-04-25T17:07:18+08:00       INFO    HTTP proxy server listening     {"addr": "0.0.0.0:1081"}
272024-04-25T17:07:18+08:00       INFO    SOCKS5 server listening {"addr": "127.0.0.1:1080"}
282024-04-25T17:07:21+08:00       INFO    update available        {"version": "v2.4.1", "url": "https://github.com/apernet/hysteria/releases", "urgent": false}

我是在Mac上面操作的,这样即可本地开启一个 hysteria 客户端代理。走不同协议,一个socks5,一个http的,http的我选择了全网卡监听。方便家里的其它设备连接,socks5的供Mac本身使用。

1mephisto@RMBP ~> ip a
2lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
3        inet 127.0.0.1/8 lo0
4        inet6 ::1/128
5        inet6 fe80::1/64 scopeid 0x1
6en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
7        ether 34:36:3b:c6:68:b6
8        inet6 fe80::1462:852a:9b96:efa2/64 secured scopeid 0x4
9        inet 192.168.18.193/24 brd 192.168.18.255 en0

由于我本机分配的ip是 192.168.18.193,所以对应的http代理就是 192.168.18.193:1081

其实,你也可以找个路由器,或者树莓派跑,分配固定ip,甚至可以自己本地弄个dnsmasq,绑定一个自定义域名使用。当然那样就搞复杂了,本文主要写给非高手看的。

2. 配置自动代理

Mac 本机,我一般是通过浏览器插件 Proxy SwitchyOmega,配置走socks5代理,这一部分网上有很多教程,这里不再赘述。主要是上网冲浪,满足个人需求。

iPhone 或者 iPad 配置自动代理:

点这个地方进入 wifi 设置,最底下有 http 代理设置的部分

wifi settings

填入pac文件的下载地址。

pac settings

细心的读者,可能就要问了,这个下载地址怎么来的。别急,看下文。

3. 在本机开启一个静态文件服务器

这里我使用dufs这rust工具提供静态文件下载服务(我个人喜欢这个小工具)。

当然你使用Nginx、Apache、甚至 python3 -m http.sever,或者其它小工具都行。

1mephisto@RMBP ~/gfw> dufs proxy.pac
2Listening on:
3  http://127.0.0.1:5000/
4  http://192.168.18.193:5000/
5  http://[::1]:5000/

值得一提的是:

虽然现代的大多数客户端无论从HTTP请求返回的MIME类型是什么都能正确处理,但为了完整性和最佳的兼容性,我们应该设置网页服务器将这个文件的MIME类型声明为application/x-ns-proxy-autoconfig或者application/x-javascript-config。(application/x-ns-proxy-autoconfig相对application/x-javascript-config被更多的客户端所支持,因为它是最初被定义在Netscape规范里面的,而后者最近才开始被使用。)

我实际使用的dufs的时候,iPhone 和 iPad不用设置MIME都可以正常使用,其它系统或者硬件我没有测试。

4. 最后

访问链路是这样的。

你的移动设备--》http自动代理 --》本地hysteria客户端 --》 海外hysteria服务端 --》自由世界互联网

这样你的移动设备甚至都不用下载额外软件。当然前提是你使用 Wi-Fi网络,移动网络还是得用小飞机等软件。4G/5G等移动网络是没有办法设置http proxy的。

请相信我,直接使用这种pac的方式,访问google推特什么的,速度真的非常快,毕竟没有中间软件性能损耗。同一个服务端,小飞机等各种菊花转,这个顺畅得很!

后续,我想把客户端跑在我的吃灰树莓上,树莓派插到家里的路由器上,配置固定ip。再整个dnsmasq,配置个内网域名,这样更加方便,不用记各种ip。

当然,Ubuntu/Mac OS/Windows 等都是可以配置全局 http 代理的,个人一般只在手机或者pad上玩,回家都不怎么开电脑,也就浏览器配置下代理,个人够用。