paint-brush
বেনামী ওয়েব স্ক্র্যাপিংয়ের জন্য কালি লিনাক্স কন্টেইনার, ওয়েবড্রাইভার এবং টর ব্যবহার করুনদ্বারা@csfx
3,846 পড়া
3,846 পড়া

বেনামী ওয়েব স্ক্র্যাপিংয়ের জন্য কালি লিনাক্স কন্টেইনার, ওয়েবড্রাইভার এবং টর ব্যবহার করুন

দ্বারা Colin Barrett-Fox12m2023/08/05
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

বেনামী ওয়েব স্ক্র্যাপিং এবং অনুপ্রবেশ পরীক্ষার জন্য একটি ক্ষণস্থায়ী হোস্ট অপারেটিং সিস্টেম হিসাবে কালি লিনাক্স কন্টেইনার ব্যবহার করে আক্রমণের পেলোডগুলি অনুকরণ করুন। টর ব্রাউজার স্বয়ংক্রিয় করতে সেলেনিয়াম ব্যবহারের জন্য উদাহরণ কোড অন্তর্ভুক্ত করে। পরিশেষে, আমি পাল্টা ব্যবস্থা নিয়ে আলোচনা করব যা ডেটা সেন্টার এবং ক্লায়েন্ট উভয় ক্ষেত্রেই প্রয়োগ করা যেতে পারে বট কার্যকলাপ সনাক্তকরণ, হার সীমা এবং ব্লক করার চেষ্টা করতে।
featured image - বেনামী ওয়েব স্ক্র্যাপিংয়ের জন্য কালি লিনাক্স কন্টেইনার, ওয়েবড্রাইভার এবং টর ব্যবহার করুন
Colin Barrett-Fox HackerNoon profile picture
0-item
1-item

আমার আগের প্রবন্ধে , আমি টর ব্রাউজার দিয়ে চলমান একটি কালি লিনাক্স কন্টেইনার প্রদর্শন করতে সক্ষম হয়েছি এবং একটি VNC ক্লায়েন্টের সাথে এর ডেস্কটপ পরিবেশের সাথে সংযুক্ত। আমি যাচাই করেছি যে টর ব্রাউজার একটি ব্রাউজিং সেশনের সময় টর নেটওয়ার্কের সাথে সংযুক্ত ছিল। এই সেটআপটি আমাকে সেই ধরনের ট্রাফিকের অনুকরণ করার অনুমতি দেবে যা একটি ওয়েবসাইটকে লক্ষ্য করে আক্রমণকারীর কাছ থেকে আসতে পারে।


এই পরীক্ষায় আমি ব্রাউজারের ওয়েবড্রাইভার ইন্টারফেসের মাধ্যমে কীস্ট্রোক এবং নেভিগেশন ইভেন্টগুলিকে সংশ্লেষ করতে টর ব্রাউজারকে স্বয়ংক্রিয় করতে সেলেনিয়াম ব্যবহার করতে যাচ্ছি। প্রতিটি ক্রলারের সনাক্তকরণ এড়ানোর জন্য এমবেডেড টর প্রক্সি দ্বারা প্রদত্ত একটি র্যান্ডম আইপি ঠিকানা থাকবে। স্থানীয় ফাইল সিস্টেমে JSON অবজেক্ট হিসাবে ফলাফলগুলি সংরক্ষণ করার পরে, আমি একটি একক CSV ফাইলে প্রক্রিয়া করতে পাইথন ব্যবহার করব। পরিশেষে, বট কার্যকলাপ সনাক্তকরণ, হার সীমা এবং ব্লক করার চেষ্টা করার জন্য ডেটা সেন্টার এবং ক্লায়েন্ট সাইডে কোন পাল্টা ব্যবস্থা প্রয়োগ করা যেতে পারে তা আমি আলোচনা করব।


সমস্ত ফাইল এবং প্রযোজ্য লাইসেন্স এই ওপেন সোর্স রিপোজিটরিতে পাওয়া যায়: tor-driver-python


সম্পূর্ণ ক্রলার স্ক্রিপ্ট চালানোর স্ক্রিন ক্যাপচার:


আমার পরীক্ষা অটোমেশনের একটি ব্যাকগ্রাউন্ড আছে, এবং পরীক্ষা ডিজাইন করতে অনেক ঘন্টা ব্যয় করেছি। আমি সেলেনিয়ামের সাথে কাজ করার জন্যও অনেক সময় ব্যয় করেছি, এবং আমি পরীক্ষার উদ্দেশ্যে ওয়েব ব্রাউজারগুলিকে স্বয়ংক্রিয় করতে বিভিন্ন প্রোগ্রামিং ভাষা এবং সেটিংসে এটি ব্যবহার করেছি। এমন পরিস্থিতি রয়েছে যেখানে শুধুমাত্র একটি বাস্তব ব্রাউজার দিয়ে একটি ওয়েব অ্যাপ্লিকেশন পরীক্ষা করা সম্ভব, এবং সেলেনিয়াম এটির জন্য একটি দুর্দান্ত সরঞ্জাম।


