Packet capture ב-Windows בפועל — איך בוחרים בין pktmon, netsh trace ו-Wireshark

· עודכן בתאריך: · · Windows, packet capture, pktmon, netsh, Wireshark, רשתות, פתרון תקלות, TCP/IP

היסטוריית עדכונים (גרסה ראשונה, פורסמה בתאריך 20 Aug 2026)
פרסום ראשון
לצטט את המאמר הזה(DOI: 10.5281/zenodo.22176145)

מאמר זה מאוחסן בארכיון Zenodo. להלן גם ה-DOI שתמיד מפנה לגרסה האחרונה וגם ה-DOI המקובע לגרסה שאתם קוראים.

Go Komura (2026). Packet capture ב-Windows בפועל — איך בוחרים בין pktmon, netsh trace ו-Wireshark. KomuraSoft LLC. https://doi.org/10.5281/zenodo.22176145 https://comcomponent.com/he/blog/windows-packet-capture-pktmon-netsh-wireshark/

DOI (הגרסה האחרונה)
10.5281/zenodo.22176145
DOI (הגרסה הזו)
10.5281/zenodo.22176146

«תקשורת השרת של אפליקציית העסק נכשלת כמה פעמים בחודש. לוג האפליקציה כותב רק ‘timeout’. אין שגיאה תואמת בלוג מצד השרת באותו זמן. אנחנו לא יודעים איך לשחזר» — בייעוצי חקירת תקלות הצורה הזאת עולה כל הזמן.

לוג אפליקציה שומר רק מה שהאפליקציה «החליטה לכתוב». רואים שהתוצאה timeout, אבל האם בקשת החיבור (SYN) לא קיבלה תשובה, האם החיבור הוקם ואז השרת הפסיק לענות, האם הוא נותק ב-RST, או האם ה-packet בכלל הגיע ליעד — חיים שכבה אחת מתחת ללוג — ב-packets שעברו באמת על ה-wire. אם Process Monitor הוא הדרך להסתכל שכבה אחת למטה על גישה לקבצים ול-Registry, packet capture הוא הדרך להסתכל שכבה אחת למטה על השיחה.

ה-packets שכבה אחת מתחת ללוג האפליקציהלוג אפליקציה שומר רק מה שהאפליקציה החליטה לכתוב; האם SYN בלי תשובה, שקט אחרי חיבור, RST שניתק, או האם ה-packet הגיע חיים רק ב-packets שעברו באמת על ה-wireהסתכלו שכבה אחת למטהלוג אפליקציהנשאר רק מה שהוחלט לכתובהתוצאה timeout במילה אחתpackets שעברו באמת על ה-wireאין תשובה ל-SYN?שקט אחרי חיבור?נותק ב-RST?האם הגיעה ליעד?

איור 1: הלוג שומר רק את התוצאה; פירוק ה-timeout חי רק ב-packets שכבה אחת למטה.

המקום הטיפוסי שבו נתקעים הוא האילוץ «אי אפשר להתקין Wireshark בשרת הלקוח». אתרים שבקרת השינוי או מדיניות האבטחה שלהם לא מאשרים תוכנה נוספת לחקירה אינם נדירים. אבל Windows כבר שולח שני כלי packet capture: pktmon ו-netsh trace. לוכדים בכלי OS מובנים, לוקחים את הקובץ שמתקבל למחשב שלכם, וקוראים ב-Wireshark — בחלוקה הזאת עדיין רואים את ה-packets באתר שאוסר התקנות.

המאמר הזה מיועד לאנשי IT בחברות קטנות ובינוניות ולמפתחי אפליקציות Windows. הוא מסביר איך לבחור בין pktmon, netsh trace ו-Wireshark, ואת ההליך המעשי של כל אחד. מלכודות תעבורת loopback, ההחלטה אם ללכוד בלקוח או בשרת, איך לחיות עם TLS שמסתיר את ה-payload, וקישור ה-capture ללוג האפליקציה — כולם ממקורות ראשוניים מעודכנים לאוגוסט 2026.

1. קודם המסקנה

  • «capture בכלי המובנה, קריאה ב-Wireshark» היא החלוקה הבסיסית בשטח. גם אם אי אפשר להתקין תוכנה בשרת הלקוח, pktmon ו-netsh trace מובנים ב-Windows. ממירים את הלוג שלכדתם ל-pcapng ומנתחים ב-Wireshark במחשב שלכם.12
  • pktmon הוא כלי packet capture המובנה ב-Windows 10 / Windows Server 2019 ואילך. משתמשים בו בארבעה צעדים — רישום filter, התחלה, עצירה, המרה — והחוזק הייחודי שלו הוא לראות איזה רכיב ב-network stack זרק את ה-packet (drop reason).34
  • netsh trace הוא הכלי המובנה הישן יותר; הוא יכול להפעיל חבילת ספקי ETW כ«scenario». בנוסף ל-packets הוא שומר אירועים מתוך רכיבי Windows, ועם persistent=yes ה-capture יכול לשרוד reboot.56
  • שני הכלים כותבים ETL ש-Wireshark לא יכול לפתוח כמו שהוא. ממירים ל-pcapng ב-pktmon etl2pcap ל-pktmon, וב-etl2pcapng הקוד הפתוח של Microsoft ל-netsh trace.12
  • Microsoft עצמה מצביעה על «קודם pktmon, אחר כך netsh trace אם זה לא מספיק, ו-Wireshark לניתוח פרוטוקול». החלוקה במאמר הזה עוקבת אחרי ההמלצה הרשמית הזאת.7
  • כברירת מחדל pktmon רושם רק את 128 הבתים הראשונים של כל packet. אם אתם מתכוונים לקרוא את ה-payload ב-Wireshark, אל תשכחו --pkt-size 0 (לרשום את כל ה-packet) בהתחלה.8
  • תעבורה ל-localhost לא מופיעה ב-capture רגיל. היא לא עוברת NIC. משתמשים במתאם ה-loopback של Npcap ב-Wireshark, או ב-capture בתוך ה-stack של pktmon עם הכלים המובנים.9
  • גם כש-TLS מסתיר את ה-payload, עדיין אפשר ללמוד הרבה. הקמת חיבור, האם ה-TLS handshake הצליח, RST, ואיזה צד הפסיק לענות נשארים גלויים גם בהצפנה. פענוח דרך SSLKEYLOGFILE הוא טכניקה לסביבת פיתוח בלבד.10
  • capture מכיל את התקשורת עצמה. מניחים שהוא יכול לכלול credentials ומידע אישי, ובונים capture במינימום הנחוץ וצמצום לפני מסירה לתוך ההליך.

2. שלושת כלי ה-capture ואיך בוחרים ביניהם

קודם, טבלה אחת של תפקידי שלושת הכלים.

  pktmon netsh trace Wireshark
