Skip to content
intermediate

نحوه استفاده از پروکسی‌های SOCKS5 Dataimpulse با curl در لینوکس

curl و سایر ابزارهای خط فرمان لینوکس را از طریق پروکسی مسکونی یا موبایل SOCKS5 Dataimpulse مسیریابی کنید، IP خروجی خود را تأیید کنید و یک واکشی دسته‌ای با محدودیت نرخ اجرا کنید.

لینوکس SOCKS5 وب اسکرپینگ حریم خصوصی/ناشناسی

مرور کلی

این آموزش نشان می‌دهد چگونه ترافیک HTTP خط فرمان را از طریق پروکسی‌های مسکونی یا موبایل Dataimpulse روی SOCKS5 در لینوکس مسیریابی کنید. شما curl را پیکربندی می‌کنید، IP خروجی را تأیید می‌کنید، یک واکشی دسته‌ای کوچک با محدودیت نرخ اجرا می‌کنید و همان تنظیمات را برای سایر ابزارهای خط فرمان اعمال می‌کنید.

Dataimpulse IPهای مسکونی و موبایل را از طریق HTTP و SOCKS5 با صورت حساب پرداخت به ازای مصرف ارائه می‌دهد، که آن را برای جمع‌آوری داده‌های اسکریپتی و حجم بالا مناسب می‌سازد. تکنیک‌های زیر در سطح پروتکل و مستقل از فروشنده هستند: هر نقطه پایانی SOCKS5 به همین شکل رفتار می‌کند، و Dataimpulse صرفاً ارائه‌دهنده‌ای است که برای مثال‌ها استفاده شده است.

پیش‌نیازها

  • یک میزبان لینوکس (ایستگاه کاری، ماشین مجازی یا کانتینر) با پوسته POSIX
  • curl ساخته شده با پشتیبانی SOCKS5، به همراه jq برای تجزیه پاسخ‌های JSON
  • یک حساب Dataimpulse با اعتبار شارژ شده
  • میزبان، پورت، نام کاربری و رمز عبور نقطه پایانی SOCKS5 از داشبورد Dataimpulse

قبل از شروع

  • فقط داده‌هایی را جمع‌آوری کنید که مجاز به جمع‌آوری آن‌ها هستید. به شرایط خدمات هر سایت هدف و robots.txt احترام بگذارید و قوانین مربوط به خود را رعایت کنید.
  • صورت حساب پرداخت به ازای مصرف بر اساس ترافیک محاسبه می‌شود، بنابراین تلاش‌های مجدد، پاسخ‌های بزرگ و دانلودهای رسانه همه اعتبار مصرف می‌کنند. در حین آزمایش، نمای مصرف داشبورد را بررسی کنید.

نحوه کار نقطه پایانی SOCKS5

SOCKS5 یک پروتکل پروکسی در سطح انتقال است، بنابراین ترافیک HTTPS را بدون خاتمه دادن به TLS خود حمل می‌کند. کلاینت شما یک اتصال TCP را از طریق پروکسی مذاکره می‌کند و گواهی هدف هنوز به صورت سرتاسری تأیید می‌شود.

جزئیات محل یافتن نکات
میزبان نقطه پایانی داشبورد Dataimpulse دروازه‌ای که کلاینت شما به آن متصل می‌شود
پورت SOCKS5 داشبورد Dataimpulse معمولاً جدا از پورت HTTP ذکر می‌شود
نام کاربری داشبورد Dataimpulse ممکن است گزینه‌های مسیریابی یا نشست را رمزگذاری کند
رمز عبور داشبورد Dataimpulse آن را به عنوان یک راز در نظر بگیرید؛ هرگز آن را در کنترل نسخه ثبت نکنید

دو شکل آدرس در عمل مهم هستند:

  • socks5:// — دستگاه شما نام میزبان مقصد را resolve می‌کند، سپس IP را به پروکسی می‌فرستد.
  • socks5h:// — پروکسی نام میزبان را resolve می‌کند. این کار از نشت DNS محلی جلوگیری می‌کند و گزینه پیش‌فرض بهتر برای کار جمع‌آوری است.

مراحل

۱. نصب ابزارهای خط فرمان

sudo apt update
sudo apt install -y curl jq

در فدورا یا RHEL، از sudo dnf install -y curl jq استفاده کنید. در Arch، از sudo pacman -S curl jq استفاده کنید.

۲. تأیید پشتیبانی SOCKS5 در curl

curl --help all | grep -i socks

شما باید گزینه‌هایی مانند --socks5، --socks5-hostname، --socks4 و --socks4a را ببینید. اگر چیزی فهرست نشده است، نسخه curl شما فاقد پشتیبانی SOCKS است و قبل از ادامه نیاز به ارتقا دارد.

۳. ذخیره اعتبارنامه‌ها در یک فایل محدود

