SharkMCP
LLM을 위한 도구 세트로서 sharkd — Wireshark의 프로그래밍 인터페이스 — 를 노출하는 MCP 서버입니다. PCAP/PCAPNG 파일을 로드하고 자연어로 분석하세요.
요구 사항
- Python 3.10+
- Wireshark (
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 하위 프로세스를 가집니다. 비용이 많이 드는 스캔(대화, 전문가 정보, 내보내기 객체)의 결과는 메모리에 캐시되어 페이지가 매겨진 후속 호출이 재스캔 없이 제공됩니다.
Session
| 도구 | 설명 |
|---|
load_pcap(path, alias?) | PCAP/PCAPNG 파일 로드 |
list_pcaps() | 로드된 모든 PCAP 목록 |
unload_pcap(alias) | 세션 종료 및 메모리 해제 |
개요
| 도구 | 설명 |
|---|
pcap_summary(alias) | 프레임 수, 기간, 파일 크기, 발견된 프로토콜 |
server_info(alias) | 사용 가능한 모든 탭 유형, follow 프로토콜, 필드 유형 |
패킷 검사
| 도구 | 설명 |
|---|
list_packets(alias, filter?, columns?, refs?) | 디스플레이 필터가 적용된 페이지 매겨진 프레임 목록 |
packet_detail(alias, frame, include_bytes?, include_hidden?) | 하나의 프레임에 대한 전체 프로토콜 트리 |
extract_fields(alias, fields, filter?) | 패킷당 임의 필드를 테이블로 추출 |
유틸리티
트래픽 구조
대화 및 토폴로지
| 도구 | 설명 |
|---|
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 등.
프로토콜 통계
미디어 및 VoIP
| 도구 | 설명 |
|---|
voip_calls(alias, filter?) | 상태 및 참가자가 포함된 SIP/H.323 통화 목록 |
rtp_streams(alias, stream_spec?) | RTP 스트림 인벤토리; 스트림별 지터/손실을 위해 stream_spec 전달 |
multicast_streams(alias, filter?) | UDP 멀티캐스트 스트림 통계 |
내보내기 및 객체
탈출구
| 도구 | 설명 |
|---|
tap(alias, specs, filter?, skip?, limit?) | 모든 sharkd 탭을 직접 실행 — 하나의 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당 하나의 sharkd 하위 프로세스. 세션은 격리되어 있으며, 다른 별칭에 대한 동시 쿼리는 서로를 차단하지 않습니다.