代理工具 · 1 分钟阅读

如何检查代理是否有效(附带现成脚本)

代理只有在活着、隐藏您的真实 IP 并且速度足够快时才有用。本指南涵盖了测试这三者的五种方法——包括您现在可以运行的现成 bash 和 Python 代理检查器。

有效代理的实际含义

三个单独的检查,而不是一个。

人们说代理是“有效的”,仿佛这只是一个简单的是或否的事实。其实不是——一个代理可以通过一个测试而失败两个其他测试,每个失败都会破坏不同的任务。一个合适的有效性检查需要回答三个问题。

  • 它活着吗? 通过它的请求是否真的完成,还是挂起并超时?特别是免费的代理经常会死——通常在几个小时内。
  • 它是匿名的吗? 目标是否看到代理的IP,还是代理通过头信息泄露了你的真实IP?一个透明的代理转发你的真实IP对于隐私来说比无用更糟。
  • 它快吗? 一个活着的代理如果增加几秒的延迟,对于一次性检查来说是可以的,但对于大规模抓取来说就无望了。

如果你只需要一个代理的快速答案,将其粘贴到s4m代理检查器中。如果你有一个完整的列表需要验证——例如从免费的公共代理列表中过滤出的条目——请使用下面的脚本批量测试它们。

测试代理的五种方法

从单击到脚本批处理。

使用在线代理检查器

最快的选项:将HOST:PORT粘贴到/tools/proxy-checker/工具中,读取存活状态、响应时间和匿名性。适合单个代理或快速检查,无需安装任何东西。

使用 curl 测试一个代理

一个命令可以揭示它是否存活以及世界看到的出口 IP:通过代理 curl 到 IP 回显端点,并将结果与您的真实 IP 进行比较。如果它们匹配,则代理是透明的并且泄露了您的信息。

检查匿名级别

请求一个反映您头部信息的端点。高匿名(精英)代理不发送任何显示您来源的Via或X-Forwarded-For;匿名代理隐藏您的IP,但声明它是一个代理;透明代理转发您的真实IP。这与免费列表上的精英/匿名/透明过滤器相对应。

测量延迟

仅有存活性不足以进行批量工作。计时请求(下面的脚本打印毫秒)并丢弃任何对你的任务来说太慢的内容。请参阅关于诚实测量代理延迟的配套指南。

用脚本自动化整个列表

对于数十个或数千个代理,循环遍历文件并记录存活/死亡、出口 IP 和延迟。下面的 bash 和 Python 检查器正是这样做的——复制、保存并运行。

Bash 代理检查器

保存为proxy-check.sh,在proxies.txt中每行放一个HOST:PORT(假设为SOCKS5),然后:bash proxy-check.sh proxies.txt

bash
#!/usr/bin/env bash
# proxy-check.sh — test proxies for liveness, latency and anonymity.
# Usage: bash proxy-check.sh proxies.txt   (one HOST:PORT per line, SOCKS5)
set -u
TARGET="https://api.ipify.org"
TIMEOUT=8

myip=$(curl -s --max-time "$TIMEOUT" "$TARGET")
echo "your real IP: $myip"
echo "-------------------------------------------"

while IFS= read -r proxy; do
  [ -z "$proxy" ] && continue
  start=$(date +%s.%N)
  out=$(curl -s --max-time "$TIMEOUT" --socks5-hostname "$proxy" "$TARGET")
  code=$?
  end=$(date +%s.%N)
  if [ $code -ne 0 ] || [ -z "$out" ]; then
    printf '%-22s DEAD\n' "$proxy"
    continue
  fi
  ms=$(awk "BEGIN{printf \"%d\", ($end-$start)*1000}")
  if [ "$out" = "$myip" ]; then
    printf '%-22s ALIVE %5sms  TRANSPARENT (leaks your IP!)\n' "$proxy" "$ms"
  else
    printf '%-22s ALIVE %5sms  OK exit=%s\n' "$proxy" "$ms" "$out"
  fi
done < "$1"