দৃশ্যকল্প

একজন DevOps ইঞ্জিনিয়ার হিসাবে আমার কাজ করার সময় আমি যে ওয়েব অ্যাপ্লিকেশনগুলির জন্য দায়বদ্ধ সেই ওয়েব ক্রলারগুলিকে আঘাত করছে এবং কখনও কখনও সরাসরি আক্রমণ করছে তাদের সাথে কী করা উচিত তা নিয়ে আমি খুব কম সময় ব্যয় করিনি৷ আমি ভেবেছিলাম একবারের জন্য এই সমস্যার অন্য দিকটি অন্বেষণ করা একটি আকর্ষণীয় পরীক্ষা হবে।


আমি দেখতে চাই যে আমি শিক্ষাগত উদ্দেশ্যে একটি বটনেট থেকে আক্রমণের অনুকরণের কতটা কাছাকাছি যেতে পারি এবং আধুনিক ডেটা সেন্টারে সন্দেহজনক টর নেটওয়ার্ক ট্র্যাফিকের মতো জিনিসগুলি মোকাবেলার পদ্ধতি নিয়ে আলোচনা করতে চাই৷ বটনেট সাধারণত ক্রেডেনশিয়াল স্টাফিং আক্রমণ করতে ব্যবহৃত হয়। আমি অনুসন্ধান অনুসন্ধান এবং ওয়েব থেকে তথ্য সংগ্রহ করতে একটি অনুরূপ কৌশল ব্যবহার করা হবে.


শংসাপত্র স্টাফিং হল ব্যবহারকারীর অ্যাকাউন্টে প্রতারণামূলকভাবে অ্যাক্সেস পাওয়ার জন্য, ওয়েবসাইট লগইন ফর্মগুলিতে চুরি করা ব্যবহারকারীর নাম এবং পাসওয়ার্ড জোড়া ("শংসাপত্র") স্বয়ংক্রিয়ভাবে ইনজেকশন। 1


নৈতিক বিবেচ্য বিষয়

নৈতিক বিষয়গুলি এড়ানোর জন্য, কাজের প্রতি সত্য থাকার চেষ্টা করার সময়। আমি দৃশ্যকল্পে নিম্নলিখিত পরিবর্তন করছি:


  1. আমি ব্যক্তিগতভাবে শনাক্তকরণযোগ্য তথ্য (PII) সংগ্রহ করব না এবং কোনও শংসাপত্র ব্যবহার করা হবে না। আমি পরিবর্তে একটি ফাইল থেকে অনুসন্ধান পদ পড়ব এবং জনসাধারণের তথ্য সংগ্রহ করব।
  2. আমি বটনেটের পরিবর্তে র্যান্ডম আইপি অ্যাড্রেস হপিং আচরণ অনুকরণ করতে টর নেটওয়ার্ক ব্যবহার করব।
  3. এই পদক্ষেপগুলি ইচ্ছাকৃতভাবে অনুমোদিত robots.txt ফাইল সহ সাইটগুলিকে লক্ষ্য করে এবং লেখার সময় নিয়ম ও শর্তাবলী পরীক্ষা করা হয়েছিল যেগুলি ক্রল করা বাদ দেওয়া হবে না৷ যেমন IMDB-এর শর্তাবলী স্পষ্টভাবে লিখিত সম্মতি ছাড়া ক্রল করা নিষিদ্ধ করে।
  4. সংগৃহীত তথ্য শুধুমাত্র সর্বজনীনভাবে উপলব্ধ তথ্যের মধ্যে সীমাবদ্ধ থাকবে। লক্ষ্য সাইটে সর্বজনীনভাবে উপলব্ধ নয় এমন তথ্যে অ্যাক্সেস পাওয়ার জন্য আমি কোনো শোষণ বা অন্য পদ্ধতি ব্যবহার করব না।
  5. পরিশেষে, আমি সীমাবদ্ধ করে দেবো রেট অনুরোধ টার্গেট সাইটে করা হয়েছে যাতে ব্লক হওয়া বা অন্য ব্যবহারকারীদের থ্রুপুট নিয়ে সমস্যা না হয়।


robots.txt