فایل را با مجوزهای فقط مالک ایجاد کنید، سپس مقادیر را از داشبورد Dataimpulse خود پر کنید.

install -m 600 /dev/null "$HOME/.dataimpulse.env"
cat > "$HOME/.dataimpulse.env" <<'EOF'
export PROXY_HOST="your-endpoint-host"
export PROXY_PORT="your-socks5-port"
export PROXY_USER="your-username"
export PROXY_PASS="your-password"
EOF
chmod 600 "$HOME/.dataimpulse.env"

جداکننده heredoc نقل شده از گسترش هر چیزی توسط پوسته جلوگیری می‌کند، بنابراین فایل به صورت تحت اللفظی نوشته می‌شود. این فایل را از هر مخزنی که همگام‌سازی یا منتشر می‌کنید دور نگه دارید.

۴. بارگذاری متغیرها در پوسته شما

source "$HOME/.dataimpulse.env"
printf 'Proxy endpoint: %s:%s\n' "$PROXY_HOST" "$PROXY_PORT"

بارگذاری از یک فایل رمز عبور را از خط فرمان شما دور نگه می‌دارد، جایی که در غیر این صورت در تاریخچه پوسته ثبت شده و در فهرست فرآیندها قابل مشاهده است.

۵. ارسال اولین درخواست خود از طریق پروکسی

curl --socks5-hostname "${PROXY_HOST}:${PROXY_PORT}" \
     --proxy-user "${PROXY_USER}:${PROXY_PASS}" \
     --silent --show-error --max-time 30 \
     "https://api.ipify.org?format=json"

فرم تک URL معادل است و قالب‌بندی آن در اسکریپت‌ها آسان‌تر است:

curl --proxy "socks5h://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}" \
     --silent --show-error --max-time 30 \
     "https://api.ipify.org?format=json"

پاسخ JSON حاوی یک آدرس IP که با آدرس خودتان متفاوت است تأیید می‌کند که درخواست از طریق پروکسی ارسال شده است.

۶. تأیید چرخش و موقعیت خروجی

for i in 1 2 3; do
  curl --proxy "socks5h://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}" \
       --silent --show-error --max-time 30 \
       "https://api.ipify.org?format=json" | jq -r '.ip'
done

آدرس‌های متفاوت در هر درخواست به این معنی است که نقطه پایانی بین اتصالات می‌چرخد. اگر هر بار همان آدرس را می‌بینید، تنظیمات نشست را در داشبورد Dataimpulse و مستندات آن برای نحوه انتخاب خروجی ثابت در مقابل چرخشی برای حساب خود بررسی کنید.

۷. واکشی یک صفحه واقعی و ثبت کد پاسخ

curl --proxy "socks5h://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}" \
     --silent --show-error --location --max-time 60 \
     --output page.html \
     --write-out 'status=%{http_code} bytes=%{size_download}\n' \
     "https://example.com/"

--write-out کد وضعیت و تعداد بایت را بدون درخواست دوم گزارش می‌دهد، که به شما کمک می‌کند هزینه ترافیک را با نتایج واقعی مرتبط کنید.

۸. اجرای واکشی دسته‌ای با محدودیت نرخ

یک اسکریپت به نام fetch-through-proxy.sh ایجاد کنید:

#!/usr/bin/env bash
set -euo pipefail

source "$HOME/.dataimpulse.env"
PROXY="socks5h://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}"

mkdir -p out
: > out/status.log

while IFS= read -r url; do
  [ -z "$url" ] && continue
  name="$(printf '%s' "$url" | sha256sum | cut -c1-12)"
  code="$(curl --proxy "$PROXY" \
               --silent --show-error \
               --location --max-time 60 \
               --retry 2 --retry-delay 5 \
               --output "out/${name}.html" \
               --write-out '%{http_code}' \
               "$url")" || code="error"
  printf '%s\t%s\n' "$code" "$url" | tee -a out/status.log
  sleep 2
done < targets.txt

آن را قابل اجرا کنید و یک لیست هدف به آن بدهید:

chmod +x fetch-through-proxy.sh
printf '%s\n' "https://example.com/" "https://example.org/" > targets.txt
./fetch-through-proxy.sh

یک خط خروجی به ازای هر URL در out/status.log نوشته می‌شود، و تأخیر بین درخواست‌ها شما را در محدوده نرخ درخواست قابل قبول هدف نگه می‌دارد. sleep را طوری تنظیم کنید که با انتظارات هر سایت مطابقت داشته باشد، نه اینکه آن را حذف کنید.

