
AI网址,低价耐用,包纯度稳定:https://xjbtoken.site/目标
本次修改让 Firefox 的“手动 SOCKS5 代理配置”可以复用现有 SOCKS5 username/password 认证能力。
Firefox 原本已经具备 SOCKS5 用户名/密码认证源码:
nsIProxyInfo已有username/password字段。nsIProtocolProxyService::newProxyInfoWithAuth()已支持创建带认证信息的 SOCKS proxy。netwerk/socket/nsSOCKSIOLayer.cpp已实现 SOCKS5 RFC1929 username/password 握手。
原来缺少的是:手动代理 prefs 路径创建 nsIProxyInfo 时,始终传空 username/password。本次修改只是在手动 SOCKS5 代理解析时,从 --fpfile 读取账号密码并填入 nsIProxyInfo。
修改文件
1. C:\firefox\firefox\netwerk\base\nsProtocolProxyService.cpp
主要改动:
新增
--fpfile读取支持。新增 SOCKS 认证配置解析函数。
在手动 SOCKS5 代理创建
nsIProxyInfo前注入 username/password。只对
type == kProxyType_SOCKS生效,也就是 SOCKS5;不影响 SOCKS4、HTTP、HTTPS、PAC、system proxy。
2. C:\firefox\firefox\netwerk\base\nsProtocolProxyService.h
主要改动:
新增 SOCKS 认证凭据结构。
新增 fpfile 解析缓存字段。
新增函数声明。
fpfile 支持格式
格式 1:指定 host/port 的一行格式
host:port:username:password示例:
gate.xxx.info:1000:7091045-38eb762d-53050341-5m:f7bbdeeb-US也支持多行,代码会按当前手动 SOCKS 代理的 host/port 匹配:
gate.xxx.info:1000:7091045-38eb762d-53050341-5m:f7bbdeeb-US
other.proxy.invalid:1000:wrong:wrong限制:
一行格式只支持 DNS host / IPv4 host。
username/password 不支持冒号
:。IPv6 或含冒号密码建议使用 key-value 格式扩展,不用一行格式。
格式 2:全局 SOCKS 认证
socksauth.username=globaluser
socksauth.password=globalpass只要当前手动代理是 SOCKS5,且没有更具体的 host/port 匹配,就使用这组凭据。
格式 3:指定 host/port 的 key-value 格式
socksauth.host=gate.xxx.info
socksauth.port=1000
socksauth.username=xxx-38eb762d-53050341-5m
socksauth.password=xxx-UShost 匹配大小写不敏感。
使用方式
在 Firefox 中配置手动 SOCKS5 代理:
network.proxy.type = 1
network.proxy.socks = gate.xxx.info
network.proxy.socks_port = 1000
network.proxy.socks_version = 5启动 Firefox 时传入 fpfile:
firefox.exe --fpfile=C:\path\to\fp.txtfpfile 内容示例:
gate.xxx.info:1000:7091045-38eb762d-53050341-5m:f7bbdeeb-US关键代码
1. 新增 include
文件:netwerk/base/nsProtocolProxyService.cpp
C++
#include<cstdlib>
#include<fstream>
#include<string>
#include"base/command_line.h"
#include"base/string_util.h"用途:
<fstream>:读取--fpfile指定的文件。<string>/<cstdlib>:解析文本和端口。base/command_line.h/base/string_util.h:读取--fpfile命令行参数,并做 UTF 转换。
2. 字符串和端口辅助函数
3. 新增结构和缓存字段
4. 读取和解析 fpfile
5. 从 --fpfile 获取当前代理凭据
6. 在手动 SOCKS5 代理创建处注入凭据
已验证场景
使用当前 objdir 的 xpcshell.exe 直接验证,不依赖 mach xpcshell-test,因为当前 mozconfig 使用了 --disable-tests。
已验证:
host:port:user:pass正向匹配,成功注入 username/password。无
--fpfile,不注入。fpfile 存在但 host/port 不匹配,不注入。
socksauth.username/password全局格式,成功注入。socksauth.host/port/username/passwordscoped 格式,成功注入。host 大小写不敏感。
fpfile 路径带空格,正常。
fpfile 不存在,不注入。
SOCKS4 不注入 username/password。
编译命令
因为只改了 C++,可以用:
Bash
./mach build binaries已经编译通过。
注意事项
本改动不新增 UI。
本改动不新增 prefs。
本改动不把密码保存到 profile。
本改动依赖启动参数
--fpfile。SOCKS5 底层握手仍由原有
nsSOCKSIOLayer.cpp负责。password-only 不支持;username/password 必须都非空才注入。
一行冒号格式不支持 IPv6 host 或包含冒号的 username/password。
成品火狐自动化和指纹浏览器可使用:
https://github.com/LoseNine/ruyipage


夜雨聆风