איך מקבלים מובנה ב-Windows 10 / Windows Server 2019 ואילך3 מובנה ב-Windows זמן רב (שמיש במערכות מלפני pktmon) דורש התקנה נפרדת
תפקיד עיקרי packet capture, זיהוי drop, counters packet capture + אירועי ETW של רכיבי Windows ניתוח הנתונים שלכדתם (היעד האמיתי)
פורמט פלט ETL (ממירים ל-pcapng ב-etl2pcap)1 ETL+.cab (ממירים ל-pcapng ב-etl2pcapng)62 pcapng
חוזק ייחודי מיקום ה-drop והסיבה בתוך ה-stack4 איגוד ספקים לפי scenario, capture מעבר ל-reboot5 display filters, ניתוח TCP, סטטיסטיקה, ממשק
הרשאות Administrator Administrator שווה-Administrator ל-capture (לא נחוץ לניתוח בלבד)

במשפט אחד, pktmon ו-netsh trace הם כלי ה«capture», ו-Wireshark הוא כלי ה«קריאה». Wireshark יכול גם ללכוד, אבל אי אפשר להשתמש בזה במקום שאי אפשר להתקין. להפך, אפשר להמיר ETL של הכלים המובנים לטקסט ולקרוא, אבל בהייה בלי display filter ובלי ניתוח TCP היא סבל. «capture בשטח בכלי המובנה, המרה ל-pcapng, וקריאה ב-Wireshark במחשב שלכם» הוא הנתיב הקצר ביותר באתר מוגבל.

capture בכלי המובנה, קריאה ב-Wiresharkבשטח לוכדים ETL ב-pktmon או netsh trace, ממירים כל אחד ל-pcapng בכלי ההמרה שלו, ומנתחים ב-Wireshark במחשב שלכםpktmon etl2pcapetl2pcapngpktmon (מובנה)קובץ ETLnetsh trace (מובנה)ETL+.cabpcapngנתחו ב-Wireshark במחשב שלכם

איור 2: בשטח לוכדים ETL בכלים המובנים, ממירים ל-pcapng, וקוראים ב-Wireshark במחשב שלכם.

מדריך חקירת packet loss של Microsoft בעל אותה צורה: לוכדים ומבודדים את הסיבה ב-pktmon קודם, אחר כך עוברים ל-trace ברמת רכיב כמו netsh trace start scenario=InternetClient אם זה לא מספיק, ומנתחים התנהגות פרוטוקול ב-Wireshark.7

כתנאי מקדים לקריאת מה ש-packet באמת מראה, עוזר גם תמונה של השכבות המוערמות — Ethernet, IP, TCP, נתוני אפליקציה. אנטומיית השכבות מאוירת ב«Getting a Real Feel for the OSI Model».

3. pktmon בפועל — filter, התחלה, עצירה, המרה

הזרימה הבסיסית של 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. התחלת הלכידה. רישום חבילות שלמות, דריסה במאגר טבעתי של 1GB
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
הליך pktmon הבסיסימצמצמים את היעד ב-filter, מתחילים capture, משחזרים את האירוע, עוצרים, ממירים ל-pcapng ב-etl2pcap, ולבסוף מסירים את ה-filter הרשום1. צמצמו יעד ב-filter add2. התחילו capture ב-start --capture3. שחזרו את האירועבדקו נפח ו-drop ב-counters4. עצרוהמירו ל-pcapng ב-etl2pcap5. נקו ב-filter remove

איור 3: pktmon מתחיל ברישום filter, אחר כך capture, עצירה והמרה, ומסירים את ה-filter במפורש בסוף.

נקודות לזכור:

  • רושמים filters לפני שמתחילים capture. גם התיעוד של Microsoft ממליץ בתוקף להחיל filter לפני ההתחלה, כי capture של כל התעבורה רועש מדי. filters יכולים לציין כתובת IP, פורט, כתובת MAC, פרוטוקול, מזהה VLAN ועוד, ואפשר לרשום עד 32. כמה filters הם OR: packet נרשם אם הוא תואם אחד מהם.3
  • filter של pktmon לא מבחין בין מקור ליעד. -i 192.168.10.20 פירושו «packets שבהם הכתובת הזאת מקור או יעד». מצמצמים כיוון אחר כך ב-display filter של Wireshark אחרי ההמרה.3
  • גודל ה-packet כברירת מחדל הוא 128 בתים. זה מספיק לניתוח כותרות, אבל אם רוצים גם נתוני אפליקציה, רושמים את כל ה-packet ב---pkt-size 0.8
  • הלוג כברירת מחדל במצב circular (ring buffer), גודל ברירת מחדל 512MB. אפשר לשנות את התקרה ב---file-size, ו---log-mode real-time מדפיס למסך בזמן אמת ולא יוצר קובץ לוג. מאשרים קודם במצב real-time שאתם באמת רואים את התעבורה שמעניינת, ואז מגדירים את capture הייצור, ותימנעו מלכידה ריקה.8
איך filters של pktmon נכנסים לתוקףכמה filters רשומים רושמים בהתאמת OR, הכתובת שצוינה לא מבחינה בין מקור ליעד, והכיוון מצטמצם אחר כך ב-display filter של Wireshark אחרי ההמרהfilter 1רשמו אם אחד תואםfilter 2filter 3 (עד 32)נרשם בלוג ה-capture (OR)מקור ויעד לא מובחניםצמצמו כיוון ב-Wireshark אחרי המרה

איור 4: כמה filters פועלים כ-OR, והאם מארח הוא מקור או יעד מצטמצם ב-Wireshark אחרי ההמרה.

3.1. מה שרק pktmon יכול — לראות איפה packet נזרק

הערך הייחודי של pktmon מול Wireshark הוא שהוא לוכד packet בכמה נקודות בתוך ה-network stack, לא ב-NIC יחיד, ויכול לדווח איפה ולמה הוא נזרק (drop). כי אפשר לראות איזה רכיב ה-packet הגיע אליו ואיפה הוא נעלם, סיבות drop כמו «אי-התאמת MTU» או «VLAN filter» מביאות אתכם לסיבה בלי חיפוש כוח גס.4

pktmon לוכד בכמה נקודות בתוך ה-stackpktmon לוכד packet בכמה נקודות בתוך ה-network stack ולא ב-NIC יחיד, ולכן יכול לדווח עם סיבה איזה רכיב ה-packet הגיע אליו ואיפה הוא נזרקpacketנלכד בנקודה 1נלכד בנקודה 2נזרק בנקודה 3מדווח מיקום drop וסיבהלמשל אי-התאמת MTU או VLAN filter