রোবটস এক্সক্লুশন প্রোটোকল হল ওয়েবমাস্টারদের জন্য একটি উপায় যে তারা কোথায় আছে এবং তাদের তথ্য সংগ্রহ করার অনুমতি নেই। আরও তথ্য এবং উদাহরণ robotstxt.org ওয়েবসাইটে পাওয়া যাবে। আমি একটি নিবন্ধ পেয়েছি: অনুসন্ধান ফলাফল পৃষ্ঠায় ওয়েব স্ক্র্যাপ করার অনুমতি দেয় এমন একটি খুঁজে বের করার চেষ্টা করার সময় বিকল্প অনুসন্ধান ইঞ্জিনগুলির তালিকা ৷ নীচে সেই গবেষণার সারসংক্ষেপ দেওয়া হল।


বিভিন্ন সার্চ ইঞ্জিনের নমুনা থেকে robots.txt ফাইলের তুলনা করা


খোঁজ যন্ত্র

robots.txt URL

ক্রলিং অনুমোদিত?

গুগল

robots.txt

না, কিন্তু একটি এপিআই আছে

বিং

robots.txt

না, কিন্তু একটি এপিআই আছে

ইয়াহু

robots.txt

না

ডাকডাকগো

robots.txt

না, কিন্তু একটি এপিআই আছে

ওপেন আয়াত

robots.txt

হ্যাঁ, কিন্তু আমি যা খুঁজছিলাম ঠিক তা নয়

সিয়ারএক্স

robots.txt

হ্যাঁ


অতিরিক্ত সম্পদ

এই বিষয়ে গবেষণা করার সময় আমি দরকারী খুঁজে পেয়েছি এমন কিছু অন্যান্য সংস্থান:


সেলেনিয়াম এবং ওয়েবড্রাইভারের সাথে একটি ওয়েব পৃষ্ঠা ম্যানিপুলেট করা

আমি এই উদাহরণের জন্য সেলেনিয়াম ছাড়া অন্য লাইব্রেরি ব্যবহার এড়াতে যাচ্ছি। কিছু সত্যিকারের মৌলিক নিদর্শন রয়েছে যা আমি প্রদর্শন করতে চাই এবং আমি একটি নির্দিষ্ট ডোমেন স্পেসিফিক ল্যাঙ্গুয়েজ (DSL) এর সাথে আটকে থাকতে চাই না যা কি ঘটছে তা বোঝা কঠিন করে তুলতে পারে।


যাইহোক, আমি মনে করি একটি পরীক্ষা চলমান ফ্রেমওয়ার্ক ব্যবহার করে এই ধরনের কোড সংগঠিত করার একটি দুর্দান্ত উপায়। একটি ফ্রেমওয়ার্ক যোগ করলে সাধারণ কোড স্ট্রাকচার, লজিক আবার চেষ্টা করুন এবং এমনকি রিপোর্টিং এর আশেপাশে অনেক সমস্যার সমাধান হতে পারে।


মৌলিক প্যাটার্ন

ওয়েবড্রাইভার সেশনে আমি কীভাবে একটি পৃষ্ঠা ম্যানিপুলেট করতে যাই তার একটি মৌলিক প্যাটার্ন রয়েছে। আমি প্রতিটি কর্ম সঞ্চালিত পরে একটি বিরতি যোগ করুন. ব্রাউজার অটোমেশন ফ্লেকি হতে পারে। টাইমআউটগুলি ক্রলটিতে অনেক স্থিতিশীলতা যোগ করে এবং রেট সীমিত এবং অবরুদ্ধ হওয়ার সম্ভাবনাকে ব্যাপকভাবে সীমিত করে। যেখানেই প্রয়োজন, আমি অন্যান্য সার্চ ইঞ্জিন বা তথ্যের উত্সগুলিতে API কলগুলির সাথে ক্রলও বাড়িয়ে দিই৷


  1. একটি URL এ নেভিগেট করুন।
  2. পৃষ্ঠাটি লোড করা শেষ হওয়ার জন্য অপেক্ষা করুন।
  3. আমি যে উপাদানটির সাথে ইন্টারঅ্যাক্ট করতে চাই সেটি খুঁজুন, এটির জন্য নির্বাচক বিকাশ করুন।
  4. উপাদানটি উপস্থিত হওয়ার জন্য অপেক্ষা করুন।
  5. দৃশ্যে উপাদান স্ক্রোল করুন.
  6. উপাদানের সাথে যোগাযোগ করুন।
  7. পুনরাবৃত্তি করুন

কোডের ওভারভিউ

আমি নির্বাচকদের কাছে সত্যিই সহজ পন্থা নিয়েছিলাম। আমি ব্রাউজারে উপলব্ধ xpath এবং CSS নির্বাচক উভয়ই ব্যবহার করছি। একটি ক্রল করার সময় পৃষ্ঠাগুলির মধ্যে নেভিগেট করার জন্য প্রধানত অ্যাঙ্কর ট্যাগ এবং URL খণ্ডের চারপাশে ফোকাস করা।


