
MCP-сервер — швейцарский нож для анализа PCAP-файлов
Сервер MCP, который предоставляет sharkd — программный интерфейс Wireshark — в качестве набора инструментов для 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) | Все доступные типы taps, протоколы для follow, типы полей |
| Инструмент | Описание |
|---|---|
list_packets(alias, filter?, columns?, refs?) | Постраничный список кадров с фильтром отображения |
packet_detail(alias, frame, include_bytes?, include_hidden?) | Полное дерево протоколов для одного кадра |
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?) | Таблица конечных точек — tx/rx на хост |
Поддерживаемые типы уровней для обоих: 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 tap напрямую — до 16 спецификаций за одно сканирование PCAP. Используйте 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]
Один подпроцесс sharkd на каждый загруженный PCAP. Сессии изолированы — одновременные запросы к разным алиасам никогда не блокируют друг друга.