איור 5: capture בכמה נקודות בתוך ה-stack אומר עד כמה רחוק packet הגיע ואיפה הוא נזרק, עם סיבה.

  • pktmon list מציג את רכיבי הרשת שאפשר לנטר (NIC, protocol stacks, filter drivers ועוד) ואת המזהים שלהם.
  • pktmon counters --drop-reason מפרט מוני מעבר/drop לכל רכיב ואת סיבת ה-drop האחרונה. נוח כחיתוך ראשון לפני ניתוח הלוג.11
  • ממירים לטקסט ב-pktmon etl2txt ו-packets שנזרקו יוצאים עם drop ו-dropReason.3

החשד ש«משהו ב-OS זורק את זה לפני שהיא מגיעה לאפליקציה» לא נסגר בהייה ב-Wireshark לבד. היכולת הזאת עוזרת, למשל, בבידוד מקרה שבו Windows Firewall זורק כי חסרה inbound rule («Windows Firewall ואפליקציות עסקיות»).

הסתייגות אחת. pktmon רושם את אותו packet בכמה נקודות ב-stack, כך שהמרה כמו שהיא ל-pcapng יכולה לגרום לאותו packet להופיע יותר מפעם. pcapng לא נושא «איזה רכיב לכד את זה», ולכן אם קוראים ב-Wireshark המהלך הסטנדרטי הוא להמיר עם --component-id כדי לבחור נקודה אחת (או לשים drop בלבד בקובץ נפרד עם --drop-only).1

למה אותו packet יכול להופיע פעמיים אחרי המרת pcapngpktmon רושם את אותו packet בכמה נקודות ב-stack, pcapng לא שומר איזה רכיב לכד אותו כך שכפילויות יכולות להופיע, והמהלך הסטנדרטי הוא להמיר אחרי צמצום הנקודה ב-component-id או לשים drop בלבד בקובץ drop-onlyאותו packet נרשם בכמה נקודותהמירו ל-pcapng כמו שהואמידע נקודת ה-capture לא עובראותו packet מופיע יותר מפעםצמצמו נקודה ב--component-idקובץ נפרד ב--drop-only

איור 6: מידע נקודת ה-capture לא עובר ל-pcapng, ולכן המהלך הסטנדרטי הוא לצמצם את הנקודה לפני ההמרה.

4. netsh trace בפועל — scenarios, ETL ו-captures ששורדים reboot

netsh trace הוא מנגנון ה-trace שנמצא ב-Windows יותר זמן מ-pktmon. המאפיין שלו הוא שכ«scenario» הוא יכול להפעיל בבת אחת את כל סט ספקי ה-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 כדי להפעיל packet capture, ומצמצמים את היעד ב-capture filter כמו ipv4.address=192.168.10.20. רשימת ה-filters ב-netsh trace show capturefilterHelp.6
  • העצירה מייצרת קובץ .cab בנוסף ל-ETL. ה-.cab מחזיק מידע מערכת כמו תצורת מתאם ו-build של ה-OS, כך שהוא משמש גם כאיסוף סביבה.6
  • רק סשן trace אחד יכול לרוץ בבת אחת. לפני שמתחילים capture אחר, בודקים ב-netsh trace show status שלא נשאר סשן רץ.6
  • מוסיפים persistent=yes והסשן שורד reboot. capture של «התקשורת נכשלת לרגע מיד אחרי reboot» או «חיבור השירות בהפעלה נכשל» — אירועים שאי אפשר להספיק להתחיל ביד — היא הקרקע הייחודית של netsh trace.5
capture לפי scenario ב-netsh traceהתחלה עם scenario מפעילה סט ספקי ETW מאוגד, capture=yes לוכד גם packets, והעצירה מייצרת קובץ ETL וקובץ .cabcapture=yesהתחילו עם scenarioהפעילו את סט הספקיםpackets נלכדים גםשחזרו את האירועעצרוקובץ ETL.cab (מידע מערכת)

איור 7: התחלה עם scenario מפעילה סט ספקים מאוגד, והעצירה מייצרת ETL ו-.cab.

4.1. להפוך ETL לקריא ב-Wireshark —‏ etl2pcapng

ETL של netsh trace אי אפשר לפתוח ב-Wireshark כמו שהוא. etl2pcapng, כלי הקוד הפתוח ש-Microsoft מפרסמת ב-GitHub, ממיר packets בתוך ETL שלכדתם ב-netsh trace start capture=yes ל-pcapng.2

etl2pcapng.exe C:\temp\nettrace.etl C:\temp\nettrace.pcapng

בהמרה etl2pcapng כותב את מזהה ה-process המעורב בכל packet כהערת packet. היכולת לראות «של איזה process התעבורה הזאת» ב-Wireshark עוזרת כשכמה אפליקציות באותו שרת מדברות.2

צד אירועי ה-ETW (אירועים פנימיים של Windows שספקי ה-scenario רשמו) לא מומר ל-pcapng. אם רוצים גם את האירועים, ממירים לטקסט או דומה ב-netsh trace convert input=C:\temp\nettrace.etl, או פותחים את ה-ETL ב-Windows Performance Analyzer.57

קריאת ETL של netsh trace מתפצלת לשני נתיביםpackets בתוך ה-ETL מומרים ל-pcapng ב-etl2pcapng ונקראים ב-Wireshark; אירועי ETW לא מומרים ל-pcapng, ולכן קוראים אותם ב-netsh trace convert או ב-Windows Performance Analyzeretl2pcapngETL של netsh tracepacketsאירועי ETWהמירו ל-pcapngקראו ב-Wiresharkמזהה process נשאר כהערהלא מומר ל-pcapngקראו ב-convert או WPA

איור 8: מה-ETL packets מומרים ל-pcapng לקריאה; אירועי ETW נקראים בדרך אחרת.

5. מבט ראשון על קריאה ב-Wireshark —‏ display filters וניתוח TCP

אחרי שפתחתם את ה-pcapng, קודם חותכים רעש ב-display filter. הנפוצים בטבלה.1213

display filter משמעות
ip.addr == 192.168.10.20 packets שבהם ה-IP הזה מקור או יעד
tcp.port == 8443 packets שמערבים את פורט ה-TCP הזה
dns שאילתות DNS ותשובות בלבד
tcp.flags.syn == 1 && tcp.flags.ack == 0 SYN של חיבור בלבד
tcp.flags.reset == 1 RST (ניתוק כפוי) בלבד
tcp.analysis.retransmission packets ש-Wireshark שפט כ-retransmission
tcp.analysis.zero_window receive window 0 (המקבל לא יכול לקחת עוד)
tcp.analysis.flags כל packet שבו זוהתה איזושהי בעיה

tcp.analysis.* הם דגלי ניתוח ש-Wireshark מקצה במעקב אחרי מספרי רצף TCP. retransmissions, duplicate ACK, out of order, ZeroWindow וכדומה נאספים מכנית, ולכן הדרך הסטנדרטית להתחיל לקרוא היא להקליד קודם tcp.analysis.flags ולפרט את המקומות ש«נראים כמו בעיה».13

