Skip to content
Intermediate / 3 min read

如何为 HTTP、SOCKS5 和 Shadowsocks 构建 IPRoyal 代理检查器

了解如何使用自定义 Python 脚本验证 IPRoyal 代理。检查 HTTP、SOCKS5 和 Shadowsocks 端点的连通性、延迟和 IP 匿名性。

SOCKS5 网页抓取 隐私/匿名性 其他

概述

IPRoyal 提供住宅代理、数据中心代理和 ISP 代理,支持 HTTP、SOCKS5 和 Shadowsocks 协议。无论你是在抓取数据、监控搜索结果,还是私密浏览,你都需要知道你的代理是否可用、快速,并且没有泄露你的真实 IP。手动检查每个端点无法扩展。本教程将向你展示如何用 Python 构建一个可复用的代理检查器,用于测试任何 IPRoyal 端点的连通性、测量延迟并验证匿名性。

前置条件

  • 你的系统上安装了 Python 3.8 或更高版本。
  • pip 包管理器。
  • IPRoyal 代理凭据(主机、端口、用户名、密码)。你可以从 IPRoyal 控制面板复制这些信息。
  • 用于 Shadowsocks 测试:Shadowsocks 客户端,例如 shadowsocks-libev(Linux/macOS)或 shadowsocks-rust。
  • 基本熟悉命令行和 Python。

了解需要检查什么

一个有用的代理检查器应该回答四个问题:

  • 连通性: 代理能否访问公共互联网?
  • 匿名性: 服务返回的出口 IP 是否与代理 IP 匹配(而不是你的真实 IP)?
  • 延迟: 一个请求从开始到结束需要多长时间?
  • DNS 行为: DNS 请求是通过代理解析还是在本地解析?(泄露会暴露你的真实位置。)

不同协议需要略微不同的处理方式。下表总结了每种 IPRoyal 协议的方法。

协议 Python 方案 DNS 处理 认证
HTTP http:// 本地或代理 URL 或请求头中的用户名/密码
HTTPS http:// (CONNECT) 本地或代理 URL 或请求头中的用户名/密码
SOCKS5 socks5h:// 远程(代理) URL 中的用户名/密码
Shadowsocks ss-local 后的本地 SOCKS5 远程 配置中的密码

步骤

1. 安装 Python 依赖

requests 库处理 HTTP 和 HTTPS 代理。对于 SOCKS5,你还需要 requests[socks] 和 pysocks。

pip install requests requests[socks] pysocks

2. 收集你的 IPRoyal 代理端点

登录 IPRoyal 控制面板并复制代理列表。大多数列表包含以下格式的行:

host:port:username:password

将列表保存到纯文本文件,例如 proxies.txt。如果你使用不同的格式,请在后续步骤中调整解析代码。

3. 编写基本的 HTTP 代理检查器

创建一个名为 checker.py 的文件。以下代码片段测试单个 HTTP 代理并打印返回的 IP。

import requests
from requests.exceptions import ProxyError, ConnectTimeout

proxy_url = "http://username:password@host:port"
proxies = {
    "http": proxy_url,
    "https": proxy_url,
}

try:
    response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
    response.raise_for_status()
    print("Proxy works. Your IP appears as:", response.json()["origin"])
except (ProxyError, ConnectTimeout) as e:
    print("Proxy failed:", e)

将 username、password、host 和 port 替换为你的 IPRoyal 凭据。

4. 将检查器扩展到 SOCKS5

对于 SOCKS5,将协议方案改为 socks5h://。h 告诉 requests 通过代理解析 DNS,这可以防止 DNS 泄露。

proxy_url = "socks5h://username:password@host:port"
proxies = {
    "http": proxy_url,
    "https": proxy_url,
}

运行相同的请求代码块。如果你看到 Missing dependencies for SOCKS support 错误,请重新安装 requests[socks]。

5. 添加延迟测量和 IP 验证

