«اتّصال خادم تطبيق الأعمال يفشل بضع مرّات في الشهر. سجلّ التطبيق يقول فقط ‘timeout’. لا خطأ مطابق في سجلّ الخادم في ذلك الوقت. لا نعرف كيف نعيد الإنتاج» — في استشارات التحقيق في الأعطال يتكرّر هذا الشكل باستمرار.
سجلّ التطبيق يحتفظ فقط بما «قرّر التطبيق كتابته». ترى أنّ النتيجة مهلة، لكن هل طلب الاتصال (SYN) لم يلقَ ردًّا، أم أُنشئ الاتصال ثم صمت الخادم، أم قُطع بـ RST، أم وصلت الحزمة أصلًا إلى الوجهة — كلّ ذلك يعيش طبقة تحت السجلّ — في الحزم التي مرّت فعلًا على السلك. إن كان Process Monitor وسيلة النظر طبقة أسفل إلى ملفّات والسجلّ، فالتقاط الحزم وسيلة النظر طبقة أسفل إلى المحادثة.
flowchart TB
accTitle: الحزم طبقة تحت سجلّ التطبيق
accDescr: سجلّ التطبيق يحتفظ فقط بما قرّر التطبيق كتابته؛ هل SYN بلا ردّ، أم صمت النظير بعد الاتصال، أم قطع RST، أم وصول الحزمة يعيش فقط في الحزم التي مرّت فعلًا على السلك
log["سجلّ التطبيق"] --> dec["يبقى فقط ما تقرّر كتابته"]
dec --> to["النتيجة مهلة بكلمة واحدة"]
to -->|انظر طبقة أسفل| pkt["الحزم التي مرّت فعلًا على السلك"]
pkt --> q1["لا ردّ على SYN؟"]
pkt --> q2["صمت بعد الاتصال؟"]
pkt --> q3["قُطع بـ RST؟"]
pkt --> q4["هل وصلت إلى الوجهة؟"]
الشكل 1: السجلّ يحتفظ بالنتيجة فقط؛ تفكيك المهلة يعيش فقط في الحزم طبقة أسفل.
المكان النموذجي الذي يعلق فيه الناس هو قيد «لا نستطيع تثبيت Wireshark على خادم العميل». المواقع التي لا توافق فيها مراقبة التغيير أو سياسة الأمن على برمجيّات إضافيّة للتحقيق ليست نادرة. لكن Windows يشحن أصلًا أداتين لالتقاط الحزم: pktmon وnetsh trace. التقط بأدوات نظام التشغيل المضمَّنة، خذ الملفّ الناتج إلى حاسوبك، واقرأه في Wireshark — بهذا التقسيم تبقى الحزم مرئيّة في موقع يمنع التثبيت.
هذا المقال موجَّه لموظّفي تقنيّة المعلومات في الشركات الصغيرة والمتوسّطة ولمطوّري تطبيقات Windows. ينظّم كيفيّة الاختيار بين pktmon وnetsh trace وWireshark، والإجراء العملي لكلّ منها. فخاخ حركة الاسترجاع، وقرار الالتقاط على العميل أو الخادم، والتعايش مع TLS الذي يخفي الحمولة، وربط الالتقاط بسجلّ التطبيق — كلّها من مصادر أوّليّة محدَّثة حتى أغسطس 2026.
1. الخلاصة أوّلًا
- «التقاط بالأداة المضمَّنة، وقراءة بـ Wireshark» هو التقسيم الأساسي في الميدان. حتى إن تعذّر تثبيت برمجيّات على خادم العميل، pktmon وnetsh trace مضمَّنان في Windows. حوّل السجلّ الملتقَط إلى pcapng وحلّله في Wireshark على جهازك.12
- pktmon أداة التقاط الحزم المضمَّنة في Windows 10 / Windows Server 2019 وما بعد. تُستخدم في أربع خطوات — سجّل مرشّحًا، ابدأ، أوقف، حوّل — وقوّتها المميّزة رؤية أي مكوّن في رزمة الشبكة أسقط الحزمة (سبب الإسقاط).34
- netsh trace الأداة المضمَّنة الأقدم؛ تستطيع تفعيل حزمة مزوّدي ETW كـ«سيناريو». إضافة إلى الحزم تحتفظ بأحداث من داخل مكوّنات Windows، ومع persistent=yes يصمد الالتقاط عبر إعادة التشغيل.56
- الأداتان تكتبان ETL الذي لا يفتحه Wireshark كما هو. حوّل إلى pcapng بـ
pktmon etl2pcapلـ pktmon، وبـ etl2pcapng المفتوح المصدر من Microsoft لـ netsh trace.12 - مايكروسوفت نفسها تشير إلى «pktmon أوّلًا، ثم netsh trace إن لم يكفِ، وWireshark لتحليل البروتوكول». تقسيم هذا المقال يتبع تلك التوصية الرسميّة.7
- افتراضيًّا يسجّل pktmon أوّل 128 بايت فقط من كلّ حزمة. إن كنت تنوي قراءة الحمولة في Wireshark فلا تنسَ
--pkt-size 0(سجّل الحزمة كاملة) عند البدء.8 - حركة localhost لا تظهر في التقاط عادي. لا تمرّ عبر بطاقة شبكة. استخدم محوّل استرجاع Npcap في Wireshark، أو التقاط pktmon داخل الرزمة مع الأدوات المضمَّنة.9
- حتى عندما يخفي TLS الحمولة، لا يزال بالإمكان تعلّم الكثير. إنشاء الاتصال، نجاح مصافحة TLS، RST، وأي طرف صمت تبقى مرئيّة مع التشفير. فكّ التشفير عبر SSLKEYLOGFILE تقنيّة لبيئة التطوير فقط.10
- التقاط يحتوي التواصل نفسه. افترض أنّه قد يشمل بيانات اعتماد ومعلومات شخصيّة، وابنِ التقاطًا بالحدّ الأدنى وتضييقًا قبل التسليم في الإجراء.
2. أدوات الالتقاط الثلاث وكيفيّة الاختيار بينها
أوّلًا، جدول واحد لأدوار الأدوات الثلاث.
| pktmon | netsh trace | Wireshark | |
|---|---|---|---|
| كيف تحصل عليها | مضمَّنة في Windows 10 / Windows Server 2019 وما بعد3 | مضمَّنة في Windows منذ زمن (صالحة على أنظمة قبل pktmon) | يتطلّب تثبيتًا منفصلًا |
| الدور الرئيسي | التقاط الحزم، كشف الإسقاط، العدّادات | التقاط الحزم + أحداث ETW لمكوّنات Windows | تحليل البيانات الملتقَطة (الوجهة الحقيقيّة) |
| صيغة الإخراج | ETL (حوّل إلى pcapng بـ etl2pcap)1 | ETL+.cab (حوّل إلى pcapng بـ etl2pcapng)62 | pcapng |
| القوّة المميّزة | موقع الإسقاط وسببه داخل الرزمة4 | تجميع المزوّدين حسب السيناريو، التقاط عبر إعادة التشغيل5 | مرشّحات العرض، تحليل TCP، الإحصاءات، الواجهة |
| الصلاحيّات | مسؤول | مسؤول | مكافئ المسؤول للالتقاط (غير لازم للتحليل فقط) |
بجملة واحدة، pktmon وnetsh trace أداتا «الالتقاط»، وWireshark أداة «القراءة». يستطيع Wireshark الالتقاط أيضًا، لكنّك لا تستخدم ذلك حيث يتعذّر التثبيت. بالمقابل تستطيع تحويل ETL الأدوات المضمَّنة إلى نصّ وقراءته، لكن التحديق بلا مرشّح عرض ولا تحليل TCP شقاء. «التقاط في الميدان بالأداة المضمَّنة، تحويل إلى pcapng، وقراءة في Wireshark على جهازك» أقصر طريق في موقع مقيَّد.
flowchart TB
accTitle: التقاط بالأداة المضمَّنة وقراءة بـ Wireshark
accDescr: في الميدان تلتقط ETL بـ pktmon أو netsh trace، وتحوّل كلًّا إلى pcapng بأداة التحويل الخاصّة به، وتحلّل في Wireshark على جهازك
pk["pktmon(مضمَّن)"] --> etla["ملف ETL"]
ns["netsh trace(مضمَّن)"] --> etlb["ETL+.cab"]
etla -->|pktmon etl2pcap| pcap["pcapng"]
etlb -->|etl2pcapng| pcap
pcap --> ws["حلّل في Wireshark على جهازك"]
الشكل 2: في الميدان تلتقط ETL بالأدوات المضمَّنة، وتحوّل إلى pcapng، وتقرأ في Wireshark على جهازك.
دليل التحقيق في فقدان الحزم لدى Microsoft له الشكل نفسه: التقط واعزل السبب بـ pktmon أوّلًا، ثم انتقل إلى تتبّعات على مستوى المكوّن مثل netsh trace start scenario=InternetClient إن لم يكفِ، وحلّل سلوك البروتوكول في Wireshark.7
كمتطلّب مسبق لقراءة ما تُظهره الحزمة فعلًا، يفيد أيضًا تصوّر الطبقات المتراصّة — Ethernet وIP وTCP وبيانات التطبيق. تشريح الطبقات موضَّح في «فهم نموذج OSI حقًا».
3. pktmon عمليًّا — مرشّح، بدء، إيقاف، تحويل
تدفّق pktmon الأساسي أربع خطوات. نفّذها في طرفيّة مرتفعة الصلاحيّة.
:: 1. سجّل مرشّحاً أولاً لتضييق الهدف (TCP 8443 على الخادم 192.168.10.20)
pktmon filter add App8443 -i 192.168.10.20 -t tcp -p 8443
pktmon filter list
:: 2. ابدأ الالتقاط. سجّل الحزم كاملة، واكتب فوقها في مخزن حلقي 1 غيغابايت
pktmon start --capture --pkt-size 0 --file-name C:\temp\app-timeout.etl --file-size 1024 --log-mode circular
:: 3. أعد إنتاج الحادثة. أثناء الانتظار يمكن فحص الحجم والإسقاط عبر counters
pktmon counters --drop-reason
:: 4. أوقف، ثم حوّل إلى pcapng لـ Wireshark
pktmon stop
pktmon etl2pcap C:\temp\app-timeout.etl --out C:\temp\app-timeout.pcapng
:: 5. نظّف المرشّح المسجّل (المرشّحات تبقى حتى تُحذف صراحة).
:: ملاحظة: filter remove لا يقبل اسماً؛ يحذف «كل» المرشّحات المسجّلة.
:: على جهاز قد تبقى فيه مرشّحات تحقيق آخر، تحقق أولاً بـ pktmon filter list
pktmon filter remove
flowchart TB
accTitle: إجراء pktmon الأساسي
accDescr: ضيّق الهدف بمرشّح، ابدأ الالتقاط، أعد إنتاج الحادثة، أوقف، حوّل إلى pcapng بـ etl2pcap، وأخيرًا احذف المرشّح المسجَّل
fa["1. ضيّق الهدف بـ filter add"] --> st["2. ابدأ الالتقاط بـ start --capture"]
st --> re["3. أعد إنتاج الحادثة"]
re -.-> ct["افحص الحجم والإسقاط بالعدّادات"]
re --> sp["4. أوقف"]
sp --> cv["حوّل إلى pcapng بـ etl2pcap"]
cv --> rm["5. نظّف بـ filter remove"]
الشكل 3: يبدأ pktmon بتسجيل المرشّح، ثم الالتقاط والإيقاف والتحويل، وتحذف المرشّح صراحة في النهاية.
نقاط تُراعى:
- سجّل المرشّحات قبل بدء الالتقاط. وثائق Microsoft توصي بقوّة بتطبيق مرشّح قبل البدء، لأن التقاط كلّ الحركة صاخب جدًّا. المرشّحات تحدّد عنوان IP والمنفذ وعنوان MAC والبروتوكول ومعرّف VLAN وغيرها، ويمكن تسجيل حتى 32. المرشّحات المتعدّدة OR: تُسجَّل الحزمة إن طابقت أيًّا منها.3
- مرشّح pktmon لا يميّز المصدر عن الوجهة.
-i 192.168.10.20يعني «حزم يكون هذا العنوان مصدرها أو وجهتها». ضيّق الاتجاه لاحقًا بمرشّح عرض Wireshark بعد التحويل.3 - حجم الحزمة الافتراضي 128 بايت. يكفي لتحليل الترويسة، لكن إن أردت بيانات التطبيق أيضًا فسجّل الحزمة كاملة بـ
--pkt-size 0.8 - السجلّ افتراضيًّا وضع دائري (ذاكرة حلقيّة)، الحجم الافتراضي 512MB. تغيّر السقف بـ
--file-size، و--log-mode real-timeيطبع على الشاشة آنًا ولا ينشئ ملفّ سجلّ. أكّد أولًا في الوضع الآني أنّك ترى الحركة التي تهمّك، ثم اضبط التقاط الإنتاج، فتجنّب أخذًا فارغًا.8
flowchart TB
accTitle: كيف تسري مرشّحات pktmon
accDescr: المرشّحات المتعدّدة المسجَّلة تسجّل عند مطابقة OR، والعنوان المحدَّد لا يميّز المصدر عن الوجهة، ويُضيَّق الاتجاه لاحقًا بمرشّح عرض Wireshark بعد التحويل
f1["مرشّح 1"] --> orc["سجّل إن طابق أيّ"]
f2["مرشّح 2"] --> orc
f3["مرشّح 3(حتى 32)"] --> orc
orc --> rec["مُسجَّل في سجلّ الالتقاط(OR)"]
rec -.-> nodir["المصدر والوجهة غير مميَّزين"]
nodir -.-> ws["ضيّق الاتجاه في Wireshark بعد التحويل"]
الشكل 4: المرشّحات المتعدّدة تعمل كـ OR، وما إذا كان المضيف مصدرًا أو وجهة يُضيَّق في Wireshark بعد التحويل.
3.1. ما يستطيعه pktmon وحده — رؤية أين أُسقطت الحزمة
قيمة pktmon المميّزة مقابل Wireshark أنّه يلتقط الحزمة في نقاط متعدّدة داخل رزمة الشبكة، لا عند بطاقة واحدة، ويستطيع الإبلاغ أين ولماذا أُسقطت (drop). لأنّك ترى أي مكوّن بلغته الحزمة وأين اختفت، أسباب إسقاط مثل «عدم تطابق MTU» أو «مرشّح VLAN» توصلك إلى السبب دون بحث أعمى.4
flowchart TB
accTitle: pktmon يلتقط في نقاط متعدّدة داخل الرزمة
accDescr: pktmon يلتقط الحزمة في نقاط متعدّدة داخل رزمة الشبكة لا عند بطاقة واحدة، فيستطيع الإبلاغ بسبب أي مكوّن بلغته الحزمة وأين أُسقطت
pin["حزمة"] --> p1["التقاط عند النقطة 1"]
p1 --> p2["التقاط عند النقطة 2"]
p2 --> p3["إسقاط عند النقطة 3"]
p3 -.-> rz["يبلّغ موقع الإسقاط وسببه"]
rz -.-> ex["مثل عدم تطابق MTU أو مرشّح VLAN"]
الشكل 5: الالتقاط في نقاط متعدّدة داخل الرزمة يخبرك إلى أي مدى وصلت الحزمة وأين أُسقطت، مع سبب.
pktmon listيعرض مكوّنات الشبكة القابلة للمراقبة (بطاقات، رزم بروتوكول، برامج تشغيل مرشّحة، وغيرها) ومعرّفاتها.pktmon counters --drop-reasonيسرد عدّادات المرور/الإسقاط لكلّ مكوّن وأحدث سبب إسقاط. ملائم كقطع أوّل قبل تحليل السجلّ.11- حوّل إلى نصّ بـ
pktmon etl2txtفتخرج الحزم المُسقَطة بـdropوdropReason.3
الشبهة أنّ «شيئًا في نظام التشغيل يُسقط هذا قبل أن يصل إلى التطبيق» لا تُحسَم بالتحديق في Wireshark وحده. هذه القدرة تساعد مثلًا عند عزل حالة يُسقط فيها جدار الحماية لأنّ قاعدة واردة ناقصة («جدار حماية Windows وتطبيقات الأعمال»).
تحذير واحد. pktmon يسجّل الحزمة نفسها في نقاط متعدّدة في الرزمة، فالتحويل كما هو إلى pcapng قد يجعل الحزمة نفسها تظهر أكثر من مرّة. pcapng لا يحمل «أي مكوّن التقط هذا»، فإن كنت تقرأ في Wireshark الحركة القياسيّة التحويل بـ --component-id لاختيار نقطة واحدة (أو وضع الإسقاطات وحدها في ملفّ منفصل بـ --drop-only).1
flowchart TB
accTitle: لماذا قد تظهر الحزمة نفسها مرّتين بعد التحويل إلى pcapng
accDescr: pktmon يسجّل الحزمة نفسها في نقاط متعدّدة في الرزمة، وpcapng لا يحتفظ بأي مكوّن التقطها فتظهر مكرّرات، والحركة القياسيّة التحويل بعد تضييق النقطة بـ component-id أو وضع الإسقاطات وحدها في ملفّ drop-only
same["الحزمة نفسها مسجَّلة في نقاط متعدّدة"] --> conv["حوّل إلى pcapng كما هو"]
conv --> lost["معلومات نقطة الالتقاط لا تُنقَل"]
lost --> dup["الحزمة نفسها تظهر أكثر من مرّة"]
dup --> c1["ضيّق النقطة بـ --component-id"]
dup --> c2["ملفّ منفصل بـ --drop-only"]
الشكل 6: معلومات نقطة الالتقاط لا تُنقَل إلى pcapng، فالحركة القياسيّة تضييق النقطة قبل التحويل.
4. netsh trace عمليًّا — سيناريوهات وETL والتقاطات تصمد عبر إعادة التشغيل
netsh trace آليّة التتبّع الموجودة في Windows أطول من pktmon. ميزتها أنّها كـ«سيناريو» تستطيع تفعيل مجموعة مزوّدي ETW المتعلّقة بتلك المشكلة دفعة واحدة.6
:: List available scenarios and inspect the providers in a scenario
netsh trace show scenarios
netsh trace show scenario netconnection
:: Start the capture. Packet capture included, 1GB circular buffer
netsh trace start scenario=netconnection capture=yes tracefile=C:\temp\nettrace.etl maxSize=1024 filemode=circular
:: Reproduce the incident, then stop (the merge takes a little time)
netsh trace stop
- أضف
capture=yesلتفعيل التقاط الحزم، وضيّق الهدف بمرشّح التقاط مثلipv4.address=192.168.10.20. قائمة المرشّحات فيnetsh trace show capturefilterHelp.6 - الإيقاف ينتج ملفّ .cab إضافة إلى ETL. الـ .cab يحمل معلومات نظام مثل إعداد المحوّل وبناء نظام التشغيل، فيضاعف كجمع بيئة.6
- جلسة تتبّع واحدة فقط يمكن أن تعمل في الوقت نفسه. قبل بدء التقاط آخر، افحص بـ
netsh trace show statusأنّ لا جلسة متبقّية ما زالت تعمل.6 - أضف
persistent=yesوتصمد الجلسة عبر إعادة التشغيل. التقاط «الاتّصال يفشل لحظة بعد إعادة التشغيل» أو «اتّصال الخدمة عند الإقلاع يفشل» — حوادث لا تلحق بدءها يدويًّا — أرض netsh trace الفريدة.5
flowchart TB
accTitle: التقاط سيناريو netsh trace
accDescr: البدء بسيناريو يفعّل مجموعة مزوّدي ETW، وcapture=yes يلتقط الحزم أيضًا، والإيقاف ينتج ملف ETL وملف .cab
sc["ابدأ بسيناريو"] --> pv["فعّل مجموعة المزوّدين"]
sc -->|capture=yes| pc["تُلتقَط الحزم أيضًا"]
pv --> re["أعد إنتاج الحادثة"]
pc --> re
re --> sp["أوقف"]
sp --> etl["ملف ETL"]
sp --> cab[".cab(معلومات النظام)"]
الشكل 7: البدء بسيناريو يفعّل مجموعة مزوّدين، والإيقاف ينتج ETL و.cab.
4.1. جعل ETL مقروءًا في Wireshark — etl2pcapng
ETL الخاصّ بـ netsh trace لا يُفتح في Wireshark كما هو. etl2pcapng، الأداة مفتوحة المصدر التي تنشرها Microsoft على GitHub، تحوّل الحزم داخل ETL ملتقَط بـ netsh trace start capture=yes إلى pcapng.2
etl2pcapng.exe C:\temp\nettrace.etl C:\temp\nettrace.pcapng
عند التحويل يكتب etl2pcapng معرّف العمليّة المرتبط بكلّ حزمة كتعليق حزمة. القدرة على رؤية «حركة أي عمليّة هذه» في Wireshark تساعد عندما تتحدّث عدّة تطبيقات على الخادم نفسه.2
جانب أحداث ETW (أحداث داخليّة في Windows سجّلتها مزوّدات السيناريو) لا يُحوَّل إلى pcapng. إن أردت الأحداث أيضًا فحوّل إلى نصّ أو ما شابه بـ netsh trace convert input=C:\temp\nettrace.etl، أو افتح ETL في Windows Performance Analyzer.57
flowchart TB
accTitle: قراءة ETL لـ netsh trace تنقسم إلى مسارين
accDescr: الحزم داخل ETL تُحوَّل إلى pcapng بـ etl2pcapng وتُقرأ في Wireshark؛ أحداث ETW لا تُحوَّل إلى pcapng فتقرأها بـ netsh trace convert أو Windows Performance Analyzer
etl["ETL لـ netsh trace"] --> pk["حزم"]
etl --> ev["أحداث ETW"]
pk -->|etl2pcapng| pc["حوّل إلى pcapng"]
pc --> ws["اقرأ في Wireshark"]
pc -.-> pid["معرّف العمليّة يبقى تعليقًا"]
ev -.-> no["لا يُحوَّل إلى pcapng"]
no --> alt["اقرأ بـ convert أو WPA"]
الشكل 8: من ETL تُحوَّل الحزم إلى pcapng للقراءة؛ أحداث ETW تُقرأ بوسيلة أخرى.
5. نظرة أولى على القراءة في Wireshark — مرشّحات العرض وتحليل TCP
بعد فتح pcapng، اقطع الضوضاء أوّلًا بمرشّح عرض. الشائعة في الجدول.1213
| مرشّح العرض | المعنى |
|---|---|
ip.addr == 192.168.10.20 |
حزم يكون هذا الـ IP مصدرها أو وجهتها |
tcp.port == 8443 |
حزم تتضمّن منفذ TCP هذا |
dns |
استعلامات DNS وردودها فقط |
tcp.flags.syn == 1 && tcp.flags.ack == 0 |
SYN الاتّصال فقط |
tcp.flags.reset == 1 |
RST (قطع قسري) فقط |
tcp.analysis.retransmission |
حزم حكم عليها Wireshark بأنّها إعادة إرسال |
tcp.analysis.zero_window |
نافذة الاستقبال 0 (المستقبل لا يستطيع أخذ المزيد) |
tcp.analysis.flags |
كلّ حزمة اكتُشف فيها شكل من المشكلة |
tcp.analysis.* أعلام تحليل يعيّنها Wireshark بتتبّع أرقام تسلسل TCP. إعادة الإرسال وACK المكرّر وخارج الترتيب وZeroWindow وما شابه تُلتقَط آليًّا، فـالطريقة القياسيّة لبدء القراءة كتابة tcp.analysis.flags أوّلًا وسرد مواضع «يبدو أنّها مشكلة».13
في تحقيق المهلة ابحث عن الأشكال التالية بالترتيب.
- هل اكتملت المصافحة الثلاثيّة؟ هل الحزم الثلاث SYN → SYN/ACK → ACK كلّها موجودة؟ إن تكرّر SYN بلا ردّ فلم يصل إلى النظير، أو أُسقط صامتًا في الوسط (نمط جدار الحماية النموذجي).
- أي طرف أرسل RST؟ RST فوري لـ SYN يعني لا أحد يستمع على منفذ الوجهة؛ RST بعد إنشاء الاتّصال يعني أنّ طرفًا قطع الاتّصال قسرًا. عنوان IP مصدر RST دليل مباشر على «من قطع».
- هل تستمرّ إعادة الإرسال؟ إعادة إرسال متكرّرة للقطعة نفسها علامة أنّ الإقرار (ACK) لا يعود إلى المرسل. هل فُقدت البيانات الصادرة أم فُقد ACK العائد لا يُحسَم من التقاط أحادي الجانب (لذلك يهمّ «التقاط على الجانبين» في الفصل التالي). إعادة الإرسال والمهل مشروحة بعمق أكبر في «حين تتوقّف حركة TCP للكاميرا الصناعيّة لعدّة ثوانٍ».
- هل ZeroWindow حاضر؟ تلك علامة أنّ تطبيق الاستقبال لا يقرأ من المقبس وأنّ ذاكرة الاستقبال ممتلئة. مبرّر للاشتباه في تصميم تطبيق الاستقبال («المفهوم الخاطئ بأنّ الاستقبال يتطابق مع وحدة الإرسال في TCP») لا في الشبكة.
flowchart TB
accTitle: ترتيب الأشكال للبحث عنها في تحقيق المهلة
accDescr: أكّد اكتمال المصافحة الثلاثيّة، وجود RST ومصدره، استمرار إعادة الإرسال، ثم ZeroWindow، لتضع علامة أولى على السبب
hs{"هل لقي SYN ردًّا؟"} -->|لا| ng["لم يصل أبدًا(جدار حماية نموذجي)"]
hs -->|نعم| rs{"هل RST حاضر؟"}
rs -->|نعم| who["مصدر RST قطعه"]
rs -->|لا| rt{"هل تستمرّ إعادة الإرسال؟"}
rt -->|نعم| ack["ACK لا يعود"]
rt -->|لا| zw{"هل ZeroWindow حاضر؟"}
zw -->|نعم| app["المستقبل لا يقرأ"]
الشكل 9: البحث عن المصافحة ثم RST ثم إعادة الإرسال ثم ZeroWindow بهذا الترتيب يضيّق أين تنظر تاليًا.
قبل قراءة الحزم واحدة فواحدة يفيد أيضًا استيعاب الصورة كاملة بميزات الإحصاءات. [Statistics] → [Conversations] قائمة «أي زوج IP / زوج منافذ تحدّث، من متى إلى متى، وبكم»، فتعرّف المحادثة التي تهمّك ثم ترشّح إلى تلك المحادثة فقط. [Statistics] → [I/O Graph] رسم حجم عبر الزمن؛ أشكال مثل «من هذا الوقت صمت اتجاه واحد» تقفز. انقر يمينًا محادثة TCP المعنيّة واختر [Follow] → [TCP Stream] فتقرأ تبادل ذلك الاتّصال كنصّ واضح.
flowchart TB
accTitle: استوعب الصورة بالإحصاءات ثم ضيّق إلى محادثة
accDescr: اسرد أي محادثات تحدّثت متى وبكم في Conversations، التقط فترة الصمت من I/O Graph، رشّح إلى المحادثة المعنيّة، واقرأها كتدفّق TCP
ov["استوعب الصورة كاملة بالإحصاءات"] --> cv["قائمة المحادثات في Conversations"]
ov --> io["انظر الحجم على I/O Graph"]
cv --> flt["رشّح إلى المحادثة المعنيّة"]
io -.-> mute["فترة الصمت تصبح مرئيّة"]
flt --> fs["اقرأ كتدفّق TCP"]
الشكل 10: قبل قراءة الحزمة تلو الحزمة استوعب الصورة بالإحصاءات، ضيّق إلى المحادثة المعنيّة، ثم اقرأها.
6. فخّ الاسترجاع — حركة localhost لا تمرّ عبر بطاقة شبكة
محاولة التحقيق في اتّصال بين تطبيقات على الحاسوب نفسه — مثل تطبيق أعمال يتّصل بخدمة وسيطة على localhost:8080 — والتعثّر عند «لا شيء يظهر في Wireshark» فخّ كلاسيكي.
السبب واضح. حركة localhost (127.0.0.1) لا تمرّ أبدًا عبر بطاقة شبكة مادّيّة؛ تُدار على مسار الاسترجاع الداخلي في نظام التشغيل. الالتقاط العادي الذي يستهدف محوّلًا مادّيًّا لذلك لا يراها.9
flowchart TB
accTitle: لماذا لا تظهر حركة localhost في التقاط
accDescr: حركة localhost لا تمرّ عبر بطاقة مادّيّة وتُدار على مسار الاسترجاع الداخلي في نظام التشغيل، فلا تظهر أبدًا في التقاط عادي يستهدف محوّلًا مادّيًّا
app["تطبيق"] --> stack["رزمة الشبكة"]
stack -->|خارجي| nic["بطاقة مادّيّة"]
nic --> seen["مرئي في التقاط عادي"]
stack -->|localhost| lo["يُدار داخل نظام التشغيل"]
lo -.-> miss["ليس في التقاط عادي"]
lo -.-> alt["استرجاع Npcap أو pktmon"]
الشكل 11: حركة localhost تُدار قبل البطاقة، فالتقاط المحوّل المادّي لا يراها أبدًا.
هناك طريقتان للتعامل.
- عند الالتقاط في Wireshark: اختر «Adapter for loopback traffic capture» من Npcap كهدف الالتقاط. مثبّت Windows لـ Wireshark (3.0 وما بعد) يضمّ Npcap، فإن كان Wireshark مثبّتًا أصلًا تستخدمه بلا عمل إضافي.9
- عند الالتقاط بالأدوات المضمَّنة: pktmon يلتقط في نقاط متعدّدة داخل رزمة الشبكة لا خارج البطاقة4، فيستطيع مراقبة حركة الاسترجاع أيضًا. للتأكّد، قبل ضبط انتظار إعادة الإنتاج في الإنتاج، أكّد على ذلك الجهاز بـ
pktmon start -c -m real-timeعرضًا آنيًّا أنّ حركة الاسترجاع التي تهمّك مرئيّة فعلًا.
راقب خلطين أيضًا.
- «localhost» قد يُحلَّ إلى IPv6 ::1. التطبيق يتّصل بـ IPv6 ::1، والمحقّق ينظر فقط إلى 127.0.0.1 (IPv4) ويستنتج خطأ «لا حركة». مدّ مرشّح العرض عبر الاثنين، كما في
ip.addr == 127.0.0.1 || ipv6.addr == ::1، أو اجعل إعداد وجهة التطبيق عنوانًا صريحًا.9 - الحركة إلى عنوان IP الحقيقي لجهازك لا تخرج إلى السلك أيضًا. عندما يتّصل الحاسوب نفسه من 192.168.10.5 إلى 192.168.10.5، الوجهة عنوان حقيقي لكن نظام التشغيل ما زال يديرها داخليًّا. تذكّر أنّ «حدّدت عنوانًا حقيقيًّا، فلا بدّ أن تمرّ عبر البطاقة» غير مضمون.
flowchart TB
accTitle: الخلط عندما يُحلَّ localhost إلى IPv6
accDescr: قد يُحلَّ localhost التطبيق إلى IPv6 ::1، وإن نظر المحقّق فقط إلى 127.0.0.1 يستنتج خطأ أنّ لا حركة، فمدّ مرشّح العرض عبر العنوانين أو أكّد الوجهة كعنوان صريح
app["التطبيق يتّصل بـ localhost"] --> v6["يُحلَّ فعلًا إلى ::1(IPv6)"]
look["المحقّق ينظر فقط إلى 127.0.0.1"] --> none["لا شيء يظهر على الشاشة"]
v6 --> none
none --> fix1["مدّ المرشّح عبر العنوانين"]
none --> fix2["اجعل الوجهة عنوانًا صريحًا"]
الشكل 12: راقب الخلط حيث يُحلَّ localhost إلى ::1 والنظر فقط إلى 127.0.0.1 يؤدّي إلى «لا حركة».
7. أين تلتقط — جانب واحد، جانبان، ومزامنة الساعة
قيمة التقاط تُحسَم بـ«أين التقطت». القاعدة التقريبيّة كالتالي.
| موقع الالتقاط | ما تتعلّمه | متى يناسب |
|---|---|---|
| جانب العميل فقط | ما أرسلت وما عاد | أوّلًا لصورة عامّة. عندما لا تستطيع لمس الخادم |
| جانب الخادم فقط | هل وصل الطلب وهل أُرسل ردّ | عندما يكثر العملاء، أو لا تستطيع تحديد واحد |
| الجانبان معًا | أين على المسار اختفت حزمة، أي طرف صمت | عندما تحتاج حسم حدود المسؤوليّة |
التقاط أحادي الجانب يخبرك فقط «الحقائق كما تُرى من موقعي». إعادة إرسال مستمرّة على العميل لا تميّز إن اختفت الحزمة المُرسَلة على المسار، أم وصلت إلى الخادم واختفى الردّ. التقط على الجانبين واصطفّهما، فتحسم «العميل أرسل / الخادم لم يستلم» — أي طرف صمت. عندما تحتاج حسم حدود المسؤوليّة (التطبيق، نظام التشغيل، جهاز شبكة، أو الطرف الآخر)، يستحقّ تجهيز التقاط الجانبين من البداية.
flowchart TB
accTitle: ما يخبرك به التقاط أحادي الجانب والتقاط الجانبين
accDescr: التقاط أحادي الجانب لا يميّز إن اختفت الحزمة الصادرة أم اختفى الردّ العائد؛ الالتقاط على الجانبين واصطفافهما يحسم أي طرف صمت
one["التقاط على جانب واحد"] --> fact["حقائق من جانبك"]
fact --> und["صادر أم عائد؟"]
both["التقاط على الجانبين"] --> mt["اصطفّهما"]
mt --> fix["أي طرف صمت"]
mt -.-> pre["تحتاج مزامنة الساعة"]
الشكل 13: جانب واحد يظهر فقط الحقائق التي رأيتها؛ اصطفاف الجانبين هو ما يحسم أوّلًا حدود المسؤوليّة.
7.1. مقدّمة الربط هي مزامنة الساعة
لاصطفاف التقاطات الجانبين يجب أن تتّفق ساعتا الجهازين. قبل بدء الالتقاط افحص وسجّل إزاحة الساعة.
:: Check time-sync status (sync source, last sync time)
w32tm /query /status
:: Measure the offset against the peer server (5 samples)
w32tm /stripchart /computer:sv-app01 /dataonly /samples:5
w32tm /stripchart الأمر الذي يعرض إزاحة الوقت بينك وبين الحاسوب النظير، ويصبح سند تصحيح مثل «ساعة الخادم كانت +0.8 ثانية» عند اصطفاف الالتقاطات.14 في بيئة ذات إزاحة كبيرة، إصلاح مزامنة الوقت أوّلًا ثم الالتقاط أقصر طريق في النهاية.
flowchart TB
accTitle: إجراء فحص إزاحة الساعة قبل الربط
accDescr: أكّد حالة مزامنة وقتك بـ w32tm، قس وسجّل الإزاحة مقابل الخادم النظير بـ stripchart، استخدم تلك الإزاحة سندًا للتصحيح عند اصطفاف الالتقاطات، وإن كانت الإزاحة كبيرة أصلح المزامنة أوّلًا ثم التقط
st["افحص حالة المزامنة بـ query"] --> mc["قس الإزاحة بـ stripchart"]
mc --> rc["سجّل الإزاحة"]
rc --> use["سند التصحيح عند الربط"]
mc -.-> big["إن كانت الإزاحة كبيرة أصلح المزامنة أوّلًا"]
الشكل 14: قس وسجّل إزاحة الساعة قبل الالتقاط، واستخدمها سندًا للتصحيح عند اصطفاف الالتقاطات.
7.2. لـ«لا نعرف متى سيحدث» — ذاكرة حلقيّة
لحادثة شروط إعادة إنتاجها مجهولة، الحركة الأساسيّة ترك ذاكرة حلقيّة تعمل وإيقافها عند وقوع الحادثة.
- pktmon: الافتراضي وضع دائري. اضبط السقف (MB) بـ
--file-size؛ الحزم الأقدم تُكتَب فوقها.8 - netsh trace: حدّده كـ
maxSize=1024 filemode=circular.5 - Wireshark: تحت [Capture] → [Options] → [Output] تستطيع ضبط «ملفّات متعدّدة + ذاكرة حلقيّة». تدور حسب حجم الملفّ أو الزمن وتحتفظ بأحدث N ملفّات فقط، فتعمل طويلًا بسقف استخدام قرص.15
في كلّ حالة شارك مع الشخص في الميدان القاعدة أنّ عند وقوع الحادثة «سجّل الوقت أوّلًا ثم» أوقف الالتقاط. الذاكرة الحلقيّة تمحو الماضي كلّما طال الانتظار، فإن طال المسار من الوقوع إلى الإيقاف تُكتَب فوق الفترة التي تهمّك.
flowchart TB
accTitle: الانتظار بالتقاط ذاكرة حلقيّة
accDescr: لحادثة شروط إعادة إنتاجها مجهولة اترك ذاكرة حلقيّة تعمل، وعند وقوع الحادثة سجّل الوقت وأوقف سريعًا؛ إن أوقفت متأخّرًا تُكتَب فوق الحزم الأقدم وتختفي الفترة التي تهمّك
st["ابدأ التقاط ذاكرة حلقيّة"] --> wt["اتركه يعمل وانتظر"]
wt --> ev["تقع الحادثة"]
ev --> memo["سجّل الوقت"]
memo --> sp["أوقف سريعًا"]
wt -.-> ow["الحزم الأقدم تُكتَب فوقها"]
ow -.-> late["إيقاف متأخّر يمحو الفترة التي تهمّك"]
الشكل 15: الذاكرة الحلقيّة تمحو الماضي كلّما طال الانتظار، فبعد تسجيل الوقت أوقف سريعًا.
8. مشكلة أنّ TLS يخفي الحمولة — ما يزال بإمكانك رؤيته
معظم حركة الأعمال اليوم TLS (HTTPS). يميل الناس إلى التفكير «إن كان مشفّرًا فالالتقاط بلا جدوى»، لكن معظم ما تريده في تحقيق المهلة ما يزال مرئيًّا مع بقاء التشفير.
- هل أُنشئ اتّصال TCP (المصافحة الثلاثيّة)
- إلى أي مدى وصلت مصافحة TLS — هل عاد ServerHello إلى ClientHello، هل قُطع بـ RST أو تنبيه أثناء المصافحة
- اسم المضيف الوجهة في ClientHello (SNI)، وإصدار TLS المتفاوض عليه
- بعد قيام الاتّصال، أي طرف توقّف عن الإرسال. موقع الصمت، إعادة الإرسال، RST، أو إغلاق نظيف (FIN)
بعبارة أخرى، عزل «لا يتّصل» و«يسقط في الوسط» و«لا يعود ردّ» نادرًا ما يحتاج فكّ تشفير الحمولة. ما يفقده التشفير هو «ماذا قالوا»؛ «من صمت، ومتى» يبقى.
flowchart TB
accTitle: ما يستطيع التقاط TLS إظهاره وما لا يستطيع
accDescr: التشفير يخفي فقط حمولة بيانات التطبيق؛ إنشاء اتّصال TCP، نجاح مصافحة TLS أو فشلها، SNI وإصدار TLS، RST، وأي طرف صمت تبقى مرئيّة مع بقاء التشفير
tls["التقاط حركة TLS"] --> vis["مرئي"]
tls --> hid["غير مرئي"]
vis --> v1["إعداد اتّصال TCP"]
vis --> v2["نتيجة TLS وSNI"]
vis --> v3["RST / من صمت"]
hid --> h1["حمولة بيانات التطبيق"]
الشكل 16: التشفير يفقد الحمولة فقط؛ هيكل المحادثة ما يزال مقروءًا مع بقاء TLS.
عندما ما تزال تحتاج الحمولة، يستطيع Wireshark فكّ تشفير TLS بمفاتيح جلسة تُكتَب عبر متغيّر البيئة SSLKEYLOGFILE. الدعم محدود ببعض التنفيذات مثل Firefox وChrome وEdge المعتمد على Chromium ومكتبات عائلة OpenSSL؛ SChannel المضمَّن في Windows (تطبيقات تستخدم WinHTTP أو WinINET) لا يدعم هذه الآليّة.10 لأنّ «مفتاح الجلسة يُكتَب في ملفّ» يعني أنّ من يملك ذلك الملفّ يستطيع فكّ تشفير المحادثة كاملة، هذه ليست تقنيّة إنتاج؛ عاملها إعادة إنتاج وتصحيحًا في بيئة تطوير.
flowchart TB
accTitle: كيف يعمل فكّ التشفير بـ SSLKEYLOGFILE وحدوده
accDescr: مفاتيح الجلسة المكتوبة عبر SSLKEYLOGFILE تمكّن Wireshark من فكّ تشفير TLS، لكن بعض التنفيذات فقط مثل Firefox وعائلة Chrome تدعمه وSChannel لا يدعمه؛ من يملك ملفّ المفتاح يستطيع فكّ تشفير المحادثة، فعاملها تقنيّة لبيئة التطوير فقط
env["اضبط SSLKEYLOGFILE"] --> key["اكتب مفاتيح الجلسة"]
key --> ws["اقرأ في Wireshark"]
key -.-> risk["حامل المفتاح يستطيع فكّ التشفير"]
risk -.-> dev["تطوير فقط"]
env -.-> sup["بعض رزم TLS فقط"]
sup -.-> sch["SChannel: بلا دعم"]
الشكل 17: كتابة مفاتيح الجلسة تستطيع فكّ التشفير، لكن التنفيذات المدعومة محدودة، وطبيعة المفتاح تجعلها تقنيّة لبيئة التطوير فقط.
عندما تمرّ الحركة عبر وكيل داخلي، الوجهة التي تظهر في التقاط هي خادم الوكيل، وTLS يسري داخل نفق CONNECT. السؤال السابق أي وكيل يتّجه إليه التطبيق أصلًا منظَّم في المقال المرافق في اليوم نفسه «الوكلاء المؤسسيّون وتطبيقات Windows — ترتيب حلّ الوكيل في WinINET وWinHTTP و.NET».
9. الربط بسجلّ التطبيق — وضع الوقت على المحور نفسه
التقاط وحده نادرًا ما ينتج الخلاصة. الحركة الحاسمة عمليًّا وضع سطر واحد من سجلّ التطبيق وجولة واحدة من الحزم على المحور الزمني نفسه.
الإجراء يبدو هكذا.
- حدّد وقت الحادثة من سجلّ التطبيق (مثلًا استثناء مهلة عند 10:23:41). إن كانت قيمة المهلة 30 ثانية فينبغي أن يكون البدء حوالي 10:23:11.
- بدّل عرض الوقت في Wireshark إلى [View] → [Time Display Format] → [Date and Time of Day]، وضيّق الفترة بمرشّح عرض (تستطيع أيضًا الترشيح بالوقت، كما في
frame.time >= "2026-08-20 10:23:00" && frame.time <= "2026-08-20 10:24:00"). - في تلك الفترة أكّد ترتيب الفصل 5 (مصافحة → RST → إعادة إرسال → ZeroWindow). إن استطعت الاصطفاف حتى «قبل 30 ثانية من وقت المهلة في السجلّ أُرسل SYN، وبعد ذلك إعادة إرسال SYN فقط»، تُستبدل «timeout» السجلّ بالملاحظة «عند نقطة الالتقاط هذه لم يعد أي ردّ أصلًا» (هل لم يصل SYN إلى النظير، أم فُقد SYN/ACK العائد في طريق العودة، لا يُحسَم من نقطة الالتقاط هذه وحدها. إن احتجت الحسم فالتقط على الخادم واصطفّهما).
- صحّح دائمًا الإزاحة بين وقت الالتقاط ووقت السجلّ (إزاحة الساعة التي قستها في القسم 7.1، وترميز المنطقة الزمنيّة في السجلّ). خطأ ربط بضع ثوانٍ سيُثبّت المحادثة الخطأ كمتّهم.
flowchart TB
accTitle: إجراء اصطفاف سجلّ التطبيق والحزم
accDescr: حدّد وقت الحادثة من سجلّ التطبيق، اعمل وقت البدء عكسيًّا من قيمة المهلة، ضيّق الفترة في Wireshark بمرشّح عرض، أكّد الأشكال بالترتيب، صحّح إزاحة الساعة، وضعهما على المحور الزمني نفسه
lg["1. حدّد وقت الحادثة من السجلّ"] --> rev["اعمل البدء عكسيًّا من قيمة المهلة"]
rev --> flt["2. ضيّق الفترة بمرشّح عرض"]
flt --> chk["3. أكّد الأشكال بترتيب الفصل 5"]
chk --> adj["4. صحّح إزاحة الساعة"]
adj --> done["كلمة السجلّ الواحدة تصبح ملاحظة"]
الشكل 18: ضيّق الفترة من وقت السجلّ، أكّد الشكل، صحّح إزاحة الساعة، وضعهما على المحور نفسه.
عندما تسلّم نتائج التحقيق لطرف ثالث (مورّد، ناقل، موظّفو شبكة العميل)، قطع الضوضاء بمرشّح قبل التسليم مجاملة وإجراء سلامة. في Wireshark ضيّق إلى المحادثة المعنيّة بمرشّح عرض واحفظ «الحزم المعروضة فقط» بـ [File] → [Export Specified Packets]، فتحصل على pcapng صغير للنطاق الذي تحتاجه فقط.
أخيرًا، تحذير معاملة. ملف التقاط يحتوي التواصل نفسه. قد يشمل بيانات اعتماد لبروتوكولات نصّ واضح، وكعكات HTTP ومفاتيح API، ومحتوى بريد أو تقارير، ومعلومات شخصيّة. قرّر النقاط الثلاث التالية كمجموعة مع إجراء الالتقاط.
- التقاط بالحدّ الأدنى: ضيّق الهدف بمرشّحات ما قبل الالتقاط (الفصلان 3 و4) واجعل النافذة الزمنيّة أقصر ما يمكن. لا تفعل «التقط كلّ شيء فحسب» في بيئة عميل
- ضيّق قبل التسليم: صدّر محادثة الهدف فقط؛ لا تضمّن حركة طرف ثالث غير ذات صلة. إن بقيت أجزاء حسّاسة فاتّفق مع المستلم على حجب أو وسيلة أخرى
- الاحتفاظ والحذف: قرّر أين تُحفَظ ملفات الالتقاط، ولأي مدّة، ومتى تُحذَف، واحذفها عند انتهاء التحقيق
flowchart TB
accTitle: ثلاثة قرارات قبل تسليم ملف التقاط
accDescr: التقاط يحتوي التواصل نفسه، فقرّر كمجموعة مع إجراء الالتقاط أن تضيّق إلى الحدّ الأدنى بمرشّحات ما قبل الالتقاط ونافذة زمنيّة، وتستخرج محادثة الهدف فقط قبل التسليم فلا تُضمَّن حركة غير ذات صلة، وتقرّر موقع الاحتفاظ ومدّته وتحذف بعد التحقيق
cap["التقاط = الحركة"] --> p1["التقط الحدّ الأدنى"]
cap --> p2["استخرج الهدف أوّلًا"]
cap --> p3["اضبط الاحتفاظ واحذف"]
p2 -.-> exp["رشّح وصدّر"]
الشكل 19: قرّر التقاط الحدّ الأدنى والتضييق قبل التسليم والاحتفاظ والحذف كمجموعة مع إجراء الالتقاط.
10. الخلاصة
- طبقة تحت «timeout» سجلّ التطبيق حقيقة الحزم التي مرّت فعلًا على السلك. هل SYN بلا ردّ، أم قطع RST الاتّصال، أم استمرّت إعادة الإرسال، أم ظهر ZeroWindow يغيّر أين تنظر تاليًا.
- حتى في موقع يتعذّر فيه تثبيت Wireshark تستطيع الالتقاط بـ pktmon وnetsh trace المضمَّنين في Windows. التقاط بالأداة المضمَّنة، وقراءة بـ Wireshark على جهازك — ذلك التقسيم هو الشكل الأساسي.
- pktmon أربع خطوات: سجّل مرشّحًا →
pktmon start --capture→pktmon stop→pktmon etl2pcap. افتراضيًّا يُقتطَع إلى 128 بايت، فإن أردت الحمولة فلا تنسَ--pkt-size 0. رؤية موقع الإسقاط وسببه قوّة يملكها pktmon وحده. - netsh trace يلتقط حزمة مزوّدي ETW كسيناريو، ومع
persistent=yesيستطيع الصمود عبر إعادة التشغيل. حوّل ETL إلى pcapng بـ etl2pcapng لتقرأه. - في Wireshark ابدأ من
tcp.analysis.flagsوابحث عن المصافحة وRST وإعادة الإرسال وZeroWindow بهذا الترتيب. أسرع إن استوعبت الصورة بـ Conversations وI/O Graph أوّلًا ثم ضيّقت. - حركة localhost لا تمرّ أبدًا عبر بطاقة شبكة، فلا تستطيع التقاطها بالطريقة العاديّة. استخدم محوّل استرجاع Npcap أو التقاط pktmon داخل الرزمة.
- التقط على الجانبين واصطفّهما فيُحسَم «أي طرف صمت». المقدّمة مزامنة الساعة (w32tm). لحادثة شروط إعادة إنتاجها مجهولة انتظر بذاكرة حلقيّة.
- حتى تحت TLS هيكل المحادثة مرئي. عامل فكّ التشفير (SSLKEYLOGFILE) تقنيّة لبيئة التطوير فقط، وعامل ملف التقاط نفسه سرًّا: أدخل التقاط الحدّ الأدنى والتضييق والحذف في التشغيل.
يُظنّ التقاط الحزم غالبًا «أداة مختصّ شبكة»، لكن عمليًّا هو أداة تحقيق من جانب التطبيق لا تبدأ معناها إلّا عندما تصطفّها مع سجلّ التطبيق. في المرّة التالية التي يتوقّف فيها التحقيق عند كلمة «timeout» الواحدة، اذهب انظر طبقة أسفل.
مقالات ذات صلة
- حين تتوقّف حركة TCP للكاميرا الصناعيّة لعدّة ثوانٍ - كيف نضيق نطاق انتظار إعادة الإرسال باستخدام طوابع زمنيّة RFC1323
- المفهوم الخاطئ بأنّ الاستقبال يتطابق مع وحدة الإرسال في TCP ── تصميم الاستقبال بالتعامل مع TCP كتدفّق بايتات
- فهم نموذج OSI حقًا — تشريح طلب HTTP واحد إلى طبقاته السبع
- دليل عملي لأداة Process Monitor (ProcMon) — تحديد سبب «عدم قراءة الإعدادات» و«ACCESS DENIED» خلال 10 دقائق
- جدار حماية Windows وتطبيقات الأعمال — سجّل قواعد واردة من المثبّت
- الوكلاء المؤسسيّون وتطبيقات Windows — ترتيب حلّ الوكيل في WinINET وWinHTTP و.NET
مجالات الاستشارة ذات الصلة
شركة كومورا سوفت ذ.م.م. تتولّى تحقيقات أعطال أصلها الاتّصال مثل «اتّصال تطبيق الأعمال يفشل بين حين وآخر ولا نجد السبب» و«نريد عزل خطأ اتّصال يحدث فقط في بيئة العميل». نأخذ تصميم الالتقاط (أين وماذا وبكم نلتقط)، وتحليل Wireshark، والربط بسجلّ التطبيق، والإصلاح من جانب التطبيق كعمل متواصل واحد.
- تطوير تطبيقات Windows
- التحقيق في الأخطاء وتحليل الأسباب الجذريّة
- الاستشارة التقنيّة ومراجعة التصميم
- تواصل معنا
روابط مرجعيّة
-
Microsoft Learn, pktmon etl2pcap. عن تحويل سجلات ETL لـ pktmon إلى pcapng لتحليلها في Wireshark وأدوات مشابهة، وعن ضياع معلومات الإسقاط ونقطة الالتقاط داخل الرزمة في pcapng، فينبغي التضييق أوّلًا بـ –drop-only أو –component-id قبل التحويل. ↩ ↩2 ↩3 ↩4
-
GitHub, microsoft/etl2pcapng. عن etl2pcapng كأداة مايكروسوفت مفتوحة المصدر التي تحوّل الحزم داخل ملف ETL ملتقَط بـ netsh trace start capture=yes وما شابه إلى pcapng، مع الحفاظ على معلومات الواجهة وكتابة معرّف العمليّة كتعليق حزمة. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Pktmon command formatting. عن توفّر pktmon.exe على Windows 10 وWindows Server 2019 (الإصدار 1809) وما بعد؛ وإجراء البدء السريع تسجيل مرشّح → بدء → إعادة إنتاج → فحص العدّادات → إيقاف وتحويل؛ والمرشّحات 32 كحدّ أقصى، تُجمَع بـ OR، ولا تميّز المصدر عن الوجهة؛ والحزم المُسقَطة في الإخراج النصّي تحمل dropReason. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Packet Monitor (Pktmon). عن كون Packet Monitor أداة تشخيص مضمَّنة في Windows عبر المكوّنات؛ والتقاط الحزم في نقاط متعدّدة داخل رزمة الشبكة لتصوير مسار الحزمة؛ والإبلاغ عن الإسقاطات في المكوّنات المدعومة مع سبب الإسقاط (MTU Mismatch وFiltered VLAN وغيرها)؛ وتوفير عدّادات حزم لكلّ نقطة. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, netsh trace. عن معاملات netsh trace start مثل scenario وcapture وtracefile وmaxSize وfileMode (circular يعمل كذاكرة حلقيّة) وpersistent (الإبقاء على الجلسة عبر إعادة التشغيل)، وعن تحويل ETL إلى نصّ وما شابه بـ netsh trace convert. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Using Netsh to manage traces. عن السيناريو كمجموعة مزوّدين محدَّدة مسبقًا لاستكشاف الأعطال؛ وفحصها بـ netsh trace show scenarios / show scenario؛ وأنّ جلسة تتبّع واحدة فقط تستطيع العمل في الوقت نفسه؛ ومرشّحات الحزم مثل ipv4.address عند capture=yes؛ والإيقاف ينتج ETL و.cab يشمل معلومات النظام. ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Microsoft Learn, Diagnose packet loss. عن إجراء التحقيق الرسمي: أوّلًا التقاط تتبّع بـ pktmon وفحص أسباب الإسقاط المحلّيّة والإحصاءات، ودمجه مع تحليل على مستوى البروتوكول في Wireshark، وإن لم يكفِ الانتقال إلى تتبّع على مستوى المكوّن بسيناريو netsh trace. ↩ ↩2 ↩3
-
Microsoft Learn, pktmon start. عن بدء التقاط بـ –capture؛ و–pkt-size الافتراضي 128 بايت و0 يسجّل الحزمة كاملة؛ و–file-name و–file-size (افتراضي 512MB)؛ وقيم –log-mode (circular وmulti-file وreal-time وmemory) مع circular كافتراضي. ↩ ↩2 ↩3 ↩4
-
Wireshark Wiki, CaptureSetup/Loopback. عن عجز التقاط عادي يستهدف بطاقة مادّيّة على Windows عن التقاط حركة الاسترجاع إلى 127.0.0.1؛ و«Adapter for loopback traffic capture» من Npcap يجعل التقاط الاسترجاع ممكنًا؛ وNpcap مضمَّن في مثبّت Windows من Wireshark 3.0 فصاعدًا. ↩ ↩2 ↩3 ↩4
-
Wireshark Wiki, TLS. عن قدرة Wireshark على فكّ تشفير TLS بمفاتيح جلسة تُكتَب عبر متغيّر البيئة SSLKEYLOGFILE؛ والدعم يشمل Firefox وChrome وEdge المعتمد على Chromium ومكتبات عائلة OpenSSL وما شابه؛ وMicrosoft SChannel لا يدعم هذه الآليّة. ↩ ↩2
-
Microsoft Learn, pktmon counters. عن عرض pktmon counters عدّادات المرور والإسقاط لكلّ مكوّن مراقَب؛ و–drop-reason يعرض أحدث سبب إسقاط لكلّ عدّاد إسقاط؛ والتحديث الحيّ بـ –live. ↩
-
Wireshark, Building Display Filter Expressions (Wireshark User’s Guide). عن صياغة مرشّح العرض، ومواصفات الحقول مثل ip.addr وtcp.port، وعوامل المقارنة، وجمعها بـ and/or/not. ↩
-
Wireshark, TCP Analysis (Wireshark User’s Guide). عن قائمة أعلام تحليل TCP في Wireshark (tcp.analysis.retransmission وtcp.analysis.duplicate_ack وtcp.analysis.out_of_order وtcp.analysis.zero_window وغيرها) وشروط تعيين كلّ منها. ↩ ↩2
-
Microsoft Learn, Windows Time service tools and settings. عن w32tm كأداة سطر الأوامر الموصى بها لضبط W32Time ومراقبته واستكشاف أعطاله، وعن w32tm /stripchart الذي يعرض إزاحة الوقت بينك وبين حاسوب نظير (خيارات مثل /dataonly و/samples). ↩
-
Wireshark, Capture files and file modes (Wireshark User’s Guide). عن أوضاع إخراج ملف التقاط (ملف واحد، ملفّات متعدّدة، ذاكرة حلقيّة) وعن الذاكرة الحلقيّة التي تحتفظ بأحدث البيانات فقط فتضع سقفًا لاستخدام القرص. ↩
مقالات ذات صلة
أحدث المقالات التي تشترك في نفس الوسوم. عمّق فهمك بمواضيع مرتبطة.
قراءة رموز أخطاء ويندوز — البنية ذات الطبقات الثلاث لـ Win32 وHRESULT وNTSTATUS
عندما يظهر 0x80004005 فكّكه قبل البحث. المقال يشرح طبقات Win32 وHRESULT وNTSTATUS ونمط 0x8007xxxx والبحث عبر err.exe وPowerShell.
فهم نموذج OSI حقًا — تشريح طلب HTTP واحد إلى طبقاته السبع
نفهم نموذج OSI من خلال التجربة الفعلية بدلًا من الحفظ. نقوم بتجميع وتشريح إطار Ethernet الذي يحمل طلب HTTP GET واحدًا باستخدام C#، ونتحقق...
أعماق الافتراضيّة في Windows(الجزء 3)── آلات افتراضيّة تقلع في ثوانٍ: لماذا WSL2 وWindows Sandbox والحاويات خفيفة هكذا
لماذا يبدأ WSL2 وWindows Sandbox في ثوانٍ ويبدوان خفيفَين هكذا؟ يشرح هذا المقال الآليّات، من الصور الأساسيّة الديناميّة والـ direct map ع...
أعماق الافتراضيّة في Windows(الجزء 2)── ذاكرة لا تراها النواة: كيف يعمل VBS وHVCI وCredential Guard
عند تثبيت نظيف على عتاد متوافق، يُفعَّل VBS افتراضيّاً ويستخدم الـ hypervisor وSLAT لإنشاء عزل أقوى من النواة. يشرح هذا المقال بنية VTL و...
أعماق الافتراضيّة في Windows(الجزء 1)── أين يعمل Windows فعليّاً؟ الـ hypervisor والأقسام
عندما تفعِّل Hyper-V، يعمل Windows المضيف نفسه فوق الـ hypervisor بوصفه القسم الجذر. يشرح هذا المقال أسس الافتراضيّة عبر أدوار VT-x وSLAT...
أين يتصل هذا الموضوع
ترتبط هذه المقالة بشكل طبيعي بصفحات الخدمات التالية.
تطوير تطبيقات ويندوز
ندعم تطوير برامج ويندوز للأعمال، وتكامل الأجهزة، وأدوات التواصل.
الأسئلة الشائعة
أسئلة شائعة حول موضوع هذه المقالة.
- كيف ألتقط الحزم على خادم عميل لا يمكن تثبيت Wireshark عليه؟
- استخدم أداتي Windows المضمَّنتين pktmon أو netsh trace فتلتقط دون تثبيت برمجيات إضافية. مع pktmon سجِّل مرشّحًا في طرفيّة مرتفعة الصلاحيّة، ابدأ الالتقاط بـ pktmon start --capture، وأوقفه بـ pktmon stop. ملف ETL الناتج يُحوَّل إلى pcapng بـ pktmon etl2pcap، فتنقل التحليل إلى Wireshark على جهازك. «التقاط بالأداة المضمَّنة، وقراءة بـ Wireshark» هو التقسيم الأساسي في المواقع التي تقيّد التثبيت.
- هل أستخدم pktmon أم netsh trace؟
- إن كان نظام التشغيل يملك pktmon (Windows 10 / Windows Server 2019 وما بعد)، ابدأ بـ pktmon. الأوامر بسيطة، وترى أي مكوّن في رزمة الشبكة أسقط الحزمة (سبب الإسقاط)، والتحويل إلى pcapng مكتفٍ ذاتيًّا. netsh trace أفضل عند الالتقاط على نظام قديم بلا pktmon، أو عند جمع أحداث ETW لمكوّنات Windows كسيناريو، أو عندما تريد أن يصمد الالتقاط عبر إعادة التشغيل بـ persistent=yes. مواد استكشاف الأعطال لدى Microsoft تشير إلى هذا الترتيب أيضًا: pktmon أولًا، ثم netsh trace إن لم يكفِ.
- لماذا لا تظهر حركة localhost (127.0.0.1) في Wireshark؟
- حركة localhost لا تمرّ أبدًا عبر بطاقة شبكة مادّيّة؛ تُدار على مسار الاسترجاع الداخلي في نظام التشغيل. الالتقاط العادي الذي يستهدف محوّلًا مادّيًّا لذلك لا يراها. في Wireshark اختر «Adapter for loopback traffic capture» من Npcap فتلتقط حركة الاسترجاع. pktmon يلتقط داخل رزمة الشبكة، فيستطيع مراقبة حركة الاسترجاع أيضًا. خلط شائع آخر: «localhost» يُحلَّ إلى IPv6 ::1، فالشاشة التي ترقب 127.0.0.1 تبقى فارغة — أكّد بتحديد العنوان صراحةً.
- هل أرى محتوى حركة HTTPS (TLS) في التقاط الحزم؟
- حمولة بيانات التطبيق مشفّرة وغير مرئيّة. «هيكل» المحادثة — اتصال TCP وانقطاعه، نجاح مصافحة TLS، قطع RST، أي طرف توقّف عن الردّ — يبقى مرئيًّا حتى مع التشفير، فمعظم تحقيقات المهلة تسير وTLS مشفّر. إن احتجت الحمولة ففكّ التشفير عبر SSLKEYLOGFILE موجود، لكنّه مدعوم فقط في بعض تنفيذات TLS مثل Firefox وعائلة Chrome؛ SChannel المضمَّن في Windows غير مدعوم. الآليّة تكتب مادّة المفتاح السرّي، فعاملها خيارًا لبيئة التطوير فقط.
- هل من الآمن إرسال ملف التقاط إلى مكتب دعم خارجي؟
- إرساله كما هو خطر. التقاط يحتوي التواصل نفسه وقد يشمل بيانات اعتماد لبروتوكولات نصّ واضح، وكعكات، ومفاتيح API، ومعلومات شخصيّة. أولًا عند الالتقاط ضيّق المرشّح والنافذة الزمنيّة إلى أدنى ما تحتاج، وقبل التسليم استخرج محادثة الهدف فقط بمرشّح عرض Wireshark ثم صدّرها. لما يبقى، اتّفق مع المستلم على معاملة الأجزاء الحسّاسة (حجب، أو تسليم بوسيلة أخرى) قبل الإرسال. قرّر مسبقًا مدّة الاحتفاظ بملفات الالتقاط وموعد حذفها.
الملف الشخصي للمؤلف
صفحة الملف الشخصي لمؤلف المقالة.
غو كومورا
مؤسّس شركة كومورا سوفت ذ.م.م.
يركّز على تطوير برامج ويندوز، والاستشارات التقنية، والتحقيق في الأخطاء، ويتميّز في المشاريع التي تبقى فيها الأصول القديمة ناشطة، وفي تشخيص الأعطال التي يصعب تحديد سببها.