SharkMCP
Un server MCP che espone sharkd — l'interfaccia programmatica di Wireshark — come set di strumenti per LLM. Carica file PCAP/PCAPNG e analizzali con linguaggio naturale.
Requisiti
- Python 3.10+
- Wireshark (fornisce
sharkd)
Installazione
git clone https://github.com/weirdmachine64/sharkmcp.git
cd sharkmcp
pip install -e .
Oppure esegui direttamente dal repository senza installare:
uvx --from git+https://github.com/weirdmachine64/sharkmcp sharkmcp
Configurazione
Aggiungi al tuo .mcp.json:
{
"mcpServers": {
"sharkmcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/weirdmachine64/sharkmcp", "sharkmcp"],
"env": {
"SHARKMCP_TIMEOUT": "300"
}
}
}
}
| Variabile d'ambiente | Default | Descrizione |
|---|
SHARKMCP_SHARKD_BIN | sharkd | Percorso del binario sharkd |
SHARKMCP_TIMEOUT | 300 | Timeout per richiesta in secondi |
Strumenti
Ogni PCAP caricato ottiene un sottoprocesso sharkd dedicato. I risultati di scansioni costose (conversazioni, informazioni esperte, oggetti esportati) vengono memorizzati nella cache in modo che le chiamate di follow-up paginate siano servite senza ripetere la scansione.
Sessione
| Strumento | Descrizione |
|---|
load_pcap(path, alias?) | Carica un file PCAP/PCAPNG |
list_pcaps() | Elenca tutti i PCAP caricati |
unload_pcap(alias) | Termina la sessione e libera memoria |
Panoramica
| Strumento | Descrizione |
|---|
pcap_summary(alias) | Conteggio frame, durata, dimensione file, protocolli rilevati |
server_info(alias) | Tutti i tipi di tap disponibili, protocolli follow, tipi di campo |
Ispezione dei pacchetti
| Strumento | Descrizione |
|---|
list_packets(alias, filter?, columns?, refs?) | Elenco frame paginato con filtro di visualizzazione |
packet_detail(alias, frame, include_bytes?, include_hidden?) | Albero protocollare completo per un frame |
extract_fields(alias, fields, filter?) | Estrai campi arbitrari per pacchetto come tabella |
Utilità
Struttura del traffico
Conversazioni e topologia
| Strumento | Descrizione |
|---|
conversations(alias, type?, sort_by?) | Tabella delle conversazioni — byte/frame per coppia di peer |
endpoints(alias, type?, sort_by?) | Tabella degli endpoint — tx/rx per host |
Tipi di livello supportati per entrambi: tcp, udp, ip, ipv6, eth, sctp, dccp, mptcp, wifi, bluetooth, zigbee, fc, fddi, usb e altri.
Statistiche di protocollo
| Strumento | Descrizione |
|---|
voip_calls(alias, filter?) | Elenco chiamate SIP/H.323 con stato e partecipanti |
rtp_streams(alias, stream_spec?) | Inventario dei flussi RTP; passa stream_spec per jitter/perdita per flusso |
|
Esportazione e oggetti
Uscita di emergenza
| Strumento | Descrizione |
|---|
tap(alias, specs, filter?, skip?, limit?) | Esegui direttamente qualsiasi tap sharkd — fino a 16 specifiche in una scansione PCAP. Usa server_info per scoprire identificatori validi. |
Esempio
> 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")
Architettura
LLM
│ MCP (stdio)
▼
SharkMCP server
│ JSON-RPC 2.0 (stdin/stdout)
├─ sharkd [pcap-1]
├─ sharkd [pcap-2]
└─ sharkd [pcap-N]
Un sottoprocesso sharkd per ogni PCAP caricato. Le sessioni sono isolate — le query concorrenti su alias diversi non si bloccano mai a vicenda.