Squid HTTP Proxy برای CentOS در کمتر از 5 دقیقه

مقدمه

هنگامی که از رایانه خانگی ما برای مرور اینترنت استفاده می کنیم، می توانیم بدون محدودیت دسترسی داشته باشیم، به این معنی که ما می توانیم از طریق هر پورت از اینترنت استفاده کنیم: HTTP (80)، HTTPS (443)، SSH (22 ) و دیگران.
نکته این است که هنگام مرور سایت اینترنتی، آدرس IP ما به وضوح نشان می دهد که وب سرور logs.Now، اگر چه IP خارجی ما معمولا به صورت پویا از ارائه دهنده ما اختصاص داده، اطلاعات خاصی وجود دارد که می تواند برای مثال، کشور مبدأ از آن بدست می آید.
اگر به دلایلی بخواهیم آن را نامعلوم کنیم، می توانیم از یک راهکار استفاده کنیم: سرور پروکسی Squid. سرور پروکسی Squid یک نرم افزار لینوکس است که در تمام توزیع های عمده لینوکس کار می کند و از دیگر موارد استفاده می شود که برای شناسایی ترافیک وب مورد استفاده قرار می گیرد. درخواست کاربر برای یک صفحه وب طول می کشد و آن را از طرف کاربر گرفته، مانند این تصویر [19659003] بنابراین برای مثال، سرور پروکسی Squid در فرانسه واقع شده است و ما در برزیل واقع شده ایم و از طریق وب سایت Squid proxy آدرس IP پروکسی Squid را در فرانسه نشان می دهیم.

PREREQUISITES

شما نیاز به سرور خصوصی مجازی (VPS) در ابر، با دسترسی SSH به آن به عنوان یک کاربر ریشه. من با استفاده از CentOS 6.9 x64 لینوکس با استفاده از سرور VPS DigitalOcean دارم.

شما می توانید از هر مشتری SSH که دوست دارید استفاده کنید، من ترجیح می دهم SSH پوسته امن، در حالی که اکثر مردم امروز از Putty استفاده می کنند.

نصب

نصب Squid واقعا ساده با yum ، و هیچ مخزن اضافی نیاز به پیکربندی برای آن است. نگاهی به اطلاعات با yum info squid این نسخه (نسخه فعلی 3.1.2) را نشان می دهد و برخی از اطلاعات مربوط به ماهی مرکب را نشان می دهد. نصب شده توسط:

[[email protected] ~] # yum install squid

نصب شده:

squid.x86_64 7: 3.1.23-24.el6

این سرویس به نام سرویس ماهی مرکب و با شروع:

[[email protected] ~] # سرویس ماهی مرکب شروع

شروع ماهی مرکب: [ OK ]

برای اطمینان از این که در زمان بوت شدن خیره شده است، ما باید آن را فعال کنیم تا فعال شود: [19659013] ~] # chkconfig squid در

CONFIGURATION CLIENT

برای استفاده از سرور Squid، ما باید مرورگر وب خود را به صراحت از آن استفاده کنیم. هنگامی که شما موزیلا را پیکربندی میکنید، فقط برای فایرفاکس خاص است، در حالی که هر یک از مرورگرهای Chrome، Opera و IE پیکربندی سیستم را برای یک پروکسی پیکربندی میکند. من به شما چگونگی پیکربندی فایرفاکس را نشان خواهم داد. شما باید گزینه ها-> پروکسی شبکه، تنظیمات را انتخاب کنید و فیلدهای مناسب را با آدرس IP سرور خود و پورت 3128 پر کنید.

CONFIGURATION SERVER

اگر شما سعی در وارد کردن google.com کنید در مرورگر شما، شما یک سرور پروکسی از اتصالات خطا است. به این دلیل که Squid از همه اتصالات به صورت پیش فرض خودداری می کند، در غیر این صورت هر کسی که آدرس IP شما را می داند قادر به اتصال به آن می شود .