בחקירת timeout מחפשים את הצורות הבאות לפי הסדר.

  1. האם ה-three-way handshake הושלם? האם שלושת ה-packets SYN → SYN/ACK → ACK כולן שם? אם SYN חוזר בלי תשובה, הוא לא הגיע לעמית, או שנזרק בשקט באמצע (התבנית הטיפוסית של firewall).
  2. איזה צד שלח את ה-RST? RST מיידי ל-SYN אומר שאף אחד לא מאזין בפורט היעד; RST אחרי שהחיבור הוקם אומר שצד אחד כפה ניתוק. כתובת ה-IP של מקור ה-RST היא ראיה ישירה ל«מי חתך».
  3. האם retransmissions ממשיכים? retransmission חוזר של אותו segment הוא סימן ש-האישור (ACK) לא חוזר לשולח. האם נתוני היציאה אבדו או שה-ACK החוזר אבד אי אפשר לסגור מ-capture חד-צדדי (לכן «capture בשני הצדדים» בפרק הבא חשובה). retransmissions ו-timeout מכוסים לעומק ב«הסיבה לכך ששידור חוזר ב-TCP עוצר תקשורת עם מצלמה תעשייתית, ואיך מבודדים אותה».
  4. האם יש ZeroWindow? זה סימן שאפליקציית הקבלה לא קוראת מה-socket ו-receive buffer מלא. זה בסיס לחשוד בעיצוב אפליקציית הקבלה («The Misconception That TCP Lets You Receive in the Same Units You Send») ולא ברשת.
סדר הצורות לחפש בחקירת timeoutמאשרים השלמת three-way handshake, נוכחות ומקור RST, retransmissions ממשיכים, אחר כך ZeroWindow, כדי לשים סימן ראשון על הסיבהלאכןכןלאכןלאכןהאם SYN קיבל תשובה?לא הגיע מעולם (firewall טיפוסי)יש RST?מקור RST חתךretransmissions ממשיכים?ACK לא חוזריש ZeroWindow?המקבל לא קורא

איור 9: חיפוש handshake, RST, retransmission ואחר כך ZeroWindow בסדר הזה מצמצם לאן להסתכל הלאה.

לפני שקוראים packets אחד-אחד, עוזר גם לקלוט את התמונה כולה ביכולות הסטטיסטיקה. [Statistics] → [Conversations] הוא רשימה של «איזה זוג IP / זוג פורטים דיבר, ממתי עד מתי, כמה», כך שמזהים את השיחה שמעניינת ואז מסננים רק אליה. [Statistics] → [I/O Graph] הוא גרף נפח לאורך זמן; צורות כמו «מהזמן הזה כיוון אחד הפסיק לענות» בולטות. לחיצה ימנית על שיחת ה-TCP שמעניינת ובחירה ב-[Follow] → [TCP Stream] מאפשרת לקרוא את חילופי החיבור הזה כטקסט גלוי.

קלטו את התמונה בסטטיסטיקה, אחר כך צמצמו לשיחהמפרטים אילו שיחות דיברו מתי וכמה ב-Conversations, תופסים את מרווח השקט מ-I/O Graph, מסננים לשיחה שמעניינת, וקוראים אותה כ-TCP streamקלטו את כל התמונה בסטטיסטיקהרשימת שיחות ב-Conversationsראו נפח ב-I/O Graphסננו לשיחה שמעניינתמרווח השקט נראהקראו כ-TCP stream

איור 10: לפני שקוראים packet-packet, קולטים את התמונה בסטטיסטיקה, מצמצמים לשיחה שמעניינת, ואז קוראים אותה.

6. מלכודת ה-loopback — תעבורה ל-localhost לא עוברת NIC

ניסיון לחקור תקשורת בין אפליקציות באותו מחשב — למשל אפליקציית עסק שמתחברת לשירות ביניים ב-localhost:8080 — והיתקעות ב«כלום לא מופיע ב-Wireshark» היא מלכודת קלאסית.

הסיבה ברורה. תעבורה ל-localhost (127.0.0.1) לא עוברת אף פעם NIC פיזי; היא חוזרת בנתיב loopback הפנימי של ה-OS. capture רגיל שמכוון למתאם פיזי לכן אף פעם לא רואה אותה.9

למה תעבורה ל-localhost לא מופיעה ב-captureתעבורה ל-localhost לא עוברת NIC פיזי וחוזרת בנתיב loopback הפנימי של ה-OS, ולכן אף פעם לא מופיעה ב-capture רגיל שמכוון למתאם פיזיחיצוניlocalhostאפליקציהnetwork stackNIC פיזינראה ב-capture רגילחוזר בתוך ה-OSלא ב-capture רגילloopback של Npcap או pktmon

איור 11: תעבורה ל-localhost חוזרת לפני ה-NIC, ולכן capture של מתאם פיזי אף פעם לא רואה אותה.

יש שתי דרכים להתמודד.

  • כשלוכדים ב-Wireshark: בוחרים את «Adapter for loopback traffic capture» של Npcap כיעד ה-capture. מתקין Windows של Wireshark (3.0 ואילך) כולל Npcap, כך שאם Wireshark כבר מותקן אפשר להשתמש בלי עבודה נוספת.9
  • כשלוכדים בכלים המובנים: pktmon לוכד בכמה נקודות בתוך ה-network stack ולא מחוץ ל-NIC4, ולכן יכול לצפות גם בתעבורת loopback. כדי להיות בטוחים, לפני שמגדירים המתנה לשחזור בייצור, מאשרים באותו מחשב ב-pktmon start -c -m real-time תצוגת real-time שתעבורת ה-loopback שמעניינת באמת נראית.

שימו לב גם לשני בלבולים.

  • «localhost» יכול להתיישב ל-IPv6 ::1. האפליקציה מתחברת ל-IPv6 ::1, אבל החוקר מסתכל רק על 127.0.0.1 (IPv4) ומסיק בטעות «אין תעבורה». מתחים את ה-display filter על שניהם, כמו ב-ip.addr == 127.0.0.1 || ipv6.addr == ::1, או הופכים את הגדרת היעד של האפליקציה לכתובת מפורשת.9
  • תעבורה ל-IP האמיתי שלכם גם לא יוצאת ל-wire. כשאותו מחשב מתחבר מ-192.168.10.5 ל-192.168.10.5, היעד הוא IP אמיתי אבל ה-OS עדיין מחזיר אותו פנימית. זוכרים ש«ציינתי IP אמיתי, אז זה חייב לעבור את ה-NIC» אינו מובטח.
