
Un serveur MCP couteau suisse pour analyser les fichiers PCAP
Un serveur MCP qui expose sharkd — l'interface programmatique de Wireshark — comme un ensemble d'outils pour les LLM. Chargez des fichiers PCAP/PCAPNG et analysez-les en langage naturel.
sharkd)git clone https://github.com/weirdmachine64/sharkmcp.git
cd sharkmcp
pip install -e .
Ou exécutez directement depuis le dépôt sans installer :
uvx --from git+https://github.com/weirdmachine64/sharkmcp sharkmcp
Ajoutez à votre .mcp.json :
{
"mcpServers": {
"sharkmcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/weirdmachine64/sharkmcp", "sharkmcp"],
"env": {
"SHARKMCP_TIMEOUT": "300"
}
}
}
}
| Variable d'env | Défaut | Description |
|---|---|---|
SHARKMCP_SHARKD_BIN | sharkd | Chemin vers le binaire sharkd |
SHARKMCP_TIMEOUT | 300 | Délai d'attente par requête en secondes |
Chaque PCAP chargé obtient un sous-processus sharkd dédié. Les résultats des analyses coûteuses (conversations, informations expert, objets exportés) sont mis en cache en mémoire afin que les appels paginés suivants soient servis sans réanalyse.
| Outil | Description |
|---|---|
load_pcap(path, alias?) | Charger un fichier PCAP/PCAPNG |
list_pcaps() | Lister tous les PCAP chargés |
unload_pcap(alias) | Terminer la session et libérer la mémoire |
| Outil | Description |
|---|---|
pcap_summary(alias) | Nombre de trames, durée, taille du fichier, protocoles observés |
server_info(alias) | Tous les types de tap disponibles, protocoles de suivi, types de champs |
| Outil | Description |
|---|---|
list_packets(alias, filter?, columns?, refs?) | Liste paginée de trames avec filtre d'affichage |
packet_detail(alias, frame, include_bytes?, include_hidden?) | Arbre de protocole complet pour une trame |
extract_fields(alias, fields, filter?) | Extraire des champs arbitraires par paquet sous forme de tableau |
| Outil | Description |
|---|---|
validate(alias, filter?, field?) | Valider un filtre d'affichage et/ou un nom de champ |
complete(alias, field?, pref?) | Autocompléter les noms de champs ou de préférences par préfixe |
get_preference(alias, preference?) | Lire les préférences du dissecteur |
set_preference(alias, name, value) | Définir une préférence de dissecteur pour cette session |
set_frame_comment(alias, frame, comment) | Annoter une trame (portée de la session) |
| Outil | Description |
|---|---|
protocol_hierarchy(alias, filter?) | Arbre de protocole imbriqué avec comptes de trames/octets |
io_stats(alias, interval_ms?, filter?) | Comptes de trames et d'octets par intervalle |
iograph(alias, graphs, interval_ms?, filters?) | Graphique de trafic multi-lignes ; prend en charge packets, bytes, bits, sum:<field>, avg:<field>, min:<field>, max:<field>, load:<field>, frames:<field> |
follow_stream(alias, protocol, filter) | Réassembler un flux (tcp, udp, tls, http, http2, quic, sip, dccp, websocket) |
| Outil | Description |
|---|---|
conversations(alias, type?, sort_by?) | Tableau des conversations — octets/trames par paire de pairs |
endpoints(alias, type?, sort_by?) | Tableau des points d'extrémité — tx/rx par hôte |
Types de couche pris en charge pour les deux : tcp, udp, ip, ipv6, eth, sctp, dccp, mptcp, wifi, bluetooth, zigbee, fc, fddi, usb, et plus.
| Outil | Description |
|---|---|
expert_info(alias, filter?) | Détection d'anomalies par trame — erreurs, avertissements, notes, chats |
protocol_stats(alias, protocol) | Statistiques agrégées pour dns, http, http_requests, http_server, sip, dhcp, h225, http2, rtsp |
service_response_time(alias, protocol) | Latence requête/réponse pour smb, smb2, snmp, ldap, diameter, rpc, gtp, et plus |
response_time_delay(alias, protocol) | Délai aller-retour pour radius, h225_ras, megaco, mgcp |
sequence_diagram(alias, type?) | Données de diagramme de flux pour tcp, icmp, icmpv6, any |
| Outil | Description |
|---|---|
voip_calls(alias, filter?) | Liste d'appels SIP/H.323 avec état et participants |
rtp_streams(alias, stream_spec?) | Inventaire des flux RTP ; passez stream_spec pour la gigue/pertes par flux |
multicast_streams(alias, filter?) | Statistiques des flux multicast UDP |
| Outil | Description |
|---|---|
export_objects(alias, type?) | Lister les objets extractibles (http, imf, smb, tftp, dicom, ftp-data) |
download_object(alias, token) | Télécharger un objet, des clés de session TLS (ssl-secrets) ou de l'audio RTP (rtp:<spec>) en base64 |
| Outil | Description |
|---|---|
tap(alias, specs, filter?, skip?, limit?) | Exécuter n'importe quel tap sharkd directement — jusqu'à 16 spécifications en un seul scan PCAP. Utilisez server_info pour découvrir les identifiants valides. |
> 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")
LLM
│ MCP (stdio)
▼
SharkMCP server
│ JSON-RPC 2.0 (stdin/stdout)
├─ sharkd [pcap-1]
├─ sharkd [pcap-2]
└─ sharkd [pcap-N]
Un sous-processus sharkd par PCAP chargé. Les sessions sont isolées — les requêtes simultanées sur différents alias ne se bloquent jamais mutuellement.