ما می توانیم تنها برخی از آدرس های IP را قادر به استفاده از Squid، اما از آنجا که ADSL IP ها معمولا هر روز تغییر می کنند، ما نیاز به یک راه دیگر. این می تواند اعتبار نام کاربری / رمز عبور ساده باشد. برای انجام این کار، ما ابتدا باید فایل پیکربندی Squid، /etc/squid/squid.conf را ویرایش کنیم و این خطوط را در ابتدای فایل اضافه کنیم

[[email protected] ~] # vi /etc/squid/squid.conf[19659023] auth_param basic program / usr / lib64 / squid / ncsa_auth / etc / squid / passwd

auth_param basic realm proxy

acl authentication proxy_auth REQUIRED

http_access authentication

در سیستم شما ncsa_auth ممکن است در یک مکان قرار نگرفته باشد، ممکن است آن را با فرمان زیر بهروز کنید: فایل پیکربندی به این ترتیب:

[[email protected] ~] # find / -name "* ncsa_auth *"

فایل passwd که ما به زودی تولید خواهیم کرد، در / etc / squid /، قرار داده می شود، شما می توانید آن را به هر آنچه که می خواهید بفرستید و آن را هر جا قرار دهید (ارائه شده است squid دسترسی به آن)

USERNAME AND PASSWORD GENERATION

اکنون برای پر کردن یک فایل با نام کاربری (برای مثال mysquid ) و رمز عبور (hash)

(به عنوان مثال، Tutankamon )، ما باید htpasswd ابزار، بخشی از httpd-tools بسته باشد. ما می توانیم آن را نصب کنیم:

[[email protected] ~] # yum install -y httpd-tools

دستور زیر را اجرا کنید:

[[email protected] ~] # htpasswd -c / etc / squid / passwd mysquid

رمز عبور جدید:

دوباره رمز جدید را تایپ کنید:

اضافه کردن گذرواژه به کاربر mysquid

ما باید سرویس Squid را دوباره راه اندازی کنیم تا تغییرات در فایل های پیکربندی مورد استفاده قرار می گیرند (ما می توانیم از reload نیز استفاده کنیم).

USING SQUID

اجازه دهید صفحه را در فایرفاکس بازنویسی کنیم، و اکنون به جای یک خطا، با استفاده از نام کاربری و رمز عبور.

نام کاربری و رمز عبور را وارد کنید و شما باید بتوانید صفحه را ببینید.

برای اطمینان از استفاده از Squid برای ردیابی شبکه، وارد کنید https: / /whatsmyip.com/

در عوض IP ADSL شما، سرور سرور Squid شما نمایش داده خواهد شد.

گشت و گذار خوشحال

یک پروکسی سرور چیست؟

یک پروکسی سرور چیست؟ و آیا شما را امن می کند؟

در یک سطح بسیار اساسی، اینترنت با انتقال داده ها کار می کند. اطلاعات بین فرستنده ها و گیرنده ها مبادله می شود. برای فعال کردن یک رایانه برای شناسایی رایانه دیگری که نیاز به تبادل اطلاعات دارد، هر کامپیوتر دارای پروتکل اینترنت یا آدرس IP است؛ یک سری اعداد است که مخصوص آن کامپیوتر است.

یک سرور پروکسی نیز می تواند یک "دروازه کاربرد سطح" نامیده شود و نشانی اینترنتی پروتکل اینترنت را در شبکه آن پنهان می کند. به عبارت دیگر، یک سرور پروکسی به عنوان یک دروازه بین یک شبکه محلی و اینترنت به عنوان یک کل عمل می کند. در یک سطح بسیار اساسی، این کار را با متوقف کردن اتصالات بین فرستنده و گیرنده انجام می دهد. داده های ورودی از طریق یک پورت وارد می شوند و به بقیه شبکه از طریق پورت دیگر منتقل می شود که به وسیله یک سرور پروکسی امکان اتصال به اینترنت را به کامپیوتر فراهم می کند تا ارتباط غیر مستقیم برقرار شود.

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