הבלבול כש-localhost מתיישב ל-IPv6localhost של אפליקציה עשוי להתיישב ל-IPv6 ::1, ואם החוקר מסתכל רק על 127.0.0.1 הוא מסיק בטעות שאין תעבורה, ולכן מתחים את ה-display filter על שתי הכתובות או מאשרים את היעד ככתובת מפורשתהאפליקציה מתחברת ל-localhostבפועל מתיישב ל-::1 (IPv6)החוקר מסתכל רק על 127.0.0.1כלום לא מופיע במסךמתחו את ה-filter על שתי הכתובותהפכו את היעד לכתובת מפורשת

איור 12: שימו לב לבלבול שבו localhost מתיישב ל-::1 והסתכלות רק על 127.0.0.1 מובילה ל«אין תעבורה».

7. איפה ללכוד — צד אחד, שני צדדים, וסנכרון שעון

ערך ה-capture נקבע לפי «איפה לכדתם». כלל האצבע הוא כדלקמן.

מיקום capture מה לומדים מתי זה מתאים
צד הלקוח בלבד מה שלחתם ומה חזר קודם, לתמונה כללית. כשאי אפשר לגעת בשרת
צד השרת בלבד האם הבקשה הגיעה והאם נשלחה תשובה כשיש הרבה לקוחות, או אי אפשר לזהות אחד
שני הצדדים יחד איפה בנתיב packet נעלם, איזה צד הפסיק לענות כשצריך לסגור את גבול האחריות

capture חד-צדדי אומר רק «העובדות כפי שנראו מהעמדה שלי». retransmissions שממשיכים בלקוח לא מבחינים אם ה-packet שנשלח נעלם בנתיב, או שהגיע לשרת והתשובה נעלמה. לוכדים בשני הצדדים ומיישרים אותם, ותוכלו לסגור «הלקוח שלח / השרת לא קיבל» — איזה צד הפסיק לענות. כשצריך לסגור את גבול האחריות (האפליקציה, ה-OS, התקן רשת, או הצד השני), כדאי לבנות capture בשני הצדדים מההתחלה.

מה capture חד-צדדי ודו-צדדי אומריםcapture חד-צדדי לא מבחין אם ה-packet היוצא נעלם או שהתשובה החוזרת נעלמה; capture בשני הצדדים ויישור שלהן סוגר איזה צד הפסיק לענותcapture בצד אחדעובדות מהצד שלכםיציאה או חזרה?capture בשני הצדדיםישרו אותןאיזה צד הפסיק לענותצריך סנכרון שעון

איור 13: צד אחד מראה רק את העובדות שראיתם; יישור שני הצדדים הוא מה שסוגר לראשונה את גבול האחריות.

7.1. הנחת היסוד של הקישור היא סנכרון שעון

כדי ליישר captures משני הצדדים, השעונים של שני המחשבים חייבים להסכים. לפני שמתחילים capture, בודקים ורושמים את היסט השעון.

:: 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 שניות» כשמיישרים את ה-captures.14 בסביבה עם היסט גדול, תיקון סנכרון הזמן קודם ואחר כך capture הוא בסוף הנתיב הקצר יותר.

הליך בדיקת היסט השעון לפני קישורמאשרים את מצב סנכרון הזמן שלכם ב-w32tm, מודדים ורושמים את ההיסט מול שרת העמית ב-stripchart, משתמשים בהיסט הזה כבסיס לתיקון ביישור captures, ואם ההיסט גדול מתקנים סנכרון קודם ואז לוכדיםבדקו מצב סנכרון ב-queryמדדו היסט ב-stripchartרשמו את ההיסטבסיס לתיקון בזמן קישוראם ההיסט גדול, תקנו סנכרון קודם

איור 14: מודדים ורושמים את היסט השעון לפני ה-capture, ומשתמשים בו כבסיס לתיקון כשמיישרים את ה-captures.

7.2. ל«לא יודעים מתי זה יקרה» — ring buffer

לאירוע שתנאי השחזור שלו אינם יודעים, המהלך הבסיסי הוא להשאיר ring buffer רץ ולעצור אותו כשהאירוע קורה.

  • pktmon: ברירת המחדל היא מצב circular. מגדירים את התקרה (MB) ב---file-size; packets ישנים יותר נדרסים.8
  • netsh trace: מציינים כ-maxSize=1024 filemode=circular.5
  • Wireshark: תחת [Capture] → [Options] → [Output] אפשר להגדיר «כמה קבצים + ring buffer». הוא מסתובב לפי גודל קובץ או זמן ושומר רק את N הקבצים האחרונים, כך שאפשר לרוץ זמן רב עם תקרת שימוש בדיסק.15

בכל מקרה, משתפים עם האדם בשטח את הכלל שכשהאירוע קורה, «רושמים קודם את השעה, ואז» עוצרים את ה-capture. ring buffer מוחק את העבר ככל שמחכים יותר, ולכן אם הנתיב מהתרחשות לעצירה ארוך, המרווח שמעניין נדרס.

המתנה עם capture ב-ring bufferלאירוע שתנאי השחזור שלו אינם יודעים משאירים ring buffer רץ, וכשהאירוע קורה רושמים את השעה ועוצרים מיד; אם עוצרים מאוחר, packets ישנים נדרסים והמרווח שמעניין נעלםהתחילו capture ב-ring bufferהשאירו רץ והמתינוהאירוע קורהרשמו את השעהעצרו מידpackets ישנים נדרסיםעצירה מאוחרת מוחקת את המרווח שמעניין

איור 15: ring buffer מוחק את העבר ככל שמחכים יותר, ולכן אחרי שרשמתם את השעה עוצרים מיד.

8. הבעיה ש-TLS מסתיר את ה-payload — מה עדיין אפשר לראות

רוב תעבורת העסקים היום היא TLS (HTTPS). נוטים לחשוב «אם זה מוצפן, capture חסר תועלת», אבל רוב מה שרוצים בחקירת timeout עדיין גלוי עם ההצפנה במקומה.

  • האם חיבור ה-TCP הוקם (three-way handshake)
  • עד כמה רחוק הגיע ה-TLS handshake — האם ServerHello חזר ל-ClientHello, האם נחתך ב-RST או בהתראה במהלך ה-handshake
  • שם המארח היעד ב-ClientHello (SNI), וגרסת ה-TLS שסוכמה
  • אחרי שהחיבור עומד, איזה צד הפסיק לשלוח. מיקום השקט, retransmissions, RST, או סגירה נקייה (FIN)

כלומר, בידוד «לא מצליח להתחבר», «נופל באמצע» ו«תשובה לא חוזרת» כמעט אף פעם לא צריך פענוח payload. מה שההצפנה מאבדת הוא «מה הם אמרו»; «מי הפסיק לענות, ומתי» נשאר.

