将 IPv4 IP:port 条目逐行写入 proxies.txt,每行一个。所有条目必须属于同一种已知代理协议。如果从免费代理列表收集条目,应先按协议分开,再构建此纯文本输入。此清理方式不接受带凭据的 URL、CSV 列或 IPv6 地址。

将这份只用标准库的脚本保存为同一目录下的 clean-proxies.py:

from ipaddress import IPv4Address
from pathlib import Path

seen = set()
cleaned = []

for number, raw in enumerate(
    Path("proxies.txt").read_text(encoding="utf-8").splitlines(),
    start=1,
):
    text = raw.strip()
    if not text:
        continue
    try:
        host, port_text = text.rsplit(":", 1)
        host = str(IPv4Address(host))
        port = int(port_text)
        if not 1 <= port <= 65535:
            raise ValueError("port out of range")
    except ValueError:
        print(f"Skipping line {number}: invalid IPv4 endpoint")
        continue

    endpoint = (host, port)
    if endpoint not in seen:
        seen.add(endpoint)
        cleaned.append(f"{host}:{port}")

output = "\n".join(cleaned)
Path("proxies-clean.txt").write_text(
    output + ("\n" if output else ""),
    encoding="utf-8",
)
print(f"Saved {len(cleaned)} endpoints")

从该目录运行:

uv run --no-project python clean-proxies.py

查看跳过行的提示和 proxies-clean.txt;输入文件保持不变。输出保留首次出现的顺序,按地址加数值端口去重。两条 203.0.113.10:8080 和一条 203.0.113.10:3128 会产生两个端点。十进制端口 08080 会规范为 8080。

文档示例地址仅用于展示格式。有效的 IPv4 语法也包含私有和特殊用途地址,因此清理后的条目不一定能从公网访问。如果需要仅含公网地址的列表,应明确增加地址策略。

对于混合 HTTP/SOCKS 输入,应通过独立文件或一列保留协议信息,不要从端口 1080 推断协议。如果实际格式是带方括号的 IPv6,应使用相应解析器。此脚本拒绝不支持的输入,不作猜测;输出不能说明端点是否可用、匿名性、国家或速度。这些需要受控的连接测试。

相关文章