پس چرا از طریق یک پروکسی سرور یک اتصال غیرمستقیم استفاده میکنید؟

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

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

سرورهای پروکسی، برعکس، می توانند برای دور زدن فیلترهای محتوا استفاده شوند. شاید رایج ترین مثال استفاده از سرورهای پروکسی جغرافیایی است که شایع ترین روش دور زدن فیلترهای سانسور دولتی است.

سرور پروکسی ذخیره سازی می تواند برای بهبود عملکرد کامپیوترها در شبکه با صرفه جویی در درخواست های قبلی ساخته شده توسط کامپیوتر یا سایر کامپیوترهای موجود در شبکه

مورد استفاده قرار گیرد که نیاز به شبکه به طور کلی برای دریافت را کاهش می دهد اطلاعات از اینترنت

ناشناس بودن در اینترنت با پنهان کردن آدرس IP شما.

هر زمان که از اینترنت استفاده میکنید، داده های خود را می توانید توسط بسیاری از سازمان های مختلف مشاهده و ضبط کنید. به سادگی بازدید از یک وب سایت می تواند باعث شود اطلاعات از جمله جزئیات مربوط به دستگاه مورد استفاده برای دسترسی به اینترنت و مکان فیزیکی آن و به همین ترتیب محل فیزیکی کاربر دستگاه ارسال شود. کوکی ها می توانند منتقل شوند که می تواند استفاده از اینترنت را ردیابی کند، از جمله اینکه کدام وب سایت بازدید می شود. پلاگین نرم افزاری بر روی مرورگر اینترنتی خود، بدنام است برای انتقال اطلاعات بیشتر در مورد کاربران از ضروری است.

دلایل متعددی وجود دارد که نمی توان اطلاعاتی مانند این را ارائه کرد و بنابراین برای پنهان کردن آدرس IP شما. تمایل به ناشناس بودن در وب لزوما به این معنی نیست که چیزی غیر قانونی وجود دارد. می تواند دلایل کاملا قانونی برای تمایل به ناشناس باشد.
راه حل این کار این است که از یک سرور پروکسی استفاده کنید. انواع مختلفی برای انتخاب وجود دارد و همه آنها متفاوت هستند. پس گزینه های مورد نظر برای مرور اینترنت ناشناس؟
پروکسی وب

ساده ترین راه برای مرور اینترنت ناشناس است با استفاده از یک پروکسی وب. سایت های پروکسی وب به سادگی سایت هایی هستند که به صورت معمول دسترسی پیدا می کنند و شما می توانید از این سایت ها برای ورود به URL وب سایت که مایل به بازدید ناشناس از طریق وب سایت پروکسی هستید استفاده کنید. سادگی و سهولت استفاده از این سایت ها با نزولی همراه است؛ سرعت دسترسی به اینترنت از طریق این سایت ها بسیار کند است. سایت های رایگان معمولا به وسیله خدمات تبلیغاتی پرداخت می شود که می تواند تحریک کننده باشد. برای مقابله با این، برخی از خدمات پرداخت شده را ارائه می دهند که می تواند سرعت مرور را از طریق پروکسی وب افزایش دهد و آگهی ها را حذف کند.

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

سرور پروکسی دستی

اینها به شیوه ای مشابه وب سایت های پروکسی وب کار میکنند، اما رابط کاربری وب را ندارند. در عوض، آنها توسط کاربر به طور دستی تنظیم می کنند که مرورگر خود برای اتصال به آدرس URL پروکسی سرور ها. لیست پروکسی سرورها را می توان در اینترنت یافت. همانطور که با سایت های پروکسی وب بالا، داده های حساس نباید ارائه شوند، زیرا مجرمان ممکن است سرورهای پروکسی را امیدوار به سرقت اطلاعات حساس کنند.