מה capture של TLS יכול ולא יכול להראותהצפנה מסתירה רק את ה-payload של נתוני האפליקציה; הקמת חיבור TCP, הצלחה או כישלון של TLS handshake, SNI וגרסת TLS, RST, ואיזה צד הפסיק לענות נשארים גלויים עם ההצפנה במקומהcapture של תעבורת TLSגלוילא גלויהקמת חיבור TCPתוצאת TLS ו-SNIRST / מי הפסיק לענותpayload של נתוני אפליקציה

איור 16: ההצפנה מאבדת רק את ה-payload; שלד השיחה עדיין קריא עם TLS במקומו.

כשעדיין צריך את ה-payload, Wireshark יכול לפענח TLS עם מפתחות סשן שנכתבים דרך משתנה הסביבה SSLKEYLOGFILE. התמיכה מוגבלת לחלק מהמימושים כמו Firefox, Chrome, Edge מבוסס Chromium וספריות משפחת OpenSSL; SChannel המובנה של Windows (אפליקציות שמשתמשות ב-WinHTTP או WinINET) אינו תומך במנגנון הזה.10 כי «מפתח הסשן נכתב לקובץ» אומר שמי שיש לו את הקובץ יכול לפענח את כל השיחה, זו לא טכניקת ייצור; מתייחסים אליה כשחזור וניפוי באגים בסביבת פיתוח.

איך פענוח SSLKEYLOGFILE עובד ומה גבולותיומפתחות סשן שנכתבים דרך SSLKEYLOGFILE מאפשרים ל-Wireshark לפענח TLS, אבל רק חלק מהמימושים כמו Firefox ומשפחת Chrome תומכים ו-SChannel לא; מי שיש לו את קובץ המפתח יכול לפענח את השיחה, ולכן מתייחסים אליו כטכניקה לסביבת פיתוח בלבדהגדירו SSLKEYLOGFILEכתבו מפתחות סשןקראו ב-Wiresharkבעל המפתח יכול לפענחפיתוח בלבדרק חלק ממחסניות TLSSChannel: אין תמיכה

איור 17: כתיבת מפתחות סשן יכולה לפענח, אבל המימושים הנתמכים מוגבלים, ואופי המפתח הופך את זה לטכניקה לסביבת פיתוח בלבד.

כשתעבורה עוברת דרך פרוקסי פנימי, היעד שמופיע ב-capture הוא שרת הפרוקסי, ו-TLS זורם בתוך מנהרת CONNECT. השאלה הקודמת לאיזה פרוקסי האפליקציה בכלל פונה מסודרת במאמר הנלווה מאותו יום «פרוקסי ארגוני ואפליקציות Windows — סידור פתרון הפרוקסי ב-WinINET, WinHTTP ו-.NET».

9. קישור ללוג האפליקציה — לשים זמן על אותו ציר

capture לבדו כמעט אף פעם לא מייצר את המסקנה. המהלך המכריע בפועל הוא לשים שורה אחת מלוג האפליקציה וסיבוב אחד של packets על אותו ציר זמן.

ההליך נראה כך.

  1. מזהים את זמן האירוע מלוג האפליקציה (למשל חריגת timeout ב-10:23:41). אם ערך ה-timeout הוא 30 שניות, ההתחלה אמורה להיות בסביבות 10:23:11.
  2. מחליפים את תצוגת הזמן של Wireshark ל-[View] → [Time Display Format] → [Date and Time of Day], ומצמצמים את המרווח ב-display filter (אפשר גם לסנן לפי זמן, כמו ב-frame.time >= "2026-08-20 10:23:00" && frame.time <= "2026-08-20 10:24:00").
  3. במרווח הזה מאשרים את סדר פרק 5 (handshake → RST → retransmission → ZeroWindow). אם אפשר ליישר עד «30 שניות לפני זמן ה-timeout בלוג נשלח SYN, ואחרי זה רק שידורי SYN חוזרים», ה-«timeout» של הלוג מוחלף בתצפית «בנקודת ה-capture הזאת לא חזרה בכלל תשובה» (האם ה-SYN לא הגיע לעמית, או ש-SYN/ACK החוזר אבד בדרך חזרה, אי אפשר לסגור מנקודת ה-capture הזאת לבד. אם צריך לסגור, לוכדים בשרת ומיישרים).
  4. תמיד מתקנים את ההיסט בין זמן ה-capture לזמן הלוג (היסט השעון שמדדתם בסעיף 7.1, וסימון אזור הזמן של הלוג). שגיאת קישור של כמה שניות תנעץ את השיחה הלא נכונה כאשמה.
הליך יישור לוג האפליקציה וה-packetsמזהים את זמן האירוע מלוג האפליקציה, מחשבים את זמן ההתחלה אחורה מערך ה-timeout, מצמצמים את המרווח ב-Wireshark ב-display filter, מאשרים צורות לפי הסדר, מתקנים את היסט השעון, ושמים אותם על אותו ציר זמן1. זהו זמן האירוע מהלוגחשבו התחלה אחורה מערך ה-timeout2. צמצמו מרווח ב-display filter3. אשרו צורות בסדר פרק 54. תקנו את היסט השעוןמילת הלוג הופכת לתצפית

איור 18: מצמצמים את המרווח מזמן הלוג, מאשרים את הצורה, מתקנים את היסט השעון, ושמים אותם על אותו ציר.

כשמוסרים תוצאות חקירה לצד שלישי (ספק, ספק תקשורת, אנשי הרשת של הלקוח), חיתוך הרעש ב-filter לפני המסירה הוא גם נימוס וגם אמצעי בטיחות. ב-Wireshark מצמצמים לשיחה שמעניינת ב-display filter ושומרים «packets מוצגים בלבד» ב-[File] → [Export Specified Packets], ותקבלו pcapng קטן רק לטווח שצריך.

לבסוף, אזהרת טיפול. קובץ capture מכיל את התקשורת עצמה. הוא יכול לכלול credentials מפרוטוקולים בטקסט גלוי, cookies של HTTP ומפתחות API, תוכן דואר או דוחות, ומידע אישי. מחליטים את שלוש הנקודות הבאות כסט יחד עם הליך ה-capture.

  • capture במינימום הנחוץ: מצמצמים את היעד ב-filters שלפני ה-capture (פרקים 3 ו-4) ומשאירים את חלון הזמן קצר ככל האפשר. אל תעשו «פשוט ללכוד הכול» בסביבת לקוח
  • מצמצמים לפני המסירה: מייצאים רק את השיחה היעד; אל תכללו תעבורת צד שלישי לא קשורה. אם נשארים חלקים רגישים, מסכימים עם הנמען על הסתרה או אמצעי אחר
  • שמירה ומחיקה: מחליטים איפה קובצי capture נשמרים, לכמה זמן, ומתי נמחקים, ומוחקים אותם כשהחקירה נגמרת