আমি তাদের উপর ক্লিক করার চেষ্টা করার আগে উপাদান উপস্থিত থাকার জন্য অপেক্ষা করার জন্য প্রত্যাশিত শর্ত ব্যবহার করছি. সেলেনিয়াম প্রকল্পের প্রচুর ডকুমেন্টেশন রয়েছে, তবে আমি স্ট্যাক ওভারফ্লোতে উদাহরণ ব্যবহার সহ অপেক্ষার শর্তগুলি সম্পর্কে আলোচনাটি একটি অমূল্য সম্পদ হিসাবে খুঁজে পেয়েছি।


TorDriver মডিউল

Tbselenium নামক একটি বিদ্যমান PyPi প্রকল্প রয়েছে যার একটি অনুরূপ ফাংশন রয়েছে। এই পরীক্ষার জন্য, আমি ফায়ারফক্স প্রোফাইল সেটআপ উল্লেখ করেছি, কিন্তু tbselenium-এর অন্তর্ভুক্ত অন্যান্য বৈশিষ্ট্যগুলির প্রয়োজন নেই। রুট অ্যাক্সেস না থাকা কন্টেইনারগুলির অতিরিক্ত জটিলতা ডিবাগিংকে আরও কঠিন করে তুলতে অবদান রাখছিল। এটি নির্ভরতা সীমিত করার প্রেরণা যোগ করেছে, এবং সহজ প্রাক-বিদ্যমান সমাধানগুলি চেষ্টা করছে। উদাহরণস্বরূপ, এমন অনেক জায়গা আছে যেখানে আমি সরাসরি বিশুদ্ধ পাইথন সমাধান বাস্তবায়নের পরিবর্তে লিনাক্স সরঞ্জাম এবং সাব-শেল ব্যবহার করছি।


সমাপ্ত ক্লাস পাইথনের প্রায় 150 লাইন। আমি মনে করি কম পর্যালোচনার সাথে গভীরভাবে কী ঘটছে তা বিশ্লেষণ করা সহজ হবে। টর ব্রাউজার লঞ্চার কিভাবে কাজ করে এবং কিভাবে ফায়ারফক্স প্রোফাইল কনফিগার করতে হয় সে সম্পর্কে আমি অনেক কিছু শিখেছি। এই প্রোফাইলটি অনলাইন একাধিক উত্স থেকে সংগ্রহ করা হয়েছে, এবং সেগুলি এই নথির পাশাপাশি উত্স কোডে উল্লেখ করা হয়েছে৷


আমি TorDriver নামে একটি ক্লাসে স্টার্টআপ, টিয়ার ডাউন এবং নেভিগেশন লজিকের একটি খুব সাধারণ অংশকে বিমূর্ত করেছি। এটি একটি খুব সাধারণ ক্লাস যা টর ব্রাউজার লঞ্চারের সাথে একটি ফায়ারফক্স প্রোফাইল সেট আপ করে। পৃষ্ঠায় একটি উপাদান দৃশ্যমান কিনা তা পরীক্ষা করার জন্য এটির একটি পদ্ধতি রয়েছে এবং অন্যটি যা যাচাই করে প্রক্সি সকেট চালু এবং চলছে৷ ফায়ারফক্স প্রোফাইল সেটআপ এবং ডিবাগিং মূলত একটি স্ট্যাক ওভারফ্লো আলোচনার মাধ্যমে জানানো হয়েছিল: সেলেনিয়ামের সাথে টোর ব্রাউজার খুলুন


সম্পূর্ণ ফাইলটি এখানে পাওয়া যাবে: tor-driver-python/torDriver.py


আমদানি

সেটআপ এবং ওয়েবড্রাইভার উপাদানগুলির জন্য সেলেনিয়াম, পিপ্রিন্ট, সাবপ্রসেস এবং সকেট আমদানি করা হচ্ছে।


torDriver.py মডিউলের জন্য আমদানি


একটি উপাদান দৃশ্যমান কিনা পরীক্ষা করুন

নিম্নলিখিত পদ্ধতিটি একটি উপাদানের জন্য পরীক্ষা করাকে বিমূর্ত করে, এবং এটি একটি টাইমআউটের মধ্যে দৃশ্যমান হলে True বা False প্রদান করে।


একটি নির্বাচক দৃশ্যমান কিনা পরীক্ষা করুন

টর প্রক্সি শুরু হয়েছে কিনা তা পরীক্ষা করা হচ্ছে

প্রক্সি পোর্টে সংকেত পাঠানোর আগে সক্রিয় থাকা দরকার। পাইথনে সকেট সংযোগ পরীক্ষা করার বিষয়ে স্ট্যাক ওভারফ্লোতে কিছু উদাহরণ অনুসরণ করে আমি এটি নিয়ে এসেছি:


