webShark is a Wireshark-like webapp powered by sharkd and all its dissectors 🕵️
Client-Side RTP playback powered by WASM/ffmpeg 🚀
Mount your PCAP content directory to location /captures and launch webshark
docker-compose up -d
docker run -ti --rm -p 8085:8085 -v $(pwd)/captures:/captures ghcr.io/qxip/webshark:latest
Browse to your webshark-ng instance, ie: http://localhost:8085/webshark
When the opened capture file grows (e.g. a capture being written by
tcpdump -w / dumpcap), the UI picks up the new packets automatically —
no page reload needed, and only the new frames are fetched from sharkd
(frames with skip). If the file is replaced or truncated, the full
packet list is reloaded instead.
How it works:
- the API exposes
GET /webshark/watch?capture=<file>, a Server-Sent Events stream that emitscapture-changedevents when the file changes (stat polling, interval configurable with theWATCH_INTERVAL_MSenv var); web/live-update.jssubscribes to that stream and appends the new frames to the packet list and packet-length chart. Since the UI inweb/is a prebuilt bundle, the shim is handed the app's internals by two tiny hooks (window.__wsLive.svc(this)/window.__wsLive.comp(this)) injected into the minifiedmain.*.js— the Dockerfile re-applies those hooks (and thelive-update.jsscript tag) to the UI bundle it downloads at build time.
This program is free software based on a fork of GPLv2 webshark by Jakub Zawadzki and sponsored by qxip
Dissections powered by tshark sharkd from Wireshark Project. See LICENSE for details