نحوه استفاده از پروکسیهای SOCKS5 Dataimpulse با curl در لینوکس
curl و سایر ابزارهای خط فرمان لینوکس را از طریق پروکسی مسکونی یا موبایل SOCKS5 Dataimpulse مسیریابی کنید، IP خروجی خود را تأیید کنید و یک واکشی دستهای با محدودیت نرخ اجرا کنید.
مرور کلی
این آموزش نشان میدهد چگونه ترافیک 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 مراجعه کنید. از آنجا که صورت حساب به ازای مصرف بر اساس ترافیک است، در حین تنظیم تأخیرها و تلاشهای مجدد داشبورد را تماشا کنید.