دستیابی به یک پروکسی سرور تغییر نسبتا ساده است. هنگامی که در گزینه های منوی مرورگر خود قرار می گیرد، گزینه ای برای تغییر تنظیمات شبکه وجود دارد و آدرس IP

پروکسی سرور و شماره پورت را وارد کنید. برخی از مرورگرها همچنین ابزار چک کردن پروکسی را برای اطمینان از کارکرد تنظیمات ارائه می دهند.

شبکه های خصوصی مجازی یا VPN ها.

شبکه های مجازی خصوصی از نظر فنی سرورهای پروکسی نیستند. یک شبکه خصوصی مجازی معمولا نرم افزاری است که بر روی رایانه کاربر بارگیری می شود و به طور موثر کامپیوتر کاربر را بر روی یک شبکه خصوصی وارد می کند بدون آنکه از نظر جسمی در آن شبکه موجود باشد. خصوصی شبکه های مجازی در کسب و کار هنگامی که کارکنان دور از دفتر کار می کنند و مایل به ورود به شبکه خصوصی دفتر هستند استفاده می شود

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

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

این روش مخفی کردن آدرس IP شما دارای سطوح مختلف ناشناس بودن است. با این وجود، بدون توجه به میزان امنیت مورد نیاز، همه آنها باعث آرامش خاطر می شوند که اطلاعات شما امن است و شما در اینترنت ردیابی نمی کنید.

چگونگی انجام پرس و جو WHOIS با پروکسی SOCKS با استفاده از NodeJS

Introduction

اگر شما مایل به مقیاس quises quiz هستید، به سرعت متوجه خواهید شد که برخی از سرورهایی که این پایگاه داده ها را میزبانی می کنند، محدودیت هایی را برای تعداد دفعاتی که می توانید آنها را در هر روز یا حتی هر ساعت مورد نظر قرار دهید، تعیین کنید. [19659003] کشورها مانند استرالیا و نیوزیلند محدودیت های سنگین تر را در انجام پرس و جو اعمال می کنند و با استفاده از یک پروکسی SOCKS ما می توانیم این محدودیت ها را دور بزنیم و داده های معدن را ادامه دهیم.

Preresequites

NodeJS نصب شده است (ما از 8.9.3 در این استفاده می کنیم مثال:

نحوه انجام پرس و جو WHOIS در پشت پروکسی SOCKS

مرحله 1: install whois npm

 npm install -g whois 

 / usr / bin / whois - / usr / lib / node_modules / whois / index.js
+ [email protected]
اضافه کردن 8 بسته در 1.165s 

مرحله 2: ایجاد اسکریپت example.js با محتوای زیر

با استفاده از ویرایشگر متن مورد علاقه خود مانند vim، nano یا emacs:

 var whois = require ('whois' )
{{{پروکسی} {{ipaddress :  "162.210.198.8 "، "port": 1200، "type": 5}}، function (err، data) {
 console.log (داده ها)
}) 

قطعاتی که میخواهید ویرایش کنید:

'proxyrack.com' <- این دامنه ای است که میخواهید جستجو کنید

"ipaddress" <- پروکسی IP شما یا نام میزبان

"port" <- Port of your proxy

"type" <- 5 برای پروتکل SOCKS5 یا 4 برای SOCKS4

اگر پروکسی شما احتیاج به احراز هویت داشته باشد، شما باید آن را با ارائهدهنده خود سفید کنید (این را می توان در پنل ما انجام داد) )

آماده برای اجرا؟

به سادگی اجرای

 node example.js 

چگونه Netflix تشخیص می دهد که شما از یک VPN استفاده می کنید؟

هنگامی که شما به Netflix متصل میشوید، ابتدا دادههای جغرافیایی خود را که میبایست از شرکتهایی مانند MaxMind که یک API ارائه میدهند که به شما اجازه میدهد هر آدرس IP را جستجو کنید و بلافاصله اطلاعات مربوط به محل و ISP را دریافت کنید، بررسی کنید. 19659002] به احتمال زیاد Netflix این اطلاعات را خریداری می کند و همچنین خود را نیز آن را کامپایل می کند.

