<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های پرهام ساقریچی ها</title>
        <link>https://virgool.io/feed/@p.saqarchi</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-04-15 02:55:42</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/480182/avatar/E2VFwz.jpeg?height=120&amp;width=120</url>
            <title>پرهام ساقریچی ها</title>
            <link>https://virgool.io/@p.saqarchi</link>
        </image>

                    <item>
                <title>برنامه نویسی چند نخی (Multi-Thread) در Python</title>
                <link>https://virgool.io/CodeLovers/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DA%86%D9%86%D8%AF-%D9%86%D8%AE%DB%8C-multi-thread-%D8%AF%D8%B1-python-u5d4tgvmwvjs</link>
                <description>چند نخی (Multithreading)بی مقدمه بریم سراغ اصل مطلب، همه امون تجربه اجرا کردن چندین برنامه به صورت همزمان را داشتیم پس اگر همین کار را با یکی از زبان برنامه نویسی انجام بدیم به اصطلاح از تکنیک مولتی ترد استفاده کردیم، یعنی هر نخ  وظیفه ای مشخصی داره به جای اینکه از یک نخ استفاده کنیم تا به خواسته خودمون برسیم (ممکنه خیلی زمان بر باشه) بیایم از چند نخ استفاده کنیم تا سریع تر به پایان قصه برسیم، پس برنامه نویسی چند نخی میتونه سرعت عملیات را ما زیاد میکنن (البته نه همیشه) اگر دوست دارید بیشتر بخوندید راجبش پس اینجا را کلیک کنید.اجازه بدید کمی عملیاتی تر قصه رو بررسی کنیم:اول از همه دنیا را به صورت سینگل ترد ببینیم، پس به زبان پایتون کد ساده ای مینویسم که با کتابخانه ریکوست یک فایل به شکل json دانلود کنه و ذخیره کنه مثل همچین صفحه ای (مشخصات فیلم Tenet) که یک API KEY لازم داره که من از این لینک ساختم با یک سایتی که به من اجازه میده یک ایمیل موقت برای خودم بسازم.خوب من این API KEY که ساختم تا ۱۰۰۰ تا ریکوست رایگانه اگر یک وقت لینک بالا از کار افتاد به همین علت بوده که شما خودتون به سادگی میتونید API KEY خودتونو بسازید.# api_key = 4719d347
import requests
import uuid

