Camoufox Proxy 和 GeoIP:您的出口 IP 是指纹

启用 geoip 后,Camoufox 从代理的出口 IP 派生您的时区、语言环境、坐标和伪装的 WebRTC 地址。这使得一个标记错误的代理比没有代理更显眼。

大多数 Camoufox 代理教程在设置 proxygeoip=True 的两行代码时就停止了。后果是没有人写下来的:启用 geoip 后,Camoufox 从代理的出口 IP 派生您的时区、语言环境、纬度、经度和伪装的 WebRTC 地址。代理不再是网络跳跃,而成为整个身份的真实来源。提供一个标记错误或回收的出口,Camoufox 就会围绕谎言构建一个完美一致的指纹——比没有伪装的信号更强。这里是设置、用户在 Google 上搜索的错误、SOCKS5 间隙,以及如何首先检查出口。

geoip 实际上从您的代理中派生了什么

Camoufox 是一个反检测的 Firefox 构建,封装了 Playwright 的 Python API,因此代理配置是 Playwright 形状的。地理层是其与众不同之处。根据项目文档,geoip=True(或目标 IP 地址)使 Camoufox 使用目标 IP 的经度、纬度、时区、国家和语言环境,并伪装 WebRTC IP 地址——然后更进一步,从该地区的语言使用者分布中计算浏览器语言,而不是默认使用该国的官方语言。查询在一个 MaxMind 格式的数据库中运行,该数据库作为可选附加组件提供:

pip install -U "camoufox[geoip]"
python -m camoufox fetch

[geoip] 附加组件在打包意义上是可选的——文档称其在使用代理时强烈推荐,这种说法还不够。没有它,您将获得一个在主机机器的时区和语言环境上运行的隐身浏览器,而其 IP 声称位于另一个国家。以下是使用经过身份验证的 HTTP 网关的最小工作设置:

from camoufox.sync_api import Camoufox

with Camoufox(
    geoip=True,
    humanize=True,          # cursor movement, not a fingerprint setting
    headless=False,
    proxy={
        "server": "http://gate.quantumproxies.io:PORT",
        "username": "USER",
        "password": "PASS",
    },
) as browser:
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.text_content("body"))   # should be the exit IP, not yours

请注意 proxy 字典的形状:凭证放在单独的 usernamepassword 字段中,永远不要放在 server URL 中。这是从 Playwright 继承的,也是这里经过身份验证的代理无痛的原因——没有扩展填充,没有身份验证对话框需要关闭。异步 API 通过 AsyncCamoufox 是相同的。有关如何与其他隐身堆栈进行比较,请参阅我们关于反检测框架中经过身份验证的代理支持的地图

为什么错误的代理会暴露您

反机器人系统很少仅仅寻找一个错误的值。它们寻找矛盾——两个信号不能同时对同一个人类都是真实的。一个浏览器报告 Europe/Rome,而其 IP 定位到俄亥俄州就是一个例子。Camoufox 的 geoip 功能旨在消除这类矛盾,并且它做得很好。问题在于它总是以 IP 的利益来解决矛盾。如果数据库显示您的出口在德国,但地址是一个回收的数据中心范围,半个互联网已经将其标记为代理,Camoufox 将忠实地将您的浏览器打扮成一个德国家庭用户,坐在一个没有德国家庭用户使用过的 ASN 上。

这使得出口质量成为一个指纹问题,而不仅仅是一个阻止问题。每次运行都应该进行两个检查:出口的真实 ASN 和国家,以及 IP 是否已经携带欺诈或代理评分。我们的免费IP 质量检查器可以回答这两个问题,而在 200 多个国家的真实 ISP 范围内的住宅代理是使派生身份可信的关键。没有任何东西可以免除您下面的层——引擎仍然发出 TLS 握手,而JA3/JA4 指纹识别在您的伪装值发送之前就读取了它。

流程图显示一个住宅出口 IP 提供给 Camoufox geoip 查询,派生时区、语言环境、坐标和 WebRTC 地址,然后注入指纹
启用 geoip 后,五个身份信号从一个输入派生:出口 IP。选择错误的输入,整个链条就会一致地错误。

您将实际遇到的 Camoufox 代理错误

三个失败主导了问题跟踪器,它们都不意味着您的凭证错误:

第一个和第三个案例的干净解决方法已被记录但使用不足:geoip 接受一个 IP 地址,而不仅仅是 True。通过同一个代理自己解析出口,然后将答案交给 Camoufox。您完全跳过了内部查询,并且作为奖励,您可以记录每个会话运行在哪个出口上:

import requests
from camoufox.sync_api import Camoufox

