用 Python 清理 IP:端口代理列表
校验纯 IPv4 代理文件、规范化端口并去除重复端点,同时保留相同 IP 上的不同端口。
将 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,应使用相应解析器。此脚本拒绝不支持的输入,不作猜测;输出不能说明端点是否可用、匿名性、国家或速度。这些需要受控的连接测试。