H4x0r
./ عضو




السمعة:
- إنضم26 يونيو 2023
- المشاركات 80
- الحلول 1
- مستوى التفاعل 229
- النقاط 33
السلام عليكم ورحمة الله وبركاته
بهذا المقال رح نفوت بالشغل اليدوي في wireshark بشغلة جدًا مهمة Filtering وأغلب الأشخاص بستصعبوا موضوع Filtering و هو إن شاء الله بسيط وإتقانه رح يريحك بكثير أمور إن شاء الله رح أتكلم عن أهم الأمور .
ممكن تسأل سؤال هو ليش مهم ؟ بسبب إنه بعطيك مرونة بتضيق نطاق البحث بشكل جميل حسب السيناريو او الحالة او البيئة يلي بتشتغل فيها .
تمام أنت لما بدك تعمل تصفية للحزم رح تهتم بأمور و هي :
بهذا المقال رح نفوت بالشغل اليدوي في wireshark بشغلة جدًا مهمة Filtering وأغلب الأشخاص بستصعبوا موضوع Filtering و هو إن شاء الله بسيط وإتقانه رح يريحك بكثير أمور إن شاء الله رح أتكلم عن أهم الأمور .
ممكن تسأل سؤال هو ليش مهم ؟ بسبب إنه بعطيك مرونة بتضيق نطاق البحث بشكل جميل حسب السيناريو او الحالة او البيئة يلي بتشتغل فيها .
تمام أنت لما بدك تعمل تصفية للحزم رح تهتم بأمور و هي :
- Scope: host, net, port and portrange.
نطاق البحث يا بتبحث عن host معيا يا port محدد عشان تحلل الحزمة
- Direction: src, dst, src or dst, src and dst,
و رح تحديد بحثك حسب اتجاه الحزمة هي مصدر او الوجهة .
- Protocol: ether, wlan, ip, ip6, arp, rarp, tcp and udp.
و البروتوكل المستخدم في الحزمة .
خليني أحط مثال ونشوف هل عملنا هاي الشغلات ؟
tcp port 80
Scope: port
Protocol : tcp
Direction : null
خلونا نشوف أمثلة توضيحية من نفس wireshark :
وممكن نشوف الـ Display Filter :
إذا بتلاحظ شيء في عنا == و ! شو هذول؟
هون شغلة مهمة بالتصفية يعتمد على logic يعني أنت بتكتب أمر التصفية خلينا نحكي إنه هو بقارن الأمر يلي كتببته بالحزم وإذا رجع true بعمل تصفية رجع false ما رح يرجع اشي و لقدام رح نشوف كيف بعطيك true and false طب تعال نعطي مثال خفيف :
اجيت كتبتله بالـ Filter :
ip.addr==192.168.1.22
هون شو طلبت منه؟ أنا حكتله جيبلي كل الحزم يلي تحتوي أو تساوي ip 192.168.1.22 فهو رح يبحث بالحزم كل حزمة بلاقي ال ip تبعها 192.168.1.22 رح يعرضلك ياها
طيب لو فش ولا حزمة فيها هذا ال ip مش رح يطلعلك حزممم لأنه فش. طيب شو ال logic يلي بتحكي عنه بقلك هو نفسه بطريقة الكتابة إنه بصير زي مقارنة لازم استخدم or ,&& و رح نسخدم المقارانات نفس نظام لغات البرمجة بزبط .
هي جدول بوضح عمليات المقارنة (Comparison Operators) المستخدمة بجميع أشكالها :
Logical Expressions
طيب إذا تلاحظ شغلة بالأمثلة ولا مثال مستخدمين فيه أحرف uppercase , ايوا بزبط يعني هو بعتمد بس ال lowercase .
رح تيجي تسأل سؤال طيب أنت بتحكي ممكن تكتب الأمر التصفية غلط طيب كيف بدي أعرف إنه غلط ؟ حلو wireshark و أنت بتكتب الأمر رح يتغير لون مكان الكتابة لما يكون صح رح يكون لون أخضر و لما يكون غلط رح يصير أحمر يعني وأنت بتكتب كتبت حرف غلط رح يصير لون أحمر عشان ينبهك هي صورة موضحة :
تمام الآن فهمنا المبدأ خلونا نبلش نكتب :
رح احط جداول كأمثلة هي واضحة إن شاء الله.
خليني أحط مثال ونشوف هل عملنا هاي الشغلات ؟
tcp port 80
Scope: port
Protocol : tcp
Direction : null
خلونا نشوف أمثلة توضيحية من نفس wireshark :
وممكن نشوف الـ Display Filter :
إذا بتلاحظ شيء في عنا == و ! شو هذول؟
هون شغلة مهمة بالتصفية يعتمد على logic يعني أنت بتكتب أمر التصفية خلينا نحكي إنه هو بقارن الأمر يلي كتببته بالحزم وإذا رجع true بعمل تصفية رجع false ما رح يرجع اشي و لقدام رح نشوف كيف بعطيك true and false طب تعال نعطي مثال خفيف :
اجيت كتبتله بالـ Filter :
ip.addr==192.168.1.22
هون شو طلبت منه؟ أنا حكتله جيبلي كل الحزم يلي تحتوي أو تساوي ip 192.168.1.22 فهو رح يبحث بالحزم كل حزمة بلاقي ال ip تبعها 192.168.1.22 رح يعرضلك ياها
طيب لو فش ولا حزمة فيها هذا ال ip مش رح يطلعلك حزممم لأنه فش. طيب شو ال logic يلي بتحكي عنه بقلك هو نفسه بطريقة الكتابة إنه بصير زي مقارنة لازم استخدم or ,&& و رح نسخدم المقارانات نفس نظام لغات البرمجة بزبط .
هي جدول بوضح عمليات المقارنة (Comparison Operators) المستخدمة بجميع أشكالها :
Logical Expressions
طيب إذا تلاحظ شغلة بالأمثلة ولا مثال مستخدمين فيه أحرف uppercase , ايوا بزبط يعني هو بعتمد بس ال lowercase .
رح تيجي تسأل سؤال طيب أنت بتحكي ممكن تكتب الأمر التصفية غلط طيب كيف بدي أعرف إنه غلط ؟ حلو wireshark و أنت بتكتب الأمر رح يتغير لون مكان الكتابة لما يكون صح رح يكون لون أخضر و لما يكون غلط رح يصير أحمر يعني وأنت بتكتب كتبت حرف غلط رح يصير لون أحمر عشان ينبهك هي صورة موضحة :
تمام الآن فهمنا المبدأ خلونا نبلش نكتب :
رح احط جداول كأمثلة هي واضحة إن شاء الله.
IP Filters
لما بدنا نصفي الحزم بناء على ip :
طبعًا أكيد عارف إنه:
طبعًا أكيد عارف إنه:
src == source / و / dst == destination
( خلينا نتخيلها ال src تعني " من " و dst تعني "إلى ")
و هي صورة بتوضح عملية التصفية اقرأ الجدول واقرأ وصف كل أمر تصفية :
مشاهدة المرفق 1572
لاحظ لما تكتب بدون تحديد الوجهة رح يطلعلك ال ip سواء كان src and dst بينما لما تحدد src مثلًا رح يطلعلك src الصورة موضحة .
أظن الآن الفكرة صارت واضحة بطريق كتاب التصفية فقط رح أعطيك الأمثلة المهمة.
و هي صورة بتوضح عملية التصفية اقرأ الجدول واقرأ وصف كل أمر تصفية :
مشاهدة المرفق 1572
لاحظ لما تكتب بدون تحديد الوجهة رح يطلعلك ال ip سواء كان src and dst بينما لما تحدد src مثلًا رح يطلعلك src الصورة موضحة .
أظن الآن الفكرة صارت واضحة بطريق كتاب التصفية فقط رح أعطيك الأمثلة المهمة.
TCP and UDP Filters
زي ما أنت شايف بالصورة رح يصفي ويعرضلي كل الحزم من tcp يلي port 80
Protocol Filters | HTTP and DNS
خلونا نشوف التطبيق :
و جدول آخر لل http code :
و رح نتكلم فيهم لما نمشي شوي بس عشان يكون الآن عندك صورة عامة وواضحة لطبيعة التصفية.
هيك الآن صار عندك فكرة حلوة عن كتابة أمر التصفية في wireshark تعالوا نحل أمثلة :
What is the number of packets with a “TTL value less than 10”?
تمام قبل ما نبلش حل خلينا نحكي شو هو TTL >
خلونا نتخيل سيناريو أنا بدي أنقل بيانات, هاي البيانات بدي أبعثها من A إلى B . الآن ممكن تمر البيانات بأكثر من راوتر الآن ممكن البيانات في طريقها إلى B تضيع و إذا ضاعت مش رح توصل لل B طيبب هي ضاعت صحح مشيت في مسار غلط هل من الصحيح تضل في الشبكة تايهة ؟؟؟ ( هذا مثال )
أكيد لاا عنا اشي اسمه TTL يلي هو (Time to live) ايوا وين موجود شفناه بي pacet detels في IPv4 صح تمام هو من اسمه Time بس هو كحقيقة مش time رح تحكيلي طيب وين المشكلة هي فكرة إنه يكون في وقت محدد للحزمة مثلًا دقيقة لو الحزمة ما وصلت خلال دقيقة معناته هي تاهت خلص تدمرر ححكيلك صح فكرة بس تعال نفرض فرضية ثانية إنه الحزمة ماشية صح بس جهاز B قاعد بستلم بيانات و الحزمة تاعتي بتستنى دوره طبعًا في وقت بمشي قاعد و الوقت هاذ بروح من عمر الحزمة يعني ممكن الحزمة تدمر و هي ماشية صححح .
طيب شو تكنين؟ التكنين خلينا نحكي إنه هو بحسب القفزات أو التنقل للحزمة يعني الحزمة هاي محدد الها تقفز 10 قفزات يعني بدي ياها توصل راوتر من A إلى B ومحدد TTL 10 ممكن أول اشي تروح من A إلى C لما توصل C هي قفزة شو بنعمل بنقص منها 1 رح تصير 9 رح تروح من c إلى m رح تقفز واحد رح تصير 8 لحد ما توصل B طيب لو قفزت أكثر من 10 معناته هي ماشية غلط فـ ندمرها .
خلونا نتخيل سيناريو أنا بدي أنقل بيانات, هاي البيانات بدي أبعثها من A إلى B . الآن ممكن تمر البيانات بأكثر من راوتر الآن ممكن البيانات في طريقها إلى B تضيع و إذا ضاعت مش رح توصل لل B طيبب هي ضاعت صحح مشيت في مسار غلط هل من الصحيح تضل في الشبكة تايهة ؟؟؟ ( هذا مثال )
أكيد لاا عنا اشي اسمه TTL يلي هو (Time to live) ايوا وين موجود شفناه بي pacet detels في IPv4 صح تمام هو من اسمه Time بس هو كحقيقة مش time رح تحكيلي طيب وين المشكلة هي فكرة إنه يكون في وقت محدد للحزمة مثلًا دقيقة لو الحزمة ما وصلت خلال دقيقة معناته هي تاهت خلص تدمرر ححكيلك صح فكرة بس تعال نفرض فرضية ثانية إنه الحزمة ماشية صح بس جهاز B قاعد بستلم بيانات و الحزمة تاعتي بتستنى دوره طبعًا في وقت بمشي قاعد و الوقت هاذ بروح من عمر الحزمة يعني ممكن الحزمة تدمر و هي ماشية صححح .
طيب شو تكنين؟ التكنين خلينا نحكي إنه هو بحسب القفزات أو التنقل للحزمة يعني الحزمة هاي محدد الها تقفز 10 قفزات يعني بدي ياها توصل راوتر من A إلى B ومحدد TTL 10 ممكن أول اشي تروح من A إلى C لما توصل C هي قفزة شو بنعمل بنقص منها 1 رح تصير 9 رح تروح من c إلى m رح تقفز واحد رح تصير 8 لحد ما توصل B طيب لو قفزت أكثر من 10 معناته هي ماشية غلط فـ ندمرها .
استخدام مصطلح قفزة للتبسيط
آسف على الشرح طويل عشان احنا شفناها و ما شرحناها و رح نشرح كل النقاط يلي نعرضت سابقًا :
طيب خلينا نحل السؤال
طيب خلينا نحل السؤال
المطلوب بده عدد الحزم الي مقادر TTL تبعها أقل من 10 تمام :
2- What is the number of “HTTP GET” requests sent to port “80”?
هو هون بده عدد الحزم يلي requests GET و مبعوثة لـ port 80 يعني ال port لل dst ==80 خلونا نشوف احنا بدنا نعمل دمج الآن بدنا نكتب أمر يجيب ال “HTTP GET” requests و dst port ==80 يعني شووو؟ يعني رح نعمل بينهم and or && خلونا نشوف كيف :
تمام أخذنا نظرة عامة على تصفية الحزم, طيب لو بدي أصفي الحزم بناء على تفاصيل رح تحكيلي كيف يعني ؟ يعني أنا بدك تعمل تصفية للحزم يلي فيها صفحة php أو يلي فيها سيرفر مثلًا أباتشي زي هيك تفاصيل .
Filter: “contains”
تمام هي عامل مقارنة أو تتضمن يعني أنا بعطيه معلومة وهو بقارنها أو بتأكد من وجودها في الحزمة و للعلم هي حساسة لحالة الأحرف يعني مثلًا بدنا نعطي مثال الآن بدنا نبحث عن الحزم يلي الخادم ( server) فيها “Apache” لازم اهتم بحالة الأحرف واكتبها بشكل صحيح .
> المطلوب نعمل تصفية لكل حزم http يلي server ==Apache
طيب رح تحكيلي على أي أساس هو ببحث ؟؟؟ تمام تتذكر packet detels ايوااا فيها تفاصيل بس تخيل أنت عندي آلاف ال packet بدك تمشي عليهم وحدة وحدة لحتى تشوف الحزم يلي فيها سيرفر Apache أكيد لاا طيب خلينا نشوف أصلًا معلومة السيرفر وين بتكون في بروتوكول http
يعني بعد الحكي هذا كله لما بدي أصفي حزم http بناء على السيرفر Apache يلي رح يصير إنه رح يمسك كلمة Apache ويروح على كل حزم http و يقارن بقيمة server الحزمة يلي تتساوى مع يلي أنا طالبه بعرضلي ياها هذا يلي بصير بالضبط. عشان هيك حالة الأحرف مهمة . خلونا نبحث عن " apache" يلا خلونا نستنج الأمر استنتاج بدناش نحفظ دنن .
شو البروتوكل يلي بدنا نبحث فيه ؟؟ http تمام هي 1
شو اسم المتغير يلي بدي ابحث فيه . يلي هو server ( حكيت متغير لإنه بحتفظ بقيمة و هي من حزمة لحزمة متغيرة ) هي حددنا الأشي الثاني
يعني هسا بدي أكتب:
http.server
هسا بدي استخدم يعني جيب حزم ال http و روح ع متغير server
contains خلينا نعتبره كـ function و بدي اعطيه parameter عشان يبحث يقارن في .
“parameter = " apache”
يعني طريقة الكتابة الكاملة هي :
http.server contains “Apache”
خلينا نشوف :
matches هي بتعمل نفس العملية بس بقدر أكتب parameter يكون complex رح تحكيلي كيف يعني؟ يعني نفس المثال بس بدي يعمل تصفية للحزم يلي فيها السيرفير Apache and Microsoft خلينا نشوف نكتبه:
http.server matches "Apache || Microsoft "
وبرضو لو بعثله جزء من نص يعني كتبتله عند parameter هيك "M: رح يروح ع متغير سيرفر و يشوف اي متغير فيه حرف M و يصفيه .
أظن الفكرة مفهومة و واضحة :
Filter: “in”
للبحث عن قيمة أو مجموعة داخل نطاق معين يعني بدي أجي أحكيلك اعرضلي كل الحزم يلي بتستخدم
potr = 80 ,443 or 8080 كيف رح تكتبها ؟؟؟
tcp.port == 80 or tcp.port == 443 or tcp.port == 8080
رح تكتبها هي هي صح بس مش حاس إنها طويل ؟؟
تمام in حكينا يا بتبحث عن قيمة أو مجموعة صح ؟ يعني بقدر أحطهم بجملة وحدة بسيطة صغيرة و رعطيني نفس الناتج:
tcp.port in {80 443 8080}
هذول الأكثر استخدام فعلي و يلي رح تحتاجهم تعالوا نحل أمثلة عليهم و نشوف عشان نقوي المفهوم :
1 -Find all Microsoft IIS servers. What is the number of packets that did not originate from “port 80”?
بده ياني أجيب كل الحزم يلي server = Microsoft-IIS و ما يكون port المصدر 80 يعني src port !=80 أوك يعني بده شغلتين خلينا نكتب الأمر :
http.server contains “Microsoft-IIS” and tcp.srcport !=80
2- Find all Microsoft IIS servers. What is the number of packets that have “version 7.5”?
بده كل server = Microsoft-IIS و يكون version 7.5 تمام السيرفر بنعرف نطلعه رح تيجي تحكيلي طيب ال version 7.5 كيف اطلعه طيب تعال نشوف وين موجود هو أصلًا . هو موجود في متغير server برضو حلو طيب شايف 6.0 هذا هو version
http.server contains “Microsoft-IIS” and http.server contains “7.5”
هون حكتله روح على متغير سيرفر و دورلي على “Microsoft-IIS” و يكون كمان فيها 7.5 يلي هو version طبعًا بتعرفو إنو and لازم يكون T and T =T
What is the number of “Bad TCP Checksum” packets?
هون هو بطلب مني عدد الحزم يلي فيها Checksum = bad
رح تسألني سؤال شو هو Checksum ؟ على فكرة احنا شفناه برضوو لو متذكر في Packet Details
في IPv4 تمام شو بتعمل ؟ يا سيدي شوف هسا مش احنا بنبعت بيانات ؟ تمام البيانات يلي بدي ابعتها هل أنت متأكد رح توصل الجهاز B صحيحة بدون تعديل أو تلف ؟؟
طيب رح تحكيلي ممكن و ممكن برضو يتم اعتراض هاي البيانات و هي في الشبكة ويتم تعديلها صح تمام ال Checksum لما ابعت بيانات بكون الها قيمة حلو لما تصول جهاز B بفحص هاي القيمة إذا كانت متطابقة نفس قيمة يلي عند المرسل A معناتو سليمة أما إذا محتلفة معناته هي تم تعديل عليها أو تلفت فقط.
طيب خلينا نشوف هي وين بس قبل ما نبلش بدك تعمل ملف التعريف روح ع edit و اختار Configuration Profile
رح يطلعلك خياترات اختار Checksum control و اضغط OK
الآن خلينا نشوف هي وين عشان نعرف كيف نكتب أمر التصفية