url_list = [&#039;http://www.omdbapi.com/?i=tt6723592&amp;apikey=4719d347&#039;, &#039;http://www.omdbapi.com/?i=tt2382320&amp;apikey=4719d347&#039;]

for url in url_list:
    html = requests.get(url, stream=True)
    file_name = uuid.uuid1()
    open(f&#039;{file_name}.json&#039;, &#039;wb&#039;).write(html.content)فرض کنید تعداد فیلم های که میخواهید اطلاعات اشونو داشته باشید از ۱ میلیون بیشتره اونوقت چی کار میکنید؟  حالا نوبت  استفاده از قدرت مولتی ترد  پایتونه که من با قطعه کدی که در ادامه براتون نوشتم در مدت زمان ۲۲ دقیقه ۴۹،۹۸۰ فایل به صورت json ذخیره کردم که حجم داده ها ۱ گیگابایت بود.import requests
import uuid
from concurrent.futures import ThreadPoolExecutor, as_completed

url_list = [&#039;url1&#039;, &#039;url2&#039;] 

def download_file&#40;url, file_name&#41;:
    try:
        html = requests.get(url, stream=True)
        open(f&#039;{file_name}.json&#039;, &#039;wb&#039;).write(html.content)
        return html.status_code
    except requests.exceptions.RequestException as e:
       return e

def runner():
    threads= []
    with ThreadPoolExecutor(max_workers=20) as executor:
        for url in url_list:
            file_name = uuid.uuid1()
            threads.append(executor.submit(download_file, url, file_name))
           
        for task in as_completed(threads):
            print(task.result()) 
      
runner()</description>
                <category>پرهام ساقریچی ها</category>
                <author>پرهام ساقریچی ها</author>
                <pubDate>Sat, 26 Dec 2020 18:31:32 +0330</pubDate>
            </item>
                    <item>
                <title>طلاقی Docker، Tor، Python</title>
                <link>https://virgool.io/coderlife/%D8%B7%D9%84%D8%A7%D9%82%DB%8C-docker-tor-python-ozwlzpchruhy</link>
                <description>شبکه تور معروف به شبکه پیازیاگر اینجا رو می‌خونین حتما با داکر و پایتون آشنا هستین، اما اگر نیستید بهتره همینجا این آموزش بزارید کنار و کمی به عقب تر برگردید و شروع کنید به یادگیری پایتون و داکر. برای آشنایی مقدماتی با شبکه Tor هم پیشنهاد من به شما استفاده از نوشته های سایت ویرگول است.در ابتدا باید بگم که شبکه Tor در واقع یک پیاده سازی برای OR (شبکه پیازی) است،  OR که یک تکنیک ارتباطی برای پنهان شدن و ناشناس بودن در یک شبکه است. امنیت در شبکه به این صورت تامین می‌شود که سعی بر این است که فعالیت شما و ارتباط شما سری و مخفی بماند. علت نام گذاری این نوع شبکه به شبکه پیازی این بوده که عملکرد این شبکه مانند پوست کندن پیاز است و پیام شما در مرکز پیاز مخفی میشه و شما میتونید تا حد کافی از این اطمینان پیدا کنید که ردپای شما مخفی میمومنه یا اینکه اگر IP شما بلاک شد، سریعا IP خودتونو عوض کنید.هدف اصلی از این عریضه, آموزش استفاده از شبکه Tor در پایتون (البته اگر استقبال بشه به زبان نود) هستش که در اخر هم از داکر استفاده میکنیم تا این امکان را به شما برنامه نویسان عزیز بدیم که به راحتی بتونید این پروژه را با تمام ماژول ها و وابستگی هاش ایزوله کنید و در سیستم عامل های مختلف اجرا کنید یا اینکه چنتا replicas بسازیم و در هر request با یک IP متفاوت به استخراج دیتا ها بپردازید. قدم اول: نصب و بررسی وضعیت Tor (تمامی این دستورات در لینکوس ۱۸.۰۴ تست شده است)root@psaqarchi:~# apt update
root@psaqarchi:/# apt install -y tor
root@psaqarchi:/# service tor start
root@psaqarchi:~# service tor statusاول از همه به اپدیت کردن ریپو هامون میپردازیم، در ادامه پکیچ Tor را نصب میکنیم، برای شروع باید Tor رو در وضعیت start قرار بدیم، در اخر هم برای اینکه ببینیم کجای کار هستیم میتونیم از سویچ status استفاده کنیم، ناگفته نماند که سویچ restart و stop هم وجود داره که بترتیب بیانگر ریست کردن شبکه تور و توقف شبکه میباشد. قدم دوم: نصب نت کت یا همون چاقوی سویسی هکرهانت کت معروف به چاقویی سویسیخوب بزارید به ساده ترین شکل باهم صحبت کنیم، ابزار نت کت ابزاریه که قادر به خواندن و نوشتن در پورت های UDP و TCP هستش, حالا چرا از nc (همون نت کت) در این آموزش استفاده میکنیم؟ به این علت که میخواهیم احراز هویت در شبکه تور را باهم بررسی کنیم.بیاید برای شروع نت کت و نصب کنیم و شرایط اولیه را بررسی کنیم:root@psaqarchi:/# apt install -y netcat
root@psaqarchi:/# echo -e &#039;AUTHENTICATE&#039; | nc 127.0.0.1 9051
&gt;&gt; (UNKNOWN) [127.0.0.1] 9051 (?) : Connection refused قدم سوم: کانفیگ فایل torrcهمینطوری که میبینیم ارتباط موفقیت آمیز نبوده و برای برقراری ارتباط باید پورت ۹۰۵۱ را در فایل torrc تعریف کنیم، درنتیجه از سویچ stop استفاده میکنیم تا دسترسی تور را قطع کنیم، اگر مشکلی در kill کردن بود از دستوارت لینوکسی بهره میبریم، به هر حال نوبت به تعریف  پورت ۹۰۵۱ و یک گذرواژه که به صورت  یک کد هش شده است در فایل torrc میرسهroot@psaqarchi:/# service tor stop
 &gt;&gt; Stopping tor daemon...          [fail]
root@psaqarchi:/#  kill $(pidof tor)

root@psaqarchi:/# service tor status
 &gt;&gt; tor is not running

root@psaqarchi:/# echo &amp;quotControlPort 9051&amp;quot &gt;&gt; /etc/tor/torrc
root@psaqarchi:/# echo HashedControlPassword $(tor --hash-password &amp;quotVIRGOOL&amp;quot | tail -n 1) &gt;&gt; /etc/tor/torrcبرای بررسی اینکه کارمون تا اینجا درست بوده یا نه؟ دو خط پایانی فایل torrc را بررسی میکینم، همچنین از ابزار نت کت استفاده میکنیم تا ببینیم با رمز عبور VIRGOOL که در بالا هش کردیم اجازه استفاده از تور را داریم یا نه ؟root@75f6721089f2:/# tail -n 2 /etc/tor/torrc
 &gt;&gt; 
     ControlPort 9051
     HashedControlPassword 
    16:ED2893D8EC97801C60DF4A72249CBCCD8B97B3B01A15C923DC49A0E500

root@psaqarchi:/# service tor start 
root@psaqarchi:/# echo -e &#039;AUTHENTICATE &amp;quotVIRGOOL&amp;quot&#039; | nc 127.0.0.1 9051 قدم چهارم: تعویض IP با Torroot@psaqarchi:/# apt install -y curl
root@psaqarchi:/# curl http://icanhazip.com/
&gt;&gt; 2.181.11.110
root@psaqarchi:/# torify curl http://icanhazip.com/
&gt;&gt; 18.27.197.252با نوشتن اولین خط، پکیچ curl نصب میشه، curl یک ابزار خط فرمان است که به شما اجازه میده تا داده ها را از سیستم خودتون به یک سرور انتقال بدید. دلیل استفاده از این دستور برای پیدا کردن IP سیستم خودتونه، پس یکبار بدون استفاده از تور IP سیستم را بدست میاریم و بار دوم با استفاده از تور که که در اینجا torify دستوری است که قبل از curl باید نوشته بشه تا به سیستم بگیم ترافیک عبوری را از شبکه تور باشه.همینطور برای تغییر IP سیستم میتونیم بدین صورت عمل کنیمroot@psaqarchi:/# echo -e &#039;AUTHENTICATE &amp;quotVIRGOOL&amp;quot\r\nsignal NEWNYM\r\nQUIT&#039; | nc 127.0.0.1 9051
&gt;&gt;
  250 OK
 ‌ 250 OK
 ‌ 250 closing connection
root@psaqarchi:/# torify curl http://icanhazip.com/
&gt;&gt;‌ 185.220.101.6همچنین اگر مشکل IP در آپدیت کردن ریپو های خودتون دارید یا pull کردن ایمیج های داکری میتونیم بدین صورت عمل کنیم (البته پیشنهاد من استفاده از شکن است).root@psaqarchi:/# torify apt update
root@psaqarchi:/# torify apt upgrade قدم پنجم: ورود پایتون root@psaqarchi:/# apt install -y python3 python3-pip
root@psaqarchi:/# pip3 install stemپایتون و پکیچ منیجر پایپ و نصب میکنیم، پکیچ stem که یک کنترلر پایتونی برای شبکه تور است را هم نصب کرده و کد زیر را اجرا میکنیم.from stem import Signal
from stem.control import Controller

if __name__ == &#039;__main__&#039;:
    with Controller.from_port(port=9051) as controller:
        controller.authenticate()
        controller.signal(Signal.NEWNYM)پس از اجرای قطعه کد بالا، IP سیستم تغییر خواهد کرد.root@psaqarchi:/# torify curl http://icanhazip.com/ 
&gt;&gt;‌ 185.220.101.6
root@psaqarchi:/# python3 changeip.py
root@psaqarchi:/# torify curl http://icanhazip.com/  
&gt;&gt;‌ 198.98.62.120 قدم ششم: نصب Privoxyتور به خودی خود یک http proxy نیست، بنابرین برای دسترسی به تور از پریوکسی به عنوان http proxy استفاده میکنم، در ابتدا باید پکیچ  پریوکسی و نصب کنیم و در تنظیمات مربوط به آن را انجام بدیم.root@psaqarchi:/# apt install -y privoxy
root@psaqarchi:/# service privoxy status
 &gt;&gt;‌  privoxy is not runningبعد از نصب پریوکسی، از سویچ status استفاده میکنیم تا وضعیت پریوکسی را بررسی کنیم،root@psaqarchi:/# echo &amp;quotforward-socks5t / 127.0.0.1:9050 .&amp;quot &gt;&gt; /etc/privoxy/config
root@psaqarchi:/# service privoxy start
 &gt;&gt;‌  Starting filtering proxy server privoxy          [ fail ]پریوکسی قادر به فعالیت نیست بنابرین لاگ سیستم را بررسی میکنیم تا متوجه مشکل سیستم بشیم،root@psaqarchi:/# cat /var/log/privoxy/logfile
&gt;&gt;‌   2020-12-19 15:36:13.278 7f9c2c0e30c0 Fatal error: can&#039;t bind to ::1:8118: No such file or directoryاگر همچین پیغامی دریافت کردید به این معناست پریوکسی نمیتونه از ای پی ورژن ۶ استفاده کنه بنابرین باید تنظیمات مربوط به این مود را غیر فعال کنیم،root@psaqarchi:/# sed -i &amp;quots/.*\[::1\]:8118/# &amp;/&amp;quot /etc/privoxy/configنتیجه تغییرات انجام شده را به این شکل چک کنید،root@psaqarchi:/# service privoxy start
 &gt;&gt;‌  Starting filtering proxy server privoxy          [ OK ]

root@psaqarchi:/# torify curl http://icanhazip.com/
&gt;&gt;‌  128.31.0.13

root@psaqarchi:/# curl -x 127.0.0.1:8118 http://icanhazip.com/
&gt;&gt;‌  176.10.99.200قدم هفتم: استفاده از کتابخانه requests برای بررسی صحت عملکرد تغییر IP با Torroot@psaqarchi:/# pip3 install requestsimport requests

from stem import Signal
from stem.control import Controller

if __name__ == &#039;__main__&#039;:
    response = requests.get(&#039;http://icanhazip.com/&#039;, proxies={&#039;http&#039;: &#039;127.0.0.1:8118&#039;})
    print(&amp;quotBefore: &amp;quot, response.text.strip())

    with Controller.from_port(port=9051) as controller:
        controller.authenticate(password=&#039;VIRGOOL&#039;)
        controller.signal(Signal.NEWNYM)

    response = requests.get(&#039;http://icanhazip.com/&#039;, proxies={&#039;http&#039;: &#039;127.0.0.1:8118&#039;})
    print(&amp;quotAfter: &amp;quot, response.text.strip())قدم هفتم: استفاده داکر# DockerFile
# pull official base image
FROM ubuntu:18.04

# File Author / Maintainer
MAINTAINER Parham Sagharichiha

ARG TOR_PASSWORD
# install dependencies
RUN apt-get update
RUN apt-get install -y tor
RUN apt-get install -y netcat
RUN apt-get install -y nano
RUN apt-get install -y curl
RUN service tor stop
#RUN kill -9 $(pidof tor)
RUN echo &amp;quotControlPort 9051&amp;quot &gt;&gt; /etc/tor/torrc
RUN echo HashedControlPassword $(tor --hash-password &amp;quotVIRGOO&amp;quot | tail -n 1) &gt;&gt; /etc/tor/torrc
RUN service tor start
RUN apt-get install -y privoxy
RUN echo &amp;quotforward-socks5t / 127.0.0.1:9050 .&amp;quot &gt;&gt; /etc/privoxy/config
RUN sed -i &amp;quots/.*\[::1\]:8118/# &amp;/&amp;quot /etc/privoxy/config
# RUN service privoxy start
RUN apt-get install -y python3 python3-pip

# set work directory
RUN mkdir /workspace
WORKDIR /workspace

# copy project
COPY /src/ /workspace/
COPY /requirements.txt /workspace/

RUN pip3 install -r requirements.txt

# Expose ports
EXPOSE 9051 8081 9050 8000

#CMD
ENTRYPOINT service tor restart &amp;&amp; /bin/bash
ENTRYPOINT service privoxy restart &amp;&amp; /bin/bash

CMD [&amp;quot/bin/bash&amp;quot]#requirements.txt
stem
requests</description>
                <category>پرهام ساقریچی ها</category>
                <author>پرهام ساقریچی ها</author>
                <pubDate>Sat, 19 Dec 2020 17:36:05 +0330</pubDate>
            </item>
            </channel>
</rss>