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라면 그에 맞는 파서를 사용하세요. 이 스크립트는 추측하는 대신 미지원 입력을 거부하며 출력은 가용성, 익명성, 국가나 속도를 말해 주지 않습니다. 이런 정보에는 통제된 연결 테스트가 필요합니다.

관련 글