۹. اعمال پروکسی به سایر ابزارهای خط فرمان

  • متغیرهای محیطی. export ALL_PROXY="socks5h://user:pass@host:port" توسط curl و برخی کتابخانه‌ها رعایت می‌شود، اما نه هر برنامه‌ای. برخی ابزارها به جای آن HTTPS_PROXY و HTTP_PROXY را انتظار دارند، بنابراین در صورت نیاز آن‌ها را نیز تنظیم کنید، و به یاد داشته باشید که مقادیر برای هر دستور در آن نشست پوسته اعمال می‌شوند.
  • proxychains-ng. این wrapper برنامه‌های TCP دلخواه را از طریق یک پروکسی SOCKS مجبور می‌کند. یک ورودی socks5 host port به /etc/proxychains.conf یا ~/.proxychains/proxychains.conf اضافه کنید، سپس دستورات را با proxychains4 پیشوند کنید. نحو احراز هویت بین نسخه‌ها متفاوت است، بنابراین قبل از اتکا به آن برای نقاط پایانی دارای اعتبارنامه، فرمت پیکربندی نسخه خود را تأیید کنید.
  • ابزارهای بدون پشتیبانی SOCKS. برای مثال، GNU wget به SOCKS صحبت نمی‌کند. چنین ابزارهایی را از طریق proxychains-ng اجرا کنید، یا آن بار کاری را به یک نقطه پایانی پروکسی HTTP تغییر دهید، زیرا Dataimpulse هم HTTP و هم SOCKS5 را پشتیبانی می‌کند.

۱۰. تمیز کردن پس از پایان اجرا

unset PROXY_PASS PROXY_USER
  • اگر دیگر به ~/.dataimpulse.env نیاز ندارید، آن را حذف کنید، یا برای نشست بعدی آن را در حالت 600 رها کنید.
  • هر دستوری را که به طور تصادفی حاوی رمز عبور به صورت متن ساده بوده است از تاریخچه پوسته خود حذف کنید.

عیب‌یابی

نشانه علت احتمالی راه‌حل
407 Proxy Authentication Required نام کاربری یا رمز عبور اشتباه، یا استفاده از پورت HTTP با پرچم‌های SOCKS5 اعتبارنامه‌ها را از داشبورد دوباره کپی کنید و پورت SOCKS5 را تأیید کنید
Unsupported proxy scheme یا گزینه ناشناخته curl بدون SOCKS5 ساخته شده است curl را ارتقا دهید یا نسخه‌ای با پشتیبانی SOCKS نصب کنید (مرحله ۲)
شکست در resolve نام برای برخی میزبان‌ها resolve DNS محلی از طریق socks5:// به --socks5-hostname یا socks5h:// تغییر دهید
اتصال رد شد یا وقفه‌های مکرر میزبان یا پورت اشتباه، فایروال، یا مسدودسازی شبکه نقطه پایانی را دوباره بررسی کنید، در شبکه دیگری تست کنید، --connect-timeout 15 را اضافه کنید
wget پروکسی را نادیده می‌گیرد GNU wget پشتیبانی SOCKS ندارد از curl، proxychains-ng یا یک نقطه پایانی پروکسی HTTP استفاده کنید
IP خروجی یکسان در هر درخواست یک نشست ثابت یا چسبنده برای حساب پیکربندی شده است تنظیمات نشست را در داشبورد Dataimpulse بررسی کنید
پاسخ‌های 403، 429 یا CAPTCHA محدودیت نرخ یا مسدودسازی از سمت هدف سرعت را کاهش دهید، درخواست‌ها را با فاصله ارسال کنید، همزمانی را کم کنید، شرایط سایت را بررسی کنید
خطاهای TLS یا گواهی مشکلات مخزن CA محلی یا ساعت سیستم مخزن اعتماد یا ساعت را تعمیر کنید؛ تأیید را با -k غیرفعال نکنید
افزایش هزینه سریع‌تر از حد انتظار تلاش‌های مجدد، بارهای بزرگ، یا دانلودهای رسانه --max-time را کاهش دهید، از تلاش مجدد برای خطاهای دائمی خودداری کنید، داشبورد را رصد کنید

خلاصه

شما یک پوسته لینوکس را پیکربندی کردید تا درخواست‌ها را از طریق نقطه پایانی SOCKS5 Dataimpulse ارسال کند، چرخش را با یک سرویس پژواک IP تأیید کردید، کدهای پاسخ و تعداد بایت را ثبت کردید، و یک کار دسته‌ای با محدودیت نرخ اجرا کردید. socks5h:// را ترجیح دهید تا DNS در پروکسی resolve شود، اعتبارنامه‌ها را در یک فایل با حالت 600 به جای خط فرمان نگه دارید، و زمانی که یک ابزار نمی‌تواند خودش SOCKS5 صحبت کند به proxychains-ng مراجعه کنید. از آنجا که صورت حساب به ازای مصرف بر اساس ترافیک است، در حین تنظیم تأخیرها و تلاش‌های مجدد داشبورد را تماشا کنید.