برای اولین بار استفاده می شود تا مشخص شود کدام مجوز فیلم و تلویزیون برای لذت مشاهده شما نمایش داده خواهد شد، زیرا Netflix US و Netflix UK دارای مجوزهای مختلف برای نشان دادن کتابخانه در نهایت به کاربران ما متفاوت است.

هر کسی که از Netflix با پروکسی یا VPN استفاده کرده بود، پیام مهمی داشته باشد:

اوسو، چیزی اشتباه کرد … خطای جریان

به نظر میرسد شما از یک بلوک یا پروکسی استفاده میکنید

با این وجود آنها به شما اجازه استفاده از این کتابخانه را مرور می کنند و شما متوجه می شوید که این پیام تنها زمانی نمایش می دهد که شما واقعا در حال پخش ویدیو هستید.

این به این دلیل است که آنها واقعا تشخیص می دهند که با استفاده از VPN یا پروکسی ریشه های درخواست DNS

DNS هوشمند

شما می توانید یک پروکسی واضح و یا VPN آشکار استفاده کنید که از آدرس آی پی آدرس datacenter استفاده می کند که به وضوح یک IP مسکونی نیست و فایل ویدئویی را بازی می کند اگر درخواست های DNS شما از طریق " پروکسی DNS

شما ممکن است قبلا حدس بزنید زیرا بسیاری از سرویس های غیر فعال کردن محتوای Netflix شما را با محصولات DNS هوشمند که فقط سرورهای درخواست DNS خود را تغییر می دهند ارائه می دهد.

هنگامی که درخواست سرورهای زیر دامنه یا سرورهای Netflix CDN درخواست خود را از طریق سرورهای DNS شما مسیریابی می شود و Netflix سپس متوجه خواهد شد که سرورهای DNS آنها را برای حل و فصل IP جستجو می کند.

 You ---> DNS Server ---> Netflix Server 

هنگامی که از VPN یا پروکسی خود استفاده می کنید، احتمالا با استفاده از OpenDNS یا سرورهای DNS Google برای پرس و جوی DNS پرس و جو کنید.

If شما یک کاربر مسن تر مسکونی هستید که ISP شما سرورهای خصوصی DNS را برای مشتری های خود می دهد که دیگر کسی نمی تواند آن را مورد استفاده قرار دهد.

سپس هنگامی که شما به Netflix وصل می شوید و DNS خود را پرس و جو خواهید کرد، درخواست های ناشی از یک ISP به جای استفاده آزاد از DNS سرور.

TL؛ DR

Netflix بررسی می کند که آیا شما با استفاده از یک VPN یا پروکسی با نگاه کردن به آدرس IP خود و همچنین سرور قطعنامه DNS خود را

Multi-threaded Python SOCKS Proxy Checker

Here is an excellent script which we originally modified from this source that checks your SOCKS5 proxies.

With this you can set:

  1. Number of threads
  2. Timeout value
  3. Proxy list
  4. Test URL

Then it will automatically read your proxy list and report back how many good / bad and filter the good ones into a separate text file.

Simply create your python file check.py then create two directories; input and output

Any text files in the directory input will be treated as a proxy list and once the check has completed it will write to the output directory all your good and working proxies.

 

check.py

# Network
import urllib.request, urllib.parse, urllib.error
import http.cookiejar

# Concurrency
import threading
import queue
import itertools

import pycurl

# Etc
import time
from colorama import Fore, Back, Style

# Global variables
#in_filename  = 'input/3.txt'
in_directory = './input/'
out_filename = 'output/out_filtered.txt'
test_url = 'http://www.google.com/humans.txt'
thread_number = 500
timeout_value = 1