שלוש החלטות לפני שמסירים קובץ capturecapture מכיל את התקשורת עצמה, ולכן מחליטים כסט עם הליך ה-capture שתצמצמו למינימום ב-filters שלפני ה-capture ובחלון זמן, תחלצו רק את השיחה היעד לפני מסירה כך שתעבורה לא קשורה לא תיכלל, ותחליטו מיקום שמירה ותקופה ותמחקו אחרי החקירהcapture = התעבורהלכדו את המינימוםחלצו יעד קודםהגדירו שמירה, מחקוסננו וייצאו

איור 19: מחליטים capture מינימום, צמצום לפני מסירה, ושמירה ומחיקה כסט עם הליך ה-capture.

10. סיכום

  • שכבה אחת מתחת ל-«timeout» של לוג האפליקציה נמצאת עובדת ה-packets שעברו באמת על ה-wire. האם SYN לא קיבל תשובה, RST ניתק את החיבור, retransmissions המשיכו, או הופיע ZeroWindow משנה לאן מסתכלים הלאה.
  • גם באתר שאי אפשר להתקין בו Wireshark אפשר ללכוד ב-pktmon ו-netsh trace המובנים של Windows. capture בכלי המובנה, קריאה ב-Wireshark במחשב שלכם — החלוקה הזאת היא הצורה הבסיסית.
  • pktmon ארבעה צעדים: רישום filter → pktmon start --capture → pktmon stop → pktmon etl2pcap. כברירת מחדל זה מקוצר ל-128 בתים, אז אם רוצים את ה-payload אל תשכחו --pkt-size 0. לראות מיקום drop וסיבה הוא חוזק שיש רק ל-pktmon.
  • netsh trace לוכד חבילת ספקי ETW כ-scenario, ועם persistent=yes יכול לשרוד reboot. ממירים את ה-ETL ל-pcapng ב-etl2pcapng כדי לקרוא.
  • ב-Wireshark מתחילים מ-tcp.analysis.flags ומחפשים handshake, RST, retransmission ו-ZeroWindow בסדר הזה. מהיר יותר אם קולטים קודם את התמונה ב-Conversations וב-I/O Graph ואז מצמצמים.
  • תעבורה ל-localhost לא עוברת NIC, ולכן אי אפשר ללכוד אותה בדרך הרגילה. משתמשים במתאם ה-loopback של Npcap או ב-capture בתוך ה-stack של pktmon.
  • לוכדים בשני הצדדים ומיישרים, ו«איזה צד הפסיק לענות» נסגר. הנחת היסוד היא סנכרון שעון (w32tm). לאירוע שתנאי השחזור שלו אינם יודעים, ממתינים עם ring buffer.
  • גם תחת TLS שלד השיחה גלוי. מתייחסים לפענוח (SSLKEYLOGFILE) כטכניקה לסביבת פיתוח בלבד, ומתייחסים לקובץ ה-capture עצמו כסודי: בונים capture מינימום, צמצום ומחיקה לתוך ההפעלה.

packet capture נתפס לעיתים כ«כלי של מומחה רשת», אבל בפועל הוא כלי חקירה מצד האפליקציה שמתחיל להיות בעל משמעות רק כשמיישרים אותו עם לוג האפליקציה. בפעם הבאה שחקירה נעצרת במילה האחת «timeout», לכו להסתכל שכבה אחת למטה.

מאמרים קשורים

תחומי ייעוץ קשורים

KomuraSoft LLC מטפלת בחקירות תקלות שמקורן בתקשורת כמו «תקשורת אפליקציית העסק נכשלת מדי פעם ואי אפשר למצוא את הסיבה» ו«רוצים לבודד שגיאת חיבור שקורה רק בסביבת הלקוח». אנחנו לוקחים תכנון capture (איפה, מה וכמה ללכוד), ניתוח Wireshark, קישור ללוג האפליקציה, ותיקון מצד האפליקציה כעבודה רציפה אחת.

קישורים

  1. Microsoft Learn, pktmon etl2pcap. על המרת לוגי ETL של pktmon ל-pcapng כדי לנתח אותם ב-Wireshark ובכלים דומים, ועל כך שמידע זריקה ומידע נקודת capture בתוך ה-stack אובדים ב-pcapng, ולכן יש לצמצם קודם ב–drop-only או –component-id לפני ההמרה. ↩ ↩2 ↩3 ↩4

  2. GitHub, microsoft/etl2pcapng. על etl2pcapng ככלי הקוד הפתוח של Microsoft שממיר packets בתוך קובץ ETL שלכדתם ב-netsh trace start capture=yes וכדומה ל-pcapng, שומר מידע ממשק וכותב את מזהה ה-process כהערת packet. ↩ ↩2 ↩3 ↩4 ↩5

  3. Microsoft Learn, Pktmon command formatting. על כך ש-pktmon.exe זמין ב-Windows 10 וב-Windows Server 2019 (גרסה 1809) ואילך; הליך ההתחלה המהירה רישום filter → התחלה → שחזור → בדיקת counters → עצירה והמרה; filters לכל היותר 32, משולבים ב-OR, ואינם מבחינים בין מקור ליעד; ו-packets שנזרקו בפלט הטקסט נושאות dropReason. ↩ ↩2 ↩3 ↩4 ↩5

  4. Microsoft Learn, Packet Monitor (Pktmon). על כך ש-Packet Monitor הוא כלי האבחון המובנה של Windows חוצה-רכיבים; packet capture בכמה נקודות בתוך ה-network stack כדי להמחיש את נתיב ה-packet; דיווח על זריקות ברכיבים נתמכים עם drop reason (MTU Mismatch, Filtered VLAN ועוד); ואספקת מוני packets לכל נקודה. ↩ ↩2 ↩3 ↩4

  5. Microsoft Learn, netsh trace. על פרמטרי netsh trace start כמו scenario, capture, tracefile, maxSize, fileMode (circular פועל כ-ring buffer), ו-persistent (שמירת הסשן מעבר ל-reboot), ועל המרת ETL לטקסט וכדומה ב-netsh trace convert. ↩ ↩2 ↩3 ↩4 ↩5

  6. Microsoft Learn, Using Netsh to manage traces. על scenario כסט ספקים מוגדר מראש ל-troubleshooting; בדיקתם ב-netsh trace show scenarios / show scenario; שרק סשן trace אחד יכול לרוץ בבת אחת; packet filters כמו ipv4.address כש-capture=yes; והעצירה מייצרת ETL ו-.cab שכולל מידע מערכת. ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  7. Microsoft Learn, Diagnose packet loss. על הליך החקירה הרשמי: קודם capture של trace ב-pktmon ובדיקת סיבות drop מקומיות וסטטיסטיקה, שילוב עם ניתוח ברמת פרוטוקול ב-Wireshark, ואם זה לא מספיק מעבר ל-trace ברמת רכיב עם scenario של netsh trace. ↩ ↩2 ↩3

  8. Microsoft Learn, pktmon start. על התחלת capture עם –capture; –pkt-size כברירת מחדל 128 בתים ו-0 רושם את כל ה-packet; –file-name ו–file-size (ברירת מחדל 512MB); וערכי –log-mode (circular, multi-file, real-time, memory) עם circular כברירת מחדל. ↩ ↩2 ↩3 ↩4

  9. Wireshark Wiki, CaptureSetup/Loopback. על כך ש-capture רגיל שמכוון ל-NIC פיזי ב-Windows אינו יכול ללכוד תעבורת loopback ל-127.0.0.1; «Adapter for loopback traffic capture» של Npcap מאפשר capture של loopback; ו-Npcap כלול במתקין Windows מ-Wireshark 3.0 ואילך. ↩ ↩2 ↩3 ↩4

  10. Wireshark Wiki, TLS. על כך ש-Wireshark יכול לפענח TLS עם מפתחות סשן שנכתבים דרך משתנה הסביבה SSLKEYLOGFILE; התמיכה כוללת Firefox, Chrome, Edge מבוסס Chromium, ספריות משפחת OpenSSL וכדומה; ו-Microsoft SChannel אינו תומך במנגנון הזה. ↩ ↩2

  11. Microsoft Learn, pktmon counters. על כך ש-pktmon counters מציג מוני מעבר ו-drop לכל רכיב מנוטר; –drop-reason מציג את סיבת הזריקה האחרונה לכל מונה drop; ועדכון חי עם –live. ↩

  12. Wireshark, Building Display Filter Expressions (Wireshark User’s Guide). על תחביר display filter, מפרטי שדות כמו ip.addr ו-tcp.port, אופרטורים להשוואה, ושילובם ב-and/or/not. ↩

  13. 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

  14. Microsoft Learn, Windows Time service tools and settings. על w32tm ככלי שורת הפקודה המומלץ להגדרה, ניטור ו-troubleshooting של W32Time, ועל w32tm /stripchart שמציג את היסט הזמן ביניכם לבין מחשב עמית (אפשרויות כמו /dataonly ו-/samples). ↩

  15. Wireshark, Capture files and file modes (Wireshark User’s Guide). על מצבי פלט של קובץ capture (קובץ יחיד, כמה קבצים, ring buffer) ועל ring buffer ששומר רק את הנתונים האחרונים כך שאפשר לשים תקרה לשימוש בדיסק. ↩

