تعمل بروكسيات SOCKS5 على مستوى شبكة أقل من بروكسيات HTTP - فهي تتعامل مع أي نوع من حركة المرور (HTTP، HTTPS، FTP، UDP) دون تعديل الطلبات. وهذا يجعل اكتشافها أكثر صعوبة ومثالية للمواقع المحمية بـ CAPTCHA. يغطي هذا الدليل إعداد SOCKS5 عبر Python وNode.js وأدوات أتمتة المتصفح.
SOCKS5 مقابل وكيل HTTP
| ميزة | وكيل HTTP/HTTPS | وكيل SOCKS5 |
|---|---|---|
| دعم البروتوكول | HTTP/HTTPS فقط | أي TCP/UDP |
| تعديل الرأس | قد تضيف X-Forwarded-For |
لا تعديل |
| الكشف | أسهل (تسرب الرؤوس) | أصعب |
| السرعة | سريع | أبطأ قليلا |
| المصادقة | Basic/Digest | اسم المستخدم/password |
| قرار DNS | من جانب العميل | جانب الخادم (SOCKS5h) |
| دعم ويب سوكيت | محدودة | كامل |
إعداد بايثون
طلبات + باي سوكس
pip install requests[socks] pysocks
import requests
import time
SOCKS5_HOST = "proxy.example.com"
SOCKS5_PORT = 1080
SOCKS5_USER = "proxyuser"
SOCKS5_PASS = "proxypass"
CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"
# SOCKS5 proxy configuration
proxies = {
"http": f"socks5h://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}",
"https": f"socks5h://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}",
}
# socks5h = DNS resolved by proxy server (recommended)
# socks5 = DNS resolved locally
def fetch_through_socks(url):
"""Fetch URL through SOCKS5 proxy."""
return requests.get(
url,
proxies=proxies,
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36"
},
timeout=30,
)
def solve_captcha(site_url, sitekey):
"""Solve CAPTCHA via CaptchaAI (direct, no proxy needed)."""
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"json": 1,
})
data = resp.json()
if data["status"] != 1:
raise Exception(f"Submit: {data['request']}")
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY,
"action": "get",
"id": task_id,
"json": 1,
})
data = resp.json()
if data["request"] == "CAPCHA_NOT_READY":
continue
if data["status"] == 1:
return data["request"]
raise Exception(f"Solve: {data['request']}")
raise TimeoutError("Timeout")
# Full workflow
resp = fetch_through_socks("https://target.com/form")
import re
match = re.search(r'data-sitekey="([^"]+)"', resp.text)
if match:
token = solve_captcha("https://target.com/form", match.group(1))
# Submit with token through same proxy
resp = requests.post(
"https://target.com/submit",
data={"g-recaptcha-response": token},
proxies=proxies,
)
aiohttp + SOCKS5
import aiohttp
import aiohttp_socks
import asyncio
async def fetch_async(url):
connector = aiohttp_socks.ProxyConnector.from_url(
f"socks5://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}"
)
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get(url) as resp:
return await resp.text()
asyncio.run(fetch_async("https://target.com/form"))
السيلينيوم + الجوارب5
from selenium import webdriver
from selenium.webdriver.common.by import By
def create_socks5_driver(host, port, username=None, password=None):
options = webdriver.ChromeOptions()
# SOCKS5 proxy (no auth via command line)
options.add_argument(f"--proxy-server=socks5://{host}:{port}")
# DNS through proxy
options.add_argument("--host-resolver-rules=MAP * ~NOTFOUND, EXCLUDE 127.0.0.1")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(options=options)
return driver
# For authenticated SOCKS5, use seleniumwire
from seleniumwire import webdriver as sw_webdriver
def create_auth_socks5_driver():
options = {
"proxy": {
"http": f"socks5h://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}",
"https": f"socks5h://{SOCKS5_USER}:{SOCKS5_PASS}@{SOCKS5_HOST}:{SOCKS5_PORT}",
}
}
chrome_options = sw_webdriver.ChromeOptions()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
return sw_webdriver.Chrome(
seleniumwire_options=options,
options=chrome_options,
)
# Usage
driver = create_auth_socks5_driver()
driver.get("https://target.com/form")
time.sleep(3)
sitekey = driver.execute_script(
"return document.querySelector('[data-sitekey]')?.getAttribute('data-sitekey')"
)
if sitekey:
token = solve_captcha("https://target.com/form", sitekey)
driver.execute_script(f"""
document.querySelector('#g-recaptcha-response').value = '{token}';
""")
driver.find_element(By.CSS_SELECTOR, "form").submit()
driver.quit()
Node.js + SOCKS5
const { SocksProxyAgent } = require("socks-proxy-agent");
const axios = require("axios");
const CAPTCHAAI_KEY = "YOUR_API_KEY";
const socksAgent = new SocksProxyAgent(
"socks5h://proxyuser:proxypass@proxy.example.com:1080"
);
async function fetchViaSocks(url) {
return axios.get(url, {
httpsAgent: socksAgent,
httpAgent: socksAgent,
headers: {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0",
},
});
}
async function solveCaptcha(siteUrl, sitekey) {
// CaptchaAI calls don't go through SOCKS proxy
const submit = await axios.post(
"https://ocr.captchaai.com/in.php",
null,
{
params: {
key: CAPTCHAAI_KEY,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: siteUrl,
json: 1,
},
}
);
const taskId = submit.data.request;
for (let i = 0; i < 60; i++) {
await new Promise((r) => setTimeout(r, 5000));
const result = await axios.get("https://ocr.captchaai.com/res.php", {
params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
});
if (result.data.request === "CAPCHA_NOT_READY") continue;
if (result.data.status === 1) return result.data.request;
}
throw new Error("Timeout");
}
Puppeteer + SOCKS5
const puppeteer = require("puppeteer");
async function launchWithSocks5() {
const browser = await puppeteer.launch({
args: [
"--proxy-server=socks5://proxy.example.com:1080",
"--no-sandbox",
"--window-size=1920,1080",
],
});
const page = await browser.newPage();
// Authenticate if needed
await page.authenticate({
username: "proxyuser",
password: "proxypass",
});
await page.goto("https://target.com/form", { waitUntil: "networkidle0" });
const sitekey = await page.evaluate(() =>
document.querySelector("[data-sitekey]")?.getAttribute("data-sitekey")
);
if (sitekey) {
const token = await solveCaptcha(page.url(), sitekey);
await page.evaluate((t) => {
document.querySelector("#g-recaptcha-response").value = t;
}, token);
}
await browser.close();
}
تمرير وكيل SOCKS5 إلى CaptchaAI
يمكن لـ CaptchaAI حل اختبارات CAPTCHA من عنوان IP الوكيل الخاص بك:
def solve_with_proxy(site_url, sitekey, proxy_url):
"""Pass proxy to CaptchaAI for IP-matched solving."""
# Format: type:host:port:user:pass
proxy_param = f"socks5:{SOCKS5_HOST}:{SOCKS5_PORT}:{SOCKS5_USER}:{SOCKS5_PASS}"
resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
"key": CAPTCHAAI_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": site_url,
"proxy": proxy_param,
"proxytype": "SOCKS5",
"json": 1,
})
data = resp.json()
if data["status"] != 1:
raise Exception(f"Submit: {data['request']}")
task_id = data["request"]
for _ in range(60):
time.sleep(5)
resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
"key": CAPTCHAAI_KEY, "action": "get",
"id": task_id, "json": 1,
})
data = resp.json()
if data["request"] != "CAPCHA_NOT_READY":
return data["request"]
raise TimeoutError("Timeout")
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
| تم رفض الاتصال | منفذ أو مضيف خاطئ | تحقق من تشغيل خادم SOCKS5 |
| تسرب DNS | استخدام socks5:// بدلاً من socks5h:// |
استخدم socks5h:// لـ DNS البعيد |
| فشلت المصادقة | أوراق اعتماد خاطئة | تحقق باستخدام curl --socks5 |
| اتصالات بطيئة | خادم وكيل بعيد | اختر الوكيل الأقرب جغرافيًا |
| فشل WebSocket | خادم SOCKS5 لا يدعم UDP | استخدم خادم SOCKS5 مع دعم UDP |
الأسئلة الشائعة
متى يجب أن أستخدم SOCKS5 عبر بروكسيات HTTP؟
استخدم SOCKS5 عندما تحتاج إلى التعامل مع حركة مرور WebSocket (الشائعة في اختبارات CAPTCHA الحديثة)، أو عندما تريد تجنب تسرب رؤوس الوكيل، أو عندما يقدم موفر الوكيل SOCKS5 فقط.
هل يدعم CaptchaAI SOCKS5 كمعلمة وكيل؟
نعم. قم بتمرير proxytype=SOCKS5 وproxy=socks5:host:port:user:pass في طلب الإرسال الخاص بك.
هل SOCKS5 أسرع من بروكسيات HTTP؟
يحتوي SOCKS5 على حمل أقل قليلاً (لا يوجد تحليل HTTP) ولكن الفرق ضئيل بالنسبة لسير عمل CAPTCHA. الميزة الرئيسية هي التخفي.
أدلة ذات صلة
استخدم وكلاء SOCKS5 مع CaptchaAI لحل اختبار CAPTCHA بطريقة متسقة — احصل على مفتاح API الخاص بك.