Python 代理检查器

保存为 proxy_check.py 并运行:pip install "requests[socks]" && python3 proxy_check.py proxies.txt

python
#!/usr/bin/env python3
"""proxy_check.py — validate proxies for liveness, latency and anonymity.
Usage: python3 proxy_check.py proxies.txt   (one HOST:PORT per line)
Requires: pip install "requests[socks]"
"""
import sys, time, requests

TARGET = "https://api.ipify.org"
TIMEOUT = 8

def real_ip():
    return requests.get(TARGET, timeout=TIMEOUT).text.strip()

def check(proxy, my_ip):
    proxies = {"http": f"socks5h://{proxy}", "https": f"socks5h://{proxy}"}
    t0 = time.perf_counter()
    try:
        exit_ip = requests.get(TARGET, proxies=proxies, timeout=TIMEOUT).text.strip()
    except Exception:
        return f"{proxy:22} DEAD"
    ms = int((time.perf_counter() - t0) * 1000)
    if exit_ip == my_ip:
        return f"{proxy:22} ALIVE {ms:5}ms  TRANSPARENT (leaks your IP!)"
    return f"{proxy:22} ALIVE {ms:5}ms  OK exit={exit_ip}"

def main():
    my_ip = real_ip()
    print("your real IP:", my_ip)
    print("-" * 43)
    with open(sys.argv[1]) as fh:
        for line in fh:
            p = line.strip()
            if p:
                print(check(p, my_ip))

if __name__ == "__main__":
    main()

读取结果

DEAD、TRANSPARENT和OK告诉您什么。

两个脚本打印相同的三个结果。DEAD意味着请求从未完成——代理服务器宕机、被阻止或超时后太慢;请丢弃它。TRANSPARENT意味着代理服务器有响应,但出口IP等于您的真实IP,因此它正在转发您的真实地址,根本没有匿名性。您需要保留的是OK,它具有不同的出口IP和可接受的毫秒数。

定期运行检查器,而不是一次性。公共代理更新速度快,因此今天早上干净的列表到晚上就变得半死——这就是s4m免费代理列表不断重新验证而不是一次性发布的原因。当可靠性真正重要时,跳过猜测:经过身份验证的s4m数据中心代理是按设计活着的,并且使用您自己的USER:PASS连接,因此无需看管。好奇我们如何公平地计时代理?请参见我们如何测量延迟以及为什么ping会撒谎。

FAQ

问题,已解答

我怎么知道代理是否泄露了我的真实 IP?

通过代理向IP回显服务发送请求,并将返回的地址与您的真实IP进行比较。如果它们相同,则代理是透明的,并转发您的真实地址——上面的脚本将其标记为透明。一个合适的代理返回不同的出口IP。

精英代理、匿名代理和透明代理之间有什么区别?

精英(高匿名性)代理隐藏您的IP,并且不透露正在使用代理。匿名代理隐藏您的IP,但通过头部信号表明这是一个代理。透明代理完全转发您的真实IP。免费列表允许您按这些级别进行过滤。

为什么来自免费列表的代理死得这么快?

大多数是意外留下开放的主机;当所有者重启、打补丁或注意到流量时,它们会消失——通常在几小时内。这就是为什么您必须持续重新检查列表,而不是信任一次性快照,以及为什么付费数据中心代理存在于必须不失败的工作中。

我可以将脚本用于 HTTP 代理吗?

是的。示例假设使用SOCKS5(socks5h),它也会远程解析DNS。对于HTTP代理,将方案更改为http://(curl -x http://HOST:PORT,或在Python代理字典中使用http://),并指向代理的HTTP端口,例如3128。

停止照看死掉的代理

使用上面的脚本验证免费列表,或完全跳过波动:经过身份验证的s4m数据中心代理是按设计活跃的,SOCKS5在1080端口,HTTP在3128端口。首先在代理检查器中测试一个免费的。

人们通过搜索找到此页面

此页面回答的真实搜索短语 — 链接的短语打开详细覆盖它们的页面。