একটি সকেটের সফল সংযোগ পরীক্ষা করুন

শ্রেণী

মডিউলের বেশিরভাগ অংশ হল একটি ক্লাস যা ফায়ারফক্স প্রোফাইল নিয়ন্ত্রণ করে, গেকোড্রাইভার ডাউনলোড করে এবং টরব্রাউজার-লঞ্চার শুরু করে।


TorDriver সংজ্ঞা এবং সূচনা

এখানে আমার একটি মৌলিক কনফিগারেশন এবং জিনিসগুলিকে ওভাররাইড করার কিছু উপায় রয়েছে, তবে বেশিরভাগই এটি যতটা সম্ভব সহজ রাখা:


TorDriver ক্লাস বৈশিষ্ট্য এবং init

ফায়ারফক্স প্রোফাইল সেটআপ

প্রক্সি পোর্টের সাথে সংযোগ করার জন্য ফায়ারফক্স প্রোফাইলটিকে সর্বনিম্নভাবে কনফিগার করতে হবে, আমি এটির সাথে জাভাস্ক্রিপ্টও নিষ্ক্রিয় করেছি।


ফায়ারফক্স প্রোফাইল সেটআপ করুন

WebDriver সেটআপ করুন

এটি একটি ড্রাইভার শুরু করতে TorDriver থেকে প্রোফাইল এবং বাইনারি ব্যবহার করে


ফায়ারফক্সের জন্য একটি নতুন ওয়েবড্রাইভার সেশন তৈরি করুন


Geckodriver ডাউনলোড করুন

একটি সাবপ্রসেসে গেকোড্রাইভার ডাউনলোড এবং নিষ্কাশনের জন্য একটি পদ্ধতি যোগ করা। উল্লেখ করার মতো যে কোনওভাবে এটিকে কন্টেইনারে চালানোর সময় tar.gz আর সংকুচিত হয় না এবং এটি কেবল সংরক্ষণাগারমুক্ত করা প্রয়োজন। ত্রুটি সম্পর্কে আরও তথ্য এখানে উপলব্ধ: stdin: gzip বিন্যাসে ত্রুটি নয়


কার্ল এবং টার এক্সট্র্যাক্ট গেকোড্রাইভার


টর নেটওয়ার্কের জন্য সেটআপ করুন এবং অপেক্ষা করুন

সকেট সাড়া না দেওয়া পর্যন্ত, প্রক্সি পোর্টের সাথে একটি সংযোগ পুনরায় চেষ্টা করুন:


সাবপ্রসেসে টরব্রাউজার-লঞ্চার শুরু করুন


crawler.py

এই উদাহরণে আমি নিম্নলিখিত পদ্ধতি দুটি ফেজ পদ্ধতি গ্রহণ করেছি। প্রথম পর্যায় হল তথ্য সংগ্রহ, এবং পরবর্তী ধাপ হল তথ্য প্রক্রিয়াকরণের জন্য। এইভাবে আমি পুরো প্রক্রিয়ার জন্য নেটওয়ার্ক সংযোগের সাথে আবদ্ধ নই, এবং উত্স উপাদানগুলিতে ফিরে না গিয়ে ফলাফলগুলি যতবার প্রয়োজন ততবার পার্স করার চেষ্টা করতে পারি।


সম্পূর্ণ ফাইলটি এখানে পাওয়া যাবে: tor-driver-python/crawler.py


মডিউল আমদানি

ক্রলার দ্বারা ব্যবহৃত আমদানি, বৈশিষ্ট্য এবং সেটআপ পদ্ধতি


প্রধান ক্রলার কার্যকারিতা

ক্রলার একটি টেক্সট ফাইল পড়ে এবং WebDriver সেশনে প্রশ্নগুলি পূরণ করতে সেই তথ্য ব্যবহার করে। ক্রলের অবস্থা json ফাইলের একটি ফোল্ডারে প্রতি প্রশ্নে একটি করে রাখা হয়। আমি তথ্যটি একবার রপ্তানি করার জন্য একেবারে প্রয়োজনীয় ন্যূনতম প্রক্রিয়াকরণ করার চেষ্টা করি এবং সাইট(গুলি) এ ফিরে যাওয়ার পরিবর্তে বিদ্যমান ডেটাতে পরবর্তী প্রক্রিয়াকরণ ঘটতে পারে।


একটি ওয়েব ব্রাউজার দিয়ে সার্চ ইঞ্জিনের মাধ্যমে ক্রল করার প্রধান ধাপ


searches.txt

