This page focuses on common problems after initial setup. For install steps, first-run commands, and permission setup, see Getting Started.
Commands below assume netscope is on your PATH. If you built from source and did not install it, replace netscope with ./target/release/netscope.
Symptom: error: pcap error: ...permission denied or no interfaces found.
Cause: Packet capture requires elevated privileges.
Fix:
# Quickest fix
sudo netscopeIf you want a persistent Linux capability-based setup instead of running with sudo, see Getting Started.
Symptom: --list-interfaces shows no interfaces.
Fix: Run with the same elevated privileges described in Getting Started. Without root access, libpcap cannot enumerate interfaces on most systems.
Symptom: NetScope exits immediately with an error like:
configuration error: capture.interface and capture.read_pcap are mutually exclusiveconfiguration error: offline capture requires capture.read_pcap path
Cause: Invalid or inconsistent capture configuration.
Fixes:
- Set at most one of
--interface/capture.interfaceand--read-pcap/capture.read_pcap. - For offline analysis, always provide a pcap path via
--read-pcap <PATH>(orcapture.read_pcapin TOML). - If you intend to use live capture but set
capture.read_pcap = "", that disables offline mode (empty strings are treated as unset) and NetScope will fall back to the default interface unlesscapture.interfaceis specified.
Possible causes:
- Wrong interface -- Use
--list-interfacesto find the correct name, then-i <name>. - BPF filter too restrictive -- Remove the filter temporarily to confirm traffic exists.
- No traffic -- Run
sudo tcpdump -i <interface> -c 10to verify the interface has traffic. - Firewall -- Some firewalls block promiscuous mode. Try
--no-promiscuous.
Symptom: NetScope prints something like Datalink: Unsupported(<n>) at startup, and the summary shows a high Parse errors count (often equal to the number of captured packets).
Cause: The capture interface or pcap file uses a link-layer format NetScope does not currently decode.
Fixes:
- Prefer capturing on a specific interface (for example
-i eth0) instead of pseudo-devices that may use uncommon datalink formats. - If you are generating pcaps with
tcpdump, consider forcing a supported datalink type via-y(for example-y EN10MBfor Ethernet or-y LINUX_SLLfor Linux cooked capture v1). - For existing pcaps, re-capture with a supported link type when possible.
Supported datalink types currently include Ethernet, Linux SLL, loopback NULL/LOOP, and raw IP.
Note: raw-IP pcaps are commonly tagged as link type 101 or 12 depending on the tool; NetScope treats both as raw IP.
Symptom: Summary shows high Kernel dropped count or drop rate.
Causes and fixes:
- Processing too slow -- Enable pipeline mode (
--pipeline). - Too much traffic -- Apply a BPF filter (
-f "tcp port 443"). - Per-packet output -- Use
--quietto skip terminal printing. - Hex dump enabled -- Disable
--hex-dumpin high-traffic captures.
Symptom: Summary shows high Dispatch drops count.
Causes and fixes:
- Channel too small -- Increase
channel_capacityin config (default: 4096). - Not enough workers -- Increase
--workers. - Uneven shard distribution -- Some 5-tuples may hash to the same shard. This is expected with a small number of active flows. Use a BPF filter to reduce volume.
Symptom: Capture exits with an error like pcap write error or pcap flush error while --write-pcap is enabled.
Cause: NetScope now treats pcap write/flush failures as fatal to avoid silent output corruption or data loss.
Fixes:
- Ensure the output path exists and is writable.
- Verify there is enough free disk space (
df -h). - Capture to a faster or local filesystem.
- Enable bounded rotation for long captures:
--write-pcap-rotate-mb <MB> --write-pcap-max-files <N>(writes numbered segments and deletes the oldest when the limit is reached). - Disable
--write-pcapif raw packet archiving is not required.
Symptom: Browser shows "connection refused" at http://127.0.0.1:8080 (or https://... when TLS is enabled).
Fixes:
- Verify
--webflag is present. - Check the terminal for
Web dashboard: http://...orWeb dashboard: https://...confirmation. - Check for port conflicts:
lsof -i :8080. - If accessing from another machine, use
--web-bind 0.0.0.0.
Symptom: Startup prints an error about TLS cert/key path or fails to start HTTPS listener.
Fixes:
- Ensure
web.tls.cert_pathandweb.tls.key_pathare set whenweb.tls.enabled = true. - Verify both files exist and are readable by the NetScope process.
- Ensure certificate/key are PEM-formatted and match each other.
Symptom: Browser or API client receives 401 Unauthorized from dashboard endpoints.
Causes:
web.auth.enabled = truebut no/invalid HTTP Basic credentials were provided.- Username/password mismatch between browser/client and NetScope config.
password_filecontent changed without restarting NetScope.
Fixes:
- Verify
web.auth.usernameand secret source (passwordorpassword_file) are correct. - If using
password_file, ensure the file contains only the password (trailing newline is fine). - Retry with explicit credentials in a terminal client for isolation, for example:
curl -u netscope:YOUR_PASSWORD https://127.0.0.1:8443/api/health
curl -u netscope:YOUR_PASSWORD https://127.0.0.1:8443/metricsSymptom: Dashboard connects but shows -- for all metrics and no packets.
Causes:
- No traffic -- Verify packets are being captured (check terminal output without
--quiet). sample_rate = 0-- This disables the packet feed entirely. Set to 1 or higher.- Filter too restrictive -- Remove the BPF filter temporarily.
- Pipeline mode timing -- The aggregator tries to merge all shard updates for a tick, but it also forces a merge shortly after the tick deadline so idle shards do not stall the dashboard.
Note: sample_rate = 0 disables live packet samples only; stats and alerts can still continue to update. Metrics can also lag slightly during uneven traffic, but completely idle shards should not block frames indefinitely.
Symptom: Charts stutter, packet list has gaps, or TRACE logs show web event channel full.
Fixes:
- Increase
sample_rate(e.g., 10 or 100) to reduce packet feed volume. - In pipeline mode, sampling is still capture-wide, so raising
sample_ratereduces total samples rather than samples per shard. - Reduce
top_nto send fewer flows per tick. - Increase
tick_msto reduce update frequency. - Reduce
payload_bytesto store less data per packet. - Open
/?perf=1to inspect fps, latency percentiles, dropped frames, and client/server clock offset while tuning.
Causes:
- Anomalies not enabled -- Ensure
--anomaliesflag is present oranalysis.anomalies.enabled = true. - Thresholds too high -- Lower
syn_thresholdorunique_ports_thresholdfor testing. - Cooldown active -- After an alert fires, subsequent alerts for the same key are suppressed for
cooldown_secs. - Pipeline mode -- Thresholds are per-shard. Traffic distributed across shards may not exceed thresholds on any individual shard. See Pipeline Caveats.
Causes:
- No flows tracked -- Only TCP and UDP traffic creates flow entries. ARP, ICMP, and ICMPv6 do not.
- All flows expired -- If capture runs long enough with
flow.timeout_secsset low, flows may expire before export. - Fragmented traffic -- IPv4 and IPv6 non-initial fragments are skipped for flow tracking.
NetScope formats timestamps as HH:MM:SS.microseconds derived from pcap timestamps (seconds since Unix epoch). These are UTC-based. If times look wrong, verify your system clock and consider that pcap timestamps come from the kernel, not application code.
libpcap headers or developer tools are missing. See Getting Started for platform-specific installation steps.
NetScope pins Rust via rust-toolchain.toml (currently 1.93.1; edition 2024). Install the pinned toolchain with:
rustup toolchain install 1.93.1If you plan to run the repo quality checks, also install:
rustup component add rustfmt clippy --toolchain 1.93.1See Getting Started for the current baseline toolchain requirements.