HOST = "gate.quantumproxies.io:PORT"
USER, PASS = "USER-session-a1b2", "PASS"     # sticky session id in the username

PROXY = {"server": f"http://{HOST}", "username": USER, "password": PASS}
url = f"http://{USER}:{PASS}@{HOST}"          # percent-encode odd characters

# 1) resolve the exit through the same gateway and session
exit_ip = requests.get(
    "https://api.ipify.org", proxies={"http": url, "https": url}, timeout=15
).text.strip()

# 2) hand Camoufox the address instead of letting it discover one
with Camoufox(geoip=exit_ip, proxy=PROXY, humanize=True) as browser:
    page = browser.new_page()
    page.goto("https://browserscan.net")
    print("session exit:", exit_ip)

两个细节很重要。使用粘性会话,以便在步骤一中解析的 IP 在步骤二中仍然是出口——在每次请求轮换下,这些是不同的地址,派生的地理信息从第一页加载开始就是错误的。并且对包含 @:# 的凭证进行百分比编码:字典形式是免疫的,URL 形式则不是。

Camoufox 和 SOCKS5:WebRTC 和认证差距

SOCKS5 是 Camoufox 用户卡住的地方,原因比缺少功能更有趣。问题 #368 完美地描述了这一点:没有携带 UDP 的代理,WebRTC 可能会暴露您。WebRTC 通过 UDP 协商,HTTP 代理仅支持 TCP,而 SOCKS5 是唯一具有 UDP 关联模式的常见协议——这就是人们在这里特别想要它的原因。Camoufox 的答案是从 geoip 数据中伪装 WebRTC 地址,而不是路由媒体路径,这涵盖了常见的泄漏。block_webrtc 选项完全移除表面,代价是看起来像一个禁用 WebRTC 的浏览器。

经过身份验证的 SOCKS5 是更难的差距。讨论 #334 是一个用户询问技巧并报告唯一有效的方法是运行一个本地代理服务器,将浏览器流量转发到具有登录名和密码的 SOCKS5 端点。这仍然是当前的状态,并且为您留下了三个选项,按优先顺序排列:

获取带有 IP 白名单的 SOCKS5 端点

检查表比较了基于经过验证的住宅出口构建的连贯 Camoufox 身份与来自标记错误代理的矛盾信号
故障模式不是缺少值。它是一个与其背后的 IP 不一致的自信值。

在您信任 geoip 之前的预检清单

常见问题解答

如何在 Camoufox 中设置代理?

将一个 Playwright 风格的字典传递给 Camoufox() 构造函数:proxy={"server": "http://host:port", "username": "USER", "password": "PASS"}。凭证应放在单独的字段中,而不是在服务器 URL 中。与其一起添加 geoip=True,以便时区、语言环境和坐标从该出口派生,而不是从您的主机机器派生。

Camoufox 支持 SOCKS5 代理吗?

代理字典接受 socks5:// 服务器,但经过身份验证的 SOCKS5 是已知的痛点——讨论 #334 报告本地中继是唯一可靠的路线,完整的 SOCKS5 支持仍然是一个开放的增强请求(#368)。实际的解决方法是 IP 白名单,这完全消除了凭证要求,或使用网关的 HTTP 端口。

Camoufox 中的 geoip=True 做什么?

它在 MaxMind 格式的数据库中查找出口 IP,并使用结果设置浏览器的经度、纬度、时区、国家和语言环境,伪装 WebRTC 地址,并为该地区选择一个合理的语言。它需要安装 camoufox[geoip] 附加组件。您也可以传递一个 IP 字符串而不是 True 来跳过自我发现步骤。

为什么我会收到 InvalidProxy: Failed to connect to proxy?

因为 geoip 预检查无法通过您的代理访问公共 IP API。这些端点是 HTTPS 的,因此代理必须支持 CONNECT 隧道;仅转发普通 HTTP 的网关在这里会失败,而在其他地方看似工作。通过同一代理进行 HTTPS 请求测试,或自行解析出口并将其作为 geoip="1.2.3.4" 传递。

Camoufox 的 geoip 选项是生态系统中花钱在 IP 质量上而不是更多规避代码上的最佳理由。它解决了指纹一致性中最困难的部分——使浏览器与网络一致——并自动解决了这个问题,前提是网络说的是实话。先购买出口,然后启用 geoip。如果您需要 Chromium 而不是 Firefox,同样的原则也适用于我们的Patchright 代理设置指南。这是技术指导,而不是法律建议:在法律和目标条款内进行抓取。

在经过验证的住宅出口上运行 Camoufox