আমি অনুসন্ধানগুলি সংরক্ষণ করার জন্য একটি পাঠ্য ফাইল ব্যবহার করছি৷ আমি একটি পাঠ্য ফাইল বেছে নিয়েছি কারণ এটি পুনর্গঠন করা খুব সহজ৷ টেক্সট এডিট করা হল একটি কম বাধা নতুন তথ্য দিয়ে ক্রল শুরু করতে, অথবা যেটি আংশিকভাবে ব্যর্থ হয়েছে তা আবার শুরু করতে। যদি এই ক্রলারের আরও জটিল ডেটা প্রয়োজনীয়তা থাকে তবে আমি পরিবর্তে একটি ডেটাবেস ব্যবহার করার কথা বিবেচনা করব। এটি রিপোর্টিংয়ের জন্য একটি কাস্টম ব্যবহারকারী ইন্টারফেসের সাথে স্ক্যান নিয়ন্ত্রণের জন্য একটি API প্রয়োগ করার অনুমতি দেবে।


ক্রলার দ্বারা চালানো অনুসন্ধানের একটি তালিকা৷


JSON ফলাফল বিন্যাস

উদাহরণ ফাইলগুলি ইতিমধ্যে রেপোতে ফলাফল ফোল্ডারে রয়েছে: tor-driver-python/results

আরও শক্তিশালী ক্রলারে আমি একটি প্রকৃত ডাটাবেস প্রযুক্তি ব্যবহার করার পরামর্শ দেব। ডেটা সংগ্রহ কোথায় থামছে তা সহজেই জানাতে এবং পুনরায় চালু করার সুবিধার্থে এটি যথেষ্ট।


একটি ওয়েব ক্রল অবস্থা সংরক্ষণের জন্য JSON


একটি কন্টেইনার থেকে ক্রলার চালানো

ক্রলারকে নিম্নলিখিত কমান্ড দিয়ে কন্টেইনার থেকে চালানো যেতে পারে। রিপোর্ট জেনারেটরের জন্য JSON ফাইল থাকা প্রয়োজন, উদাহরণ রপ্তানি CSV ফাইল এখানে পাওয়া যাবে:


ধারক শুরু করুন:

 docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser


কন্টেইনারে একটি VNC সার্ভার শুরু করুন, এটি সেশন পাসওয়ার্ডের জন্য অনুরোধ করবে:

 /opt/start-vnc-server-once.sh 


ডকার কন্টেইনারে একটি VNC সেশন শুরু থেকে টার্মিনাল আউটপুট


VNC সেশনের ভিতর থেকে ক্রল শুরু করুন:

 python3 crawler.py


ক্রলার টর ব্রাউজার শুরু করার জন্য অপেক্ষা করবে, এবং দুর্ভাগ্যবশত, এটি একটি ম্যানুয়াল পদক্ষেপ। শুধু চেকবক্সে ক্লিক করুন, এবং সংযোগ ক্লিক করুন। একটি উদাহরণের জন্য ভিডিও ডেমো দেখুন.


ধারকটি পরিষ্কার না হওয়া পর্যন্ত স্বয়ংক্রিয়ভাবে টরের সাথে সংযোগ করুন


report.py

রিপোর্ট স্ক্রিপ্ট থেকে একটি কমা সেপারেটেড ভ্যালু (CSV) ফাইল তৈরি করবে

JavaScript অবজেক্ট নোটেশন (JSON) ফলাফল ফাইলগুলি ক্রলার ক্রল জুড়ে সংরক্ষণ করে। আমি CSV ফর্ম্যাটটি বেছে নিয়েছি কারণ এটি সহকর্মীদের সাথে ভাগ করে নেওয়ার জন্য একটি সাধারণ বিন্যাস, তবে আরও বিশ্লেষণের জন্য অন্যান্য সরঞ্জামগুলিতে আমদানি করা সহজ৷


সম্পূর্ণ ফাইলটি এখানে পাওয়া যাবে: tor-driver-python/report.py


মডিউল আমদানি

এটি JSON পড়তে, CSV লিখতে এবং ফরম্যাটিং এবং ডেটা উপস্থাপনার জন্য ইউআরএল পার্স করতে পাইথন লাইব্রেরিতে নির্মিত ব্যবহার করে। তারপরে ফলাফলগুলি লুপ করে এবং ডেটা প্রক্রিয়াকরণ শুরু করতে সেগুলি লোড করে৷


রিপোর্ট জেনারেটরের আমদানি, বৈশিষ্ট্য এবং ডেটা প্রাথমিককরণ


প্রধান রিপোর্ট জেনারেটর

এটি রিপোর্ট জেনারেটরের মূল কার্যকারিতা। এটি ফলাফল অবজেক্টে ক্যাপচার করা ডেটার একটি চূড়ান্ত উপস্থাপনা এবং ক্রম তৈরি করে। সাধারণত ইউআরএলগুলি শুধুমাত্র একটি সাইটের মাধ্যমে ক্রলারদের কার্যকরী আন্দোলনের জন্য উপযোগী, এবং একটি চূড়ান্ত ডেটা ক্যাপচার হিসাবে নয়, তবে এটি আরও ডেটা নিষ্কাশন কাস্টমাইজ করার জন্য একটি ভাল শুরু।


ফলাফল অবজেক্ট থেকে একটি CSV ফাইল ফর্ম্যাট করুন এবং লেখক করুন


রিপোর্ট চালান

ক্রলের ফলাফল ./results ডিরেক্টরিতে JSON ফাইল হিসাবে সংরক্ষিত হয়। আমি ডেটা থেকে একটি প্রতিবেদন তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করব।


 python3 report.py


উদাহরণ রিপোর্ট

একটি উদাহরণ আউটপুট CSV ফাইল এখানে পাওয়া যাবে: tor-driver-python/output.csv


CSV রিপোর্টের স্নিপেট কলাম এবং ডেটা দেখাচ্ছে


আক্রমণ সনাক্ত করা এবং প্রশমিত করা

বট কার্যকলাপ সনাক্ত এবং প্রশমিত করার কয়েকটি ভিন্ন উপায় আছে। আমি প্রাথমিকভাবে ডেটা সেন্টারের দিকে ফোকাস করব, তবে আমি কিছু ক্লায়েন্ট সাইড সনাক্তকরণ পদ্ধতি নিয়েও আলোচনা করব। ক্লায়েন্টকে কখনই বিশ্বাস করা যায় না যদিও ক্লায়েন্ট সাইড সিগন্যাল যেকোন সময় পরিবর্তিত হতে পারে এবং প্রতারণা করা যেতে পারে। আমি মনে করি একটি সনাক্তকরণ সিস্টেম ডিজাইন করার সময় এটি মাথায় রাখা গুরুত্বপূর্ণ। ডেটা সেন্টারে আমি আলোচনা করব সুরক্ষার দুটি ফর্ম রয়েছে: হার সীমিত করা, এবং খ্যাতি ব্লক করা৷



ক্লায়েন্ট সাইড সনাক্তকরণ

জাভাস্ক্রিপ্টের সাথে ক্লায়েন্ট সাইডে একটি সক্রিয় ওয়েবড্রাইভার সেশন সনাক্ত করার কয়েকটি উপায় রয়েছে: গিথুবে কিছুটা সম্পর্কিত সমস্যা আরও বিশদে যায় । মূলত, যেহেতু WebDriver প্রোটোকল নথি এবং উইন্ডো অবজেক্টগুলিকে পরিবর্তন করে এটি ক্লায়েন্ট সাইড কোডে সনাক্ত করা যেতে পারে।


WebDriver ক্লায়েন্ট পাশ সনাক্ত করার বিষয়ে GitHub সমস্যা সম্পর্কে মন্তব্য করুন


একটি ডেটা সেন্টারে বট ট্র্যাফিক সনাক্ত করা এবং ব্লক করা

আমি সেই সমাধানগুলিতে ফোকাস করতে যাচ্ছি যেগুলির সাথে আমার সবচেয়ে বেশি অভিজ্ঞতা আছে, ফাস্টলি, AWS WAF, এবং Nginx। ক্লাউডফ্লেয়ার একটি সম্পূর্ণ বিস্ময় ছিল, তাই আমি তাদের অফার সম্পর্কেও কথা বলতে যাচ্ছি।


AWS ওয়েব অ্যাপ্লিকেশন ফায়ারওয়াল (WAF) রেট ভিত্তিক নিয়মগুলি পরিষেবার অস্বীকৃতির কার্যকলাপের স্তরগুলিকে ব্লক করতেও ব্যবহার করা যেতে পারে এবং সেখানে ডিফল্ট নিয়ম রয়েছে যা টর নেটওয়ার্ক ট্র্যাফিক সনাক্ত করতেও ব্যবহার করা যেতে পারে, আরও তথ্যের জন্য আইপি রেপুটেশন রুল ডকুমেন্টেশন দেখুন৷ আরেকটি সাধারণ পদ্ধতি হল অন্যান্য ডেটা সেন্টার থেকে সমস্ত ট্র্যাফিক ব্লক করা, যা নিরাপদ যদি লক্ষ্য শ্রোতারা গ্রাহক হয়। যাইহোক, ব্যবসাগুলি ক্লাউড ভিপিএন এবং অন্যান্য প্রযুক্তি ব্যবহার করতে পারে যা এটি বৈধ ট্রাফিকের জন্য ক্ষতিকারক হতে পারে।


ফাস্টলি'স সিগন্যাল সায়েন্স, একটি খুব জনপ্রিয় সমাধান, বিশেষভাবে টর ট্র্যাফিক সনাক্ত করতে ব্যবহার করা যেতে পারে। প্রথমত, তারা DDOS আক্রমণ থেকে রক্ষা করতে পারে, আরও তথ্যের জন্য তাদের DDOS মিটিগেশন পৃষ্ঠা দেখুন। দ্বিতীয়ত, তারা টর ট্র্যাফিক সনাক্ত করতে পারে এবং এটি ব্লক করতে পারে। এখানে সিস্টেম সিগন্যাল ডকুমেন্টেশন ব্যবহার করা হয়েছে যা এটিকে কভার করে।


Nginx এর জন্য এটি করার বিষয়ে কিছু নিবন্ধ রয়েছে: Nginx এর সাথে বা আপনার ওয়েব অ্যাপ্লিকেশনের ভিতরে কীভাবে বেনামী ট্র্যাফিক ব্লক করবেন । মূলত, টর প্রস্থান নোড সম্পর্কে তথ্য পেতে API-কে কল করে, আইপি ব্লক করার নিয়ম তৈরি করা যেতে পারে এবং একটি সময়সূচীতে Nginx এ প্রয়োগ করা যেতে পারে।


উপরের ক্লাউড প্রদানকারীদের একটি আশ্চর্যজনক বিপরীতে, ক্লাউডফ্লেয়ার টর ক্লায়েন্টদের জন্য সমর্থন প্রদান করছে। আমি তাদের টর সমর্থন ডকুমেন্টেশন জুড়ে এসেছি!? যেখানে তারা নেটওয়ার্ক থেকে Tor ব্যবহারকারীদের সামগ্রী পরিবেশন করার ক্ষমতা নিয়ে আলোচনা করে। আমি মনে করি এটি সত্যিই একটি আকর্ষণীয় পদ্ধতি, এবং আমি ভবিষ্যতে এটি আরও অন্বেষণ করতে আগ্রহী।



উপসংহার


WebDriver পরীক্ষার জন্য একটি শক্তিশালী টুল এবং এটি এমন জায়গায় তথ্য সংগ্রহের জন্যও ব্যবহার করা যেতে পারে যেখানে একটি API-তে অ্যাক্সেস সম্ভব নয়। উদাহরণস্বরূপ: অ্যাক্সেস অন্যথায় সীমাবদ্ধ, সেন্সর করা, খুব ব্যয়বহুল, বা সাধারণত বিরোধী প্রতিযোগিতামূলক অনুশীলনের পিছনে লক করা হয়। এপিআই থেকে সংগৃহীত তথ্যের সাথে ওয়েব ক্রলিং থেকে সংগৃহীত ডেটা একত্রিত করা আরও ভাল।


এটি একটি গুরুত্বপূর্ণ অনুশীলন কারণ বটস থেকে ক্ষতিকারক ট্র্যাফিক প্রতিরোধ করা কঠিন থেকে কঠিনতর হয়ে উঠছে এবং এটি কীভাবে প্রশমিত করা যায় তা বিবেচনা করার জন্য আক্রমণ না হওয়া পর্যন্ত অপেক্ষা করা একটি ভাল সুরক্ষা অনুশীলন নয়। আমি বিশ্বাস করি যে অনলাইনে তথ্য দেওয়ার জন্য দায়ী প্রত্যেকেরই জানা উচিত যে তারা যে সিস্টেমের জন্য দায়ী তাদের বিরুদ্ধে কীভাবে লঙ্ঘিত তথ্য ব্যবহার করা হবে। একটি সরলীকৃত পরিস্থিতিতে, নৈতিক সীমাবদ্ধতার সাথে, আমি নিম্নলিখিতগুলি করে এটি প্রদর্শন করেছি:


  1. একটি র্যান্ডম আইপি ঠিকানা ব্যবহার করে একটি টর ব্রাউজার সেশন স্বয়ংক্রিয় করতে সেলেনিয়াম ব্যবহার করা।
  2. Python এবং WebDriver প্রোটোকল ব্যবহার করে একটি ওয়েবসাইট থেকে তথ্য সংগ্রহ করা।
  3. JSON ফাইলের একটি সেটে তথ্য সংরক্ষণ করা হয়েছে।
  4. অফলাইনে ফলাফল থেকে একটি CSV রিপোর্ট তৈরি করতে একটি পাইথন স্ক্রিপ্ট ব্যবহার করা হয়েছে৷
  5. ডেটা সেন্টারে ডিনায়াল অফ সার্ভিস এবং টর নেটওয়ার্ক ক্রিয়াকলাপ সনাক্তকরণ এবং হ্রাস করার বিভিন্ন উপায় নিয়ে আলোচনা করা হয়েছে।