good_message = Fore.GREEN + "GOOD!  " + Fore.RESET
bad_message = Fore.RED + "BAD " + Fore.RESET

# Stats
good_proxy_num = itertools.count()
start_time = time.time()
end_time   = time.time()

# Safe print()
mylock = threading.Lock()
def sprint(*a, **b):
    with mylock:
        print(*a, **b)


#
# Printer
#
class PrintThread(threading.Thread):
    def __init__(self, queue, filename):
        threading.Thread.__init__(self)
        self.queue = queue
        self.output = open(filename, 'a')
        self.shutdown = False

    def write(self, line):
        print(line, file=self.output)

    def run(self):
        while not self.shutdown:
            lines = self.queue.get()
            self.write(lines)
            self.queue.task_done()

    def terminate(self):
        self.output.close()
        self.shutdown = True



#
# Processor
#
class ProcessThread(threading.Thread):
    def __init__(self, id, task_queue, out_queue):
        threading.Thread.__init__(self)
        self.task_queue = task_queue
        self.out_queue  = out_queue
        self.id = id

    # ...
    def run(self):
        while True:
            task   = self.task_queue.get()
            result = self.process(task)

            if result is not None:
                self.out_queue.put(result)
                next(good_proxy_num)

            self.task_queue.task_done()


    # Do the processing job here
    def process(self, task):
        proxy = task
        log_msg = str("Thread #%3d.  Trying HTTP proxy %21s tt" % (self.id, proxy))
        c1 = pycurl.Curl()
        c1.setopt(pycurl.URL, test_url)
        c1.setopt(pycurl.PROXY, proxy.split(':')[0])
        c1.setopt(pycurl.PROXYPORT, int(proxy.split(':')[1]))
        c1.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
        c1.setopt(pycurl.CONNECTTIMEOUT, self.timeout_value)
        try:
            t1 = time.time()
            response = c1.perform()
            t2 = time.time()
        except Exception as e:
            log_msg += "%s (%s)" % (bad_message, str(e))
            sprint(log_msg)
            return None

        log_msg += good_message + " Response time: %d, response code=%s" % ( int((t2-t1)*1000), c1.getinfo(pycurl.HTTP_CODE) )
        sprint(log_msg)
        return proxy

    def terminate(self):
        None
        #print("Thread #%d is down..." % (self.id))

#
# Main starts here
#
# Init some stuff
input_queue  = queue.Queue()
result_queue = queue.Queue()


# Spawn worker threads
workers = []
for i in range(0, thread_number):
    t = ProcessThread(i, input_queue, result_queue)
    t.setDaemon(True)
    t.start()
    workers.append(t)

# Spawn printer thread to print
f_printer = PrintThread(result_queue, out_filename)
f_printer.setDaemon(True)
f_printer.start()

# Add some stuff to the input queue
start_time = time.time()

proxy_list = []
import os
for root, dirs, files in os.walk(in_directory):
    for file in files:
        if file.endswith(".txt"):
            # read all lines from file
            file_line_list = [line.rstrip('n') for line in open(os.path.join(root, file), 'r')]
            # append to proxy_list
            proxy_list.extend(file_line_list)

for proxy in proxy_list:
    input_queue.put(proxy)

total_proxy_num = len(proxy_list)
print("got %d proxies to check" % total_proxy_num)

if total_proxy_num == 0:
    exit()

# Wait for queue to get empty
input_queue.join()
result_queue.join()


#while (not input_queue.empty()):
#    time.sleep(1)


# Shutdown
f_printer.terminate()

for worker in workers:
    worker.terminate()

# Print some info
good_proxy_num = float(next(good_proxy_num))
print("In: %d. Good: %d, that's %.2f%%" % (total_proxy_num, good_proxy_num, 100.0 * good_proxy_num/total_proxy_num))

end_time = time.time()
print("Time elapsed: %.1f seconds." % (end_time - start_time))
print("Bye-bye!")

Multi-threaded Python SOCKS Proxy Checker