修改脚本,对请求计时,并将返回的 IP 与预期的代理 IP 进行比较。你可以将预期 IP 存储在代理列表中,或单独获取它。

import time

start = time.time()
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
elapsed = time.time() - start
returned_ip = response.json()["origin"]
print(f"Latency: {elapsed:.2f}s, Returned IP: {returned_ip}")

如果返回的 IP 与你的真实 IP 匹配,那么代理没有匿名化你的流量。请检查你的认证和协议设置。

6. 测试 Shadowsocks 端点

Shadowsocks 是一种隧道,而不是直接的代理协议。要检查 IPRoyal Shadowsocks 端点,请运行一个暴露 SOCKS5 代理的本地 Shadowsocks 客户端,然后测试该本地 SOCKS5 地址。

在 Linux 或 macOS 上安装 shadowsocks-libev(通过 Homebrew)。然后创建一个配置文件 ss-local.json:

{
  "server": "your_iproyal_ss_server",
  "server_port": 8388,
  "local_address": "127.0.0.1",
  "local_port": 1080,
  "password": "your_password",
  "method": "aes-256-gcm"
}

启动客户端:

ss-local -c ss-local.json

现在,在检查器脚本中将 socks5h://127.0.0.1:1080 视为你的代理。如果连接正常,则 Shadowsocks 隧道正在运行。

7. 构建带有轮换和日志记录的批量检查器

对于多个代理,解析你的 proxies.txt 文件,遍历每个端点,并将结果记录到 CSV 文件。这有助于你识别失效 IP 并跟踪一段时间内的性能。

import csv

with open("proxies.txt") as f:
    lines = [line.strip() for line in f if line.strip()]

results = []
for line in lines:
    host, port, user, pwd = line.split(":")
    proxy_url = f"socks5h://{user}:{pwd}@{host}:{port}"
    proxies = {"http": proxy_url, "https": proxy_url}
    try:
        start = time.time()
        r = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
        elapsed = time.time() - start
        ip = r.json()["origin"]
        results.append((host, port, "OK", f"{elapsed:.2f}", ip))
    except Exception as e:
        results.append((host, port, "FAIL", "", str(e)))

with open("proxy_report.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["Host", "Port", "Status", "Latency(s)", "Returned IP/Error"])
    writer.writerows(results)

定期运行脚本以维护健康的代理池。

故障排除

  • 407 Proxy Authentication Required: 验证用户名和密码。如果你的密码包含 @ 或 : 等特殊字符,请对其进行 URL 编码(例如,@ 变为 %40)。
  • 连接超时: 检查主机和端口是否正确,并且如果你的套餐要求,你的 IP 已在 IPRoyal 控制面板中列入白名单。
  • SOCKS5 错误: 确保已安装 requests[socks]。使用 socks5h:// 进行远程 DNS 解析;socks5:// 在本地解析 DNS。
  • Shadowsocks 客户端无法启动: 确认加密方法与你的 IPRoyal 配置匹配,并且服务器端口已开放。使用 ss-local -c ss-local.json -v 测试以获取详细输出。
  • DNS 泄露: 使用 socks5h://,并通过代理使用 DNS 泄露测试服务进行测试。如果解析器位置与代理位置不同,则 DNS 正在泄露。
  • HTTPS 证书错误: 某些代理会拦截 TLS。对于抓取,请优先选择支持端到端 HTTPS 且不拦截的住宅代理或 ISP 代理。

总结

你已经构建了一个基于 Python 的代理检查器,用于验证来自 IPRoyal 的 HTTP、SOCKS5 和 Shadowsocks 端点。该脚本测量延迟、验证出口 IP,并记录结果以供批量分析。定期检查有助于你轮换掉失效代理,并维护可靠的抓取或隐私工作流。IPRoyal 广泛的协议支持使其成为这些任务的灵活选择,并且通过更改代理列表格式,该检查器可以适配任何提供商。