افتح صورة و بدي ياك تركز ع الأمور المهمة و هي بروتوكل الحزم ؟؟ و اسم المتغير يلي فيه النتيجة يلي بتهمني .
البروتوكول المستخدم tcp حلو لو تشوف الفرق بين الصورتين في صورة حاكيلك good
و صورة bad يعني الشرح يلي فوق و المعنى واضح هههه نرجع للسؤال تبعنا هو طالب ايش كل الحزم يلي فيها Checksum شو → bad
يلا شو بنحتاج البروتوكل و اسم المتغير اسم المتغير يلي فيه ( good or bad ) هو Checksum status يلا نكتب كونه عرفنا كل اشي عنه:
tcp.Checksum.status == bad
و هيك رح يعطيني كل الحزم يلي تحمل قيمة bad في متغير Checksum.status
و هون بنوقف انتظرو part (4) عشان نتعمق شوي في البروتوكلات .
يمكنك الإطلاع على الدروس الأول من هذه السلسلة من خلال الروابط التالية:
Wireshark: The Basics - part (1)
Wireshark: The Basics - part (2)
إن أحسنت فمن الله و إن اسأت فمن نفسي و الشيطان
و هون بنوقف انتظرو part (4) عشان نتعمق شوي في البروتوكلات .
يمكنك الإطلاع على الدروس الأول من هذه السلسلة من خلال الروابط التالية:
Wireshark: The Basics - part (1)
Wireshark: The Basics - part (2)
إن أحسنت فمن الله و إن اسأت فمن نفسي و الشيطان
التعديل الأخير بواسطة المشرف: