SharkMCP
Ein MCP-Server, der sharkd – Wiresharks programmatische Schnittstelle – als eine Reihe von Werkzeugen für LLMs bereitstellt. Laden Sie PCAP/PCAPNG-Dateien und analysieren Sie sie mit natürlicher Sprache.
Voraussetzungen
- Python 3.10+
- Wireshark (stellt
sharkd bereit)
Installation
git clone https://github.com/weirdmachine64/sharkmcp.git
cd sharkmcp
pip install -e .
Oder direkt aus dem Repository ausführen ohne Installation:
uvx --from git+https://github.com/weirdmachine64/sharkmcp sharkmcp
Konfiguration
Fügen Sie zu Ihrer .mcp.json hinzu:
{
"mcpServers": {
"sharkmcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/weirdmachine64/sharkmcp", "sharkmcp"],
"env": {
"SHARKMCP_TIMEOUT": "300"
}
}
}
}
| Umgebungsvariable | Standard | Beschreibung |
|---|
SHARKMCP_SHARKD_BIN | sharkd | Pfad zur sharkd-Binärdatei |
SHARKMCP_TIMEOUT | 300 | Zeitüberschreitung pro Anfrage in Sekunden |
Werkzeuge
Jede geladene PCAP erhält einen eigenen sharkd-Unterprozess. Ergebnisse von aufwändigen Scans (Konversationen, Experteninfo, Exportobjekte) werden im Arbeitsspeicher zwischengespeichert, sodass paginierte Folgeaufrufe ohne erneuten Scan bedient werden.
Sitzung
| Tool | Beschreibung |
|---|
load_pcap(path, alias?) | Eine PCAP/PCAPNG-Datei laden |
list_pcaps() | Alle geladenen PCAPs auflisten |
unload_pcap(alias) | Sitzung beenden und Arbeitsspeicher freigeben |
Übersicht
| Tool | Beschreibung |
|---|
pcap_summary(alias) | Frame-Anzahl, Dauer, Dateigröße, gesehene Protokolle |
server_info(alias) | Alle verfügbaren Tap-Typen, Follow-Protokolle, Feldtypen |
Paketinspektion
| Tool | Beschreibung |
|---|
list_packets(alias, filter?, columns?, refs?) | Paginierte Frame-Liste mit Anzeigefilter |
packet_detail(alias, frame, include_bytes?, include_hidden?) | Vollständiger Protokollbaum für einen Frame |
extract_fields(alias, fields, filter?) | Beliebige Felder pro Paket als Tabelle extrahieren |
Dienstprogramme
Konversationen & Topologie
| Tool | Beschreibung |
|---|
conversations(alias, type?, sort_by?) | Konversationstabelle – Bytes/Frames pro Peer-Paar |
endpoints(alias, type?, sort_by?) | Endpunkttabelle – TX/RX pro Host |
Unterstützte Schichttypen für beide: tcp, udp, ip, ipv6, eth, sctp, dccp, mptcp, wifi, bluetooth, zigbee, fc, fddi, usb und mehr.
Protokollstatistiken
Medien & VoIP
| Tool | Beschreibung |
|---|
voip_calls(alias, filter?) | SIP/H.323-Anrufliste mit Status und Teilnehmern |
rtp_streams(alias, stream_spec?) | RTP-Stream-Inventar; stream_spec für Jitter/Verlust pro Stream übergeben |
multicast_streams(alias, filter?) |
Export & Objekte
Notluke
| Tool | Beschreibung |
|---|
tap(alias, specs, filter?, skip?, limit?) | Einen beliebigen sharkd-Tap direkt ausführen – bis zu 16 Spezifikationen in einem PCAP-Scan. Verwenden Sie server_info, um gültige Bezeichner zu entdecken. |
Beispiel
> load_pcap("/captures/traffic.pcap", alias="traffic")
> protocol_hierarchy("traffic")
> expert_info("traffic", limit=20)
> conversations("traffic", type="tcp", sort_by="bytes")
> extract_fields("traffic", ["dns.qry.name", "dns.a"], filter="dns")
> follow_stream("traffic", "http", "tcp.stream eq 0")
> export_objects("traffic", type="http")
> download_object("traffic", "eo:http_0")
Architektur
LLM
│ MCP (stdio)
▼
SharkMCP server
│ JSON-RPC 2.0 (stdin/stdout)
├─ sharkd [pcap-1]
├─ sharkd [pcap-2]
└─ sharkd [pcap-N]
Ein sharkd-Unterprozess pro geladener PCAP. Sitzungen sind isoliert – gleichzeitige Abfragen auf verschiedenen Aliasen blockieren sich nie gegenseitig.