מאמרים עדכניים עם אותן תגיות, להעמקה בנושאים קרובים.

העמודים האלה ממקמים את הנושא בהקשר רחב יותר של שירותים והחלטות.

המאמר קשור ישירות לשירותים הבאים.

שאלות נפוצות

שאלות נפוצות בפניות בנושא המאמר.

איך עושים packet capture בשרת לקוח שבו אי אפשר להתקין Wireshark?
משתמשים בכלי Windows המובנים pktmon או netsh trace, בלי להתקין תוכנה נוספת. עם pktmon רושמים filter במסוף מוגבה, מתחילים capture ב-pktmon start --capture, ועוצרים ב-pktmon stop. את קובץ ה-ETL שמתקבל ממירים ל-pcapng ב-pktmon etl2pcap, והניתוח חוזר ל-Wireshark במחשב שלכם. "capture בכלי המובנה, קריאה ב-Wireshark" היא החלוקה הבסיסית באתרים שמגבילים התקנות.
להשתמש ב-pktmon או ב-netsh trace?
אם במערכת ההפעלה יש pktmon (Windows 10 / Windows Server 2019 ואילך), מתחילים ב-pktmon. הפקודות פשוטות, אפשר לראות איזה רכיב ב-network stack זרק את ה-packet (drop reason), והמרת pcapng מסתיימת בכלי עצמו. netsh trace עדיף כשלוכדים במערכת ישנה בלי pktmon, כשרוצים לאסוף אירועי ETW של רכיבי Windows כ-scenario, או כשרוצים שה-capture ישרוד reboot עם persistent=yes. גם חומרי troubleshooting של Microsoft מצביעים על הסדר הזה: קודם pktmon, אחר כך netsh trace אם זה לא מספיק.
למה תעבורה ל-localhost (127.0.0.1) לא מופיעה ב-Wireshark?
תעבורה ל-localhost לא עוברת אף פעם NIC פיזי; היא חוזרת בנתיב loopback הפנימי של ה-OS. capture רגיל שמכוון למתאם פיזי לכן אף פעם לא רואה אותה. ב-Wireshark בוחרים "Adapter for loopback traffic capture" של Npcap ותוכלו ללכוד תעבורת loopback. pktmon לוכד בתוך ה-network stack, ולכן יכול לצפות גם בתעבורת loopback. בלבול נפוץ נוסף: "localhost" מתיישב ל-IPv6 ::1, כך שמסך שעוקב אחרי 127.0.0.1 ריק — מאשרים בציון כתובת מפורשת.
אפשר לראות את תוכן תעבורת HTTPS (TLS) ב-packet capture?
ה-payload של נתוני האפליקציה מוצפן ואינו נראה. "שלד" השיחה — חיבור וניתוק TCP, האם ה-TLS handshake הצליח, ניתוק RST, איזה צד הפסיק להגיב — נשאר גלוי גם בהצפנה, כך שרוב חקירות ה-timeout יכולות להתקדם עם TLS מוצפן. אם צריך את ה-payload, פענוח דרך SSLKEYLOGFILE קיים, אבל נתמך רק בחלק ממימושי TLS כמו Firefox ומשפחת Chrome; SChannel המובנה של Windows אינו נתמך. המנגנון כותב חומר מפתח סודי, ולכן מתייחסים אליו כאפשרות לסביבת פיתוח בלבד.
בטוח לשלוח קובץ capture לדלפק תמיכה חיצוני?
שליחה כמו שהוא מסוכנת. capture מכיל את התקשורת עצמה ויכול לכלול credentials מפרוטוקולים בטקסט גלוי, cookies, מפתחות API ומידע אישי. קודם, בזמן ה-capture, מצמצמים את ה-filter ואת חלון הזמן למינימום שצריך, ולפני המסירה מחלצים רק את השיחה היעד ב-display filter של Wireshark ומייצאים. למה שנשאר, מסכימים עם הנמען איך לטפל בחלקים רגישים (הסתרה, או מסירה בדרך אחרת) לפני השליחה. מחליטים מראש כמה זמן ישמרו קובצי capture ומתי יימחקו.

פרופיל הכותב

עמוד היכרות עם כותב המאמר.

Go Komura

מנהל KomuraSoft LLC

מתמחה בפיתוח תוכנה עבור Windows, ייעוץ טכני וחקירת תקלות, בעיקר בפרויקטים עם מערכות קיימות ובאגים שקשה לשחזר.

קישורים ציבוריים

חזרה לבלוג