
PCAPファイルを分析するためのスイスアーミーナイフ的なMCPサーバー
MCP サーバーで、Wireshark のプログラムインターフェースである sharkd を LLM 向けのツールセットとして公開します。PCAP/PCAPNG ファイルを読み込み、自然言語で分析できます。
sharkd を提供)git clone https://github.com/weirdmachine64/sharkmcp.git
cd sharkmcp
pip install -e .
または、インストールせずにリポジトリから直接実行:
uvx --from git+https://github.com/weirdmachine64/sharkmcp sharkmcp
.mcp.json に追加:
{
"mcpServers": {
"sharkmcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/weirdmachine64/sharkmcp", "sharkmcp"],
"env": {
"SHARKMCP_TIMEOUT": "300"
}
}
}
}
| 環境変数 | デフォルト | 説明 |
|---|---|---|
SHARKMCP_SHARKD_BIN | sharkd | sharkd バイナリへのパス |
SHARKMCP_TIMEOUT | 300 | リクエストごとのタイムアウト(秒) |
読み込まれた各 PCAP には専用の sharkd サブプロセスが割り当てられます。高コストなスキャン(会話、エキスパート情報、オブジェクトエクスポート)の結果はメモリにキャッシュされ、ページ分割された後続の呼び出しでは再スキャンなしで提供されます。
| ツール | 説明 |
|---|---|
load_pcap(path, alias?) | PCAP/PCAPNG ファイルを読み込む |
list_pcaps() | 読み込まれたすべての PCAP を一覧表示 |
unload_pcap(alias) | セッションを終了しメモリを解放 |
| ツール | 説明 |
|---|---|
pcap_summary(alias) | フレーム数、期間、ファイルサイズ、検出されたプロトコル |
server_info(alias) | 利用可能なすべてのタップタイプ、フォロープロトコル、フィールドタイプ |
| ツール | 説明 |
|---|---|
list_packets(alias, filter?, columns?, refs?) | 表示フィルター付きのページ分割されたフレームリスト |
packet_detail(alias, frame, include_bytes?, include_hidden?) | 1フレームの完全なプロトコルツリー |
extract_fields(alias, fields, filter?) | パケットごとに任意のフィールドをテーブルとして抽出 |
| ツール | 説明 |
|---|---|
validate(alias, filter?, field?) | 表示フィルターやフィールド名を検証 |
complete(alias, field?, pref?) | プレフィックスによるフィールド名またはプリファレンス名のオートコンプリート |
get_preference(alias, preference?) | ディセクタプリファレンスを読み取る |
set_preference(alias, name, value) | このセッションに対してディセクタプリファレンスを設定 |
set_frame_comment(alias, frame, comment) | フレームに注釈を付ける(セッションスコープ) |
| ツール | 説明 |
|---|---|
protocol_hierarchy(alias, filter?) | フレーム数・バイト数付きのネストされたプロトコルツリー |
io_stats(alias, interval_ms?, filter?) | インターバルごとのフレーム数とバイト数 |
iograph(alias, graphs, interval_ms?, filters?) | 複数線のトラフィックグラフ。packets, bytes, bits, sum:<field>, avg:<field>, min:<field>, max:<field>, load:<field>, frames:<field> をサポート |
follow_stream(alias, protocol, filter) | ストリームを再構築(tcp, udp, tls, http, http2, quic, sip, dccp, websocket) |
| ツール | 説明 |
|---|---|
conversations(alias, type?, sort_by?) | 会話テーブル — ピアペアごとのバイト数/フレーム数 |
endpoints(alias, type?, sort_by?) | エンドポイントテーブル — ホストごとの送受信数 |
サポートされるレイヤタイプ:tcp, udp, ip, ipv6, eth, sctp, dccp, mptcp, wifi, bluetooth, zigbee, fc, fddi, usb など。
| ツール | 説明 |
|---|---|
expert_info(alias, filter?) | フレームごとの異常検出 — エラー、警告、注意、チャット |
protocol_stats(alias, protocol) | dns, http, http_requests, http_server, sip, dhcp, h225, http2, rtsp の集計統計 |
service_response_time(alias, protocol) | smb, smb2, snmp, ldap, diameter, rpc, gtp などのリクエスト/レスポンス遅延 |
response_time_delay(alias, protocol) | radius, h225_ras, megaco, mgcp のラウンドトリップ遅延 |
sequence_diagram(alias, type?) | tcp, icmp, icmpv6, any のフロー図データ |
| ツール | 説明 |
|---|---|
voip_calls(alias, filter?) | 状態と参加者を含むSIP/H.323コールリスト |
rtp_streams(alias, stream_spec?) | RTPストリーム一覧。stream_spec を指定するとストリームごとのジッタ/損失を表示 |
multicast_streams(alias, filter?) | UDPマルチキャストストリーム統計 |
| ツール | 説明 |
|---|---|
export_objects(alias, type?) | 抽出可能なオブジェクトの一覧(http, imf, smb, tftp, dicom, ftp-data) |
download_object(alias, token) | オブジェクト、TLSセッションキー(ssl-secrets)、RTP音声(rtp:<spec>)をbase64でダウンロード |
| ツール | 説明 |
|---|---|
tap(alias, specs, filter?, skip?, limit?) | 任意のsharkdタップを直接実行 — 1回のPCAPスキャンで最大16仕様。有効な識別子を見つけるには server_info を使用。 |
> 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]
読み込まれたPCAPごとに1つの sharkd サブプロセスが存在します。セッションは分離されており、異なるエイリアスに対する同時クエリが互いにブロックされることはありません。