diff --git a/test_monitor_tshark.sh b/test_monitor_tshark.sh index 11487f6..520715e 100755 --- a/test_monitor_tshark.sh +++ b/test_monitor_tshark.sh @@ -119,7 +119,7 @@ echo "" # Capture for specified duration and count packets echo "Capturing packets for $DURATION seconds..." -# Run capture in background and show progress +# Run capture with timeout CAPTURE_OUTPUT=$(timeout "$DURATION" tshark -i "$INTERFACE" -n -T fields \ -e frame.number \ -e frame.time \ @@ -132,25 +132,30 @@ CAPTURE_OUTPUT=$(timeout "$DURATION" tshark -i "$INTERFACE" -n -T fields \ 2>&1) CAPTURE_EXIT_CODE=$? -# Immediately show stats after capture completes +# Force output flush +sync + +# Show stats immediately after capture completes echo "" echo "=== Capture Statistics ===" -# Show any warnings/errors -WARNINGS=$(echo "$CAPTURE_OUTPUT" | grep -E "(tshark:|Warning|Error)" | head -5 || true) +# Show any warnings/errors (but not the "Running as root" or "Capturing" messages) +WARNINGS=$(echo "$CAPTURE_OUTPUT" | grep -E "(tshark:|Warning|Error)" | grep -v -E "(Running as|Capturing)" | head -5 || true) if [ -n "$WARNINGS" ]; then echo "$WARNINGS" + echo "" fi -# Count total packets captured (lines starting with a number) -PACKET_LINES=$(echo "$CAPTURE_OUTPUT" | grep -E '^[0-9]+' || true) +# Count total packets captured (lines starting with a number followed by tab) +# Filter out lines like "100 packets captured" which don't have tabs +PACKET_LINES=$(echo "$CAPTURE_OUTPUT" | grep -E '^[0-9]+\t' || true) FINAL_COUNT=$(echo "$PACKET_LINES" | wc -l || echo "0") # Count packets with PLCP headers (radiotap present) # radiotap.present field is the 8th field (after frame.number, frame.time, wlan.sa, wlan.da, wlan.fc.type, wlan.fc.subtype, wlan.fc.type_subtype) PLCP_COUNT=$(echo "$PACKET_LINES" | awk -F'\t' 'NF >= 8 && $1 != "" && $8 != "" && $8 != "0" && $8 != "-" {count++} END {print count+0}' || echo "0") -# Display stats immediately +# Display stats immediately - always show these echo "Total packets captured: $FINAL_COUNT" echo "PLCP headers: $PLCP_COUNT" if [ "$FINAL_COUNT" -gt 0 ]; then