SharkMCP
خادم MCP يُعرض sharkd — واجهة Wireshark البرمجية — كمجموعة أدوات للـ LLMs. قم بتحميل ملفات 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. يتم تخزين نتائج الفحوصات المكلفة (المحادثات، معلومات الخبراء، تصدير الكائنات) مؤقتًا في الذاكرة بحيث يتم تلبية الاستدعاءات المتتابعة المقسمة إلى صفحات دون إعادة مسح.
الجلسة
| الأداة | الوصف |
|---|
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?) | شجرة بروتوكول كاملة لإطار واحد |
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
| الأداة | الوصف |
|---|
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 مباشرة — حتى 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 محمل. الجلسات معزولة — الاستعلامات المتزامنة على أسماء مستعارة مختلفة لا تمنع بعضها أبدًا.