ล้างรายการพร็อกซี IP:พอร์ตด้วย Python
ตรวจไฟล์ 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 ในวงเล็บเหลี่ยมหากนั่นเป็นรูปแบบจริง สคริปต์ปฏิเสธอินพุตที่ไม่รองรับแทนการเดา และเอาต์พุตไม่บอกความพร้อมใช้งาน ความไม่เปิดเผยตัวตน ประเทศหรือความเร็ว สิ่งเหล่านี้ต้องใช้การทดสอบการเชื่อมต่อที่ควบคุมเงื่อนไข