مقال : برمجه الأداه الخاصه بك للبحث في جوجل وفحص الثغرات بلغه البايثون – الجزء الأول
تقيمك :في هذه المقاله سأقوم بالشرح ” خطوه بخطوه ” كيف تقوم ببرمجه الـGoogle Scraper الخاص بك بسهوله بلغه البايثون ومن ثم جعله Scanner أو Mass Exploiter
المتطلبات :
- بايثون أصدار 3
- مكتبه Requests
- مكتبه Beautifulsoup4
ولتثبيت المكتبات المطلوبه نقوم بالأمر الأتي :
1 |
python -m pip install requests beautifulsoup4 |
أولا لنفهم كيف يعمل البحث في جوجل
1 |
http://www.google.com/search |
هذا الرابط يأخذ 2 باراميتر وهما q و start
الباراميتر q يحمل الكلمه التي نبحث عنها
الباراميتر start يحمل رقم صفحه البحث التي نحن بها مضروب في 10
ولذلك أذا أردت مثلا البحث عن كلمه isecur1ty فستكون هذه النتيجه
1 2 3 4 5 6 |
الصفحه 0 : http://www.google.com/search?q=isecur1ty&start=0 الصفحه 1 : http://www.google.com/search?q=isecur1ty&start=10 الصفحه 2 : http://www.google.com/search?q=isecur1ty&start=20 الصفحه 3 : http://www.google.com/search?q=isecur1ty&start=30 ... .... |
والأن لنقوم بعمل تجربه بسيطه ونري أذا كنا سنستطيع أن نأتي بكود الصفحه الأولي في البحث
1 2 3 4 5 |
import requests payload = { 'q' : 'isecur1ty', 'start' : '0' } headers = { 'User-agent' : 'Mozilla/11.0' } req = requests.get( 'http://www.google.com/search', payload, headers=headers ) print(req.text.encode('utf-8')) |
فيقوم بكتابه الكود المصدري للصفحه الأولي
الأن سنستخدم مكتبه beautifulsoup4 لجلب البيانات التي نحتاجها فقط من الكود
كما نري فالبيانات التي نحتاجها تكمن داخل تاج h3 بالـclass r
اذا نستنتج الأن أن كل صفحه سيكون بها 10 تاجات <“h3 class=”r> وبداخل كل تاج <a href> يحتوي علي الرابط الخاص بنتيجه البحث
اذا الأن سنستخدم مكتبه beautifulsoup4 ومكتبه re لفرز نتيجه البحث
1 2 3 4 5 6 7 8 9 10 11 12 |
import requests, re from bs4 import BeautifulSoup payload = { 'q' : 'isecur1ty', 'start' : '0' } headers = { 'User-agent' : 'Mozilla/11.0' } req = requests.get( 'http://www.google.com/search', payload, headers=headers ) soup = BeautifulSoup( req.text, 'html.parser' ) h3tags = soup.find_all( 'h3', class_='r' ) for h3 in h3tags: try: print(re.search('url\?q=(.+?)\&sa', h3.a['href']).group(1)) except: continue |
فستجد روابط الصفحه الأولي في البحث
الأن لنقوم بتنظيم الكود قليلا ولذلك سأقوم بعمل داله للبحث ولجعل الأداه قابله للأستخدام من التيرمنال سأقوم بأستخدام مكتبه sys ولكن تستطيع أستخدام أي مكتبه أخري أذا أردت مثل argparse أو docopt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import requests, re, sys, time from bs4 import BeautifulSoup def search_for(string, start): urls = [] payload = { 'q' : string, 'start' : start } headers = { 'User-agent' : 'Mozilla/11.0' } req = requests.get( 'http://www.google.com/search',payload, headers = headers ) soup = BeautifulSoup( req.text, 'html.parser' ) h3tags = soup.find_all( 'h3', class_='r' ) for h3 in h3tags: try: urls.append( re.search('url\?q=(.+?)\&sa', h3.a['href']).group(1) ) except: continue return urls def printf(lista): #To print list line by line like printf in python 3 for i in lista: print( " " + str( i ) ) usage = """ Usage: Mass_Exploiter.py <search> <pages> <search> String to be searched for <pages> Number of pages to search in""" try: string = sys.argv[1] page = sys.argv[2] if string.lower() == "-h" or string.lower() == "--help": print(usage) exit(0) except: print(" * * Error * * Arguments missing") print("\n"+usage) exit(0) start_time = time.time() result = [] for p in range(0,int(page)): result = result + search_for( string, str(page*10) ) printf( set( result ) ) print( " Number of urls : " + str( len( result ) ) ) print( " Finished in : " + str( int( time.time() - start_time ) ) + "s") |
والأن نقوم بتجربته بالبحث عن كلمه facebook وعرض نتايج أول صفحه فقط
رائع الكود يعمل بسلاسه والأن لنضيف أليه السرعه ليقوم بفحص صفحات أكثر في وقت أقل وسنقوم بذلك عن طريق مكتبه Multiprocessing فيصبح الكود كالأتي
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import requests, re, sys, time from bs4 import BeautifulSoup from functools import partial from multiprocessing import Pool def search_for(string, start): urls = [] payload = { 'q' : string, 'start' : start } headers = { 'User-agent' : 'Mozilla/11.0' } req = requests.get( 'http://www.google.com/search',payload, headers = headers ) soup = BeautifulSoup( req.text, 'html.parser' ) h3tags = soup.find_all( 'h3', class_='r' ) for h3 in h3tags: try: urls.append( re.search('url\?q=(.+?)\&sa', h3.a['href']).group(1) ) except: continue return urls def printf(lista): #To print list line by line like printf in python 3 for i in lista: print( " " + str( i ) ) def main(): usage = """ Usage: Mass_Exploiter.py <search> <pages> <processes> <search> String to be searched for <pages> Number of pages to search in <processes> Number of parallel processes""" try: string = sys.argv[1] page = sys.argv[2] proc = int( sys.argv[3] ) if string.lower() == "-h" or string.lower() == "--help": print(usage) exit(0) except: print(" * * Error * * Arguments missing") print("\n"+usage) exit(0) start_time = time.time() result = [] request = partial( search_for, string ) pages = [] for p in range( 0, int(page)): pages.append(p*10) with Pool(proc) as p: all = p.map(request, pages) for p in all: result += [ u for u in p] printf( set( result ) ) print( " Number of urls : " + str( len( result ) ) ) print( " Finished in : " + str( int( time.time() - start_time ) ) + "s") if __name__ == '__main__': main() |
لاحظ أنني قمت بأستخدام مكتبه functools حتي أقوم بتجزئه المهام علي كل بروسيس
والأن نقوم بأختبار السكربت بالبحث عن كلمه facebook مجددا ولكن في 20 صفحه وسأستخدم 6 بروسيس ولنري كيف أصبحت سرعه السكربت 😀
كما تري السكربت أصبح أسرع بحوالي 6 مرات عند أستخدام
تحذير :
لا تقم بأستخدام أكثر من 8 بروسيس حيث أن جوجل سيقوم بعمل حذر لجهازك أو بأظهار كابتشا بدل صفحه البحث , ولذلك يفضل أن لا يظل عدد البروسيس أقل من 8 .
وكان هذا الجزء الأول من طريقه عمل الأداه الخاصه بك للبحث في جوجل وفحص الثغرات بلغه البايثون وفي المقاله القادمه سأشرح كيف تطور هذه الأداه وتجعلها تفحص المواقع من الثغرات مثل sqli
المصدر الرئيسي للمقاله

كريم, عمري 21 سنه, هاكر أخلاقي ومطور أجيد العديد من اللغات وأكثرهم أستخداما هى البايثون ومهتم بالعديد من المجالات المتعلقه بالحمايه وعلوم الكومبيوتر بشكل عام. لي العديد من الأدوات المعروفه مثل Dr0p1t ,QRLJacker ,Cr3dOv3r , One-Lin3r و PasteJacker فأنا أحب برمجه أدوات أختبار الأختراق وأكتشاف الثغرات الأمنيه بشكل عام وما الى ذلك.
التعليقات
sinba
14 ديسمبر، 2016 الساعة 12:18 صجزاك الله خير ان شاء الله
Saif maktoob
14 ديسمبر، 2016 الساعة 11:30 مبانتظار الجزء الثاني …
عزوز
29 مارس، 2017 الساعة 11:04 صهذي الشروحات البطله
سعود
23 يناير، 2019 الساعة 6:36 مشرح تشكر عليه 100%
حسين
1 يونيو، 2019 الساعة 3:22 ماتمنى بالمقالات القادمة يكون في تعليقات بالكود تشرح كل سطر