1 คะแนน โดย foundcake21 2026-04-13 | ยังไม่มีความคิดเห็น | แชร์ทาง WhatsApp

สวัสดีครับ ผมเป็นนักศึกษามหาวิทยาลัยที่กำลังเรียนอยู่ในสาขาความมั่นคงปลอดภัยสารสนเทศ

ผมใช้ kali-mcp เป็นประจำสำหรับงานเจาะระบบจำลอง / ทดสอบทราฟฟิก / งานอัตโนมัติสำหรับ CTF แต่เมื่อใช้งานในสภาพแวดล้อมที่ต้องต่อหลายเอเจนต์พร้อมกัน ก็เริ่มเจอคอขวด เลยลองลงมือเขียนใหม่ด้วย Go เองครับ

GitHub: https://github.com/found-cake/kali-mcp-go


โครงสร้างและข้อจำกัดของ kali-mcp เดิม

ต้นฉบับพัฒนาด้วย Flask + Python และมีโครงสร้างที่คลาส CommandExecutor จะสร้าง subprocess.Popen ใหม่ในทุกคำขอ จากนั้นจึงสร้าง daemon thread เพิ่มอีก 2 ตัวเพื่ออ่าน stdout/stderr แยกกันในแต่ละคำขอ

สำหรับเอเจนต์เดี่ยวถือว่าเพียงพอ แต่เมื่อมีคำขอพร้อมกันจำนวนมากในสภาพแวดล้อมแบบ multi-agent จะเกิดปัญหาดังนี้

  • Flask แบบ single worker ตามค่าเริ่มต้น — เอเจนต์แต่ละตัวบล็อกกันเอง
  • มี overhead จากการสร้าง process + thread ใหม่ในทุกคำขอ
  • เอเจนต์อาจเข้าใจความล่าช้าในการตอบกลับผิดว่าเป็น timeout แล้วลองทำงานเดิมซ้ำ

การเปลี่ยนแปลงหลัก

เซิร์ฟเวอร์

  • เดิม: Flask (single worker ตามค่าเริ่มต้น)
  • เปลี่ยน: Fiber v3 / fasthttp — รองรับ concurrent ได้เต็มรูปแบบ

การเก็บผลลัพธ์เอาต์พุต

  • เดิม: ใช้ daemon thread 2 ตัวทำ readline loop
  • เปลี่ยน: ใช้ goroutine 2 ตัว + WaitGroup เพื่อซิงก์ให้ชัดเจน และกำหนดจังหวะการเก็บ stdout/stderr ได้แม่นยำ จึงประมวลผลได้โดยไม่มีเอาต์พุตตกหล่น

timeout/cancel

  • เดิม: process.wait(timeout=...) + kill แบบบังคับ
  • เปลี่ยน: ใช้ context เป็นฐาน — ปิดได้ถูกต้องแม้กระทั่ง pipe

ไฟล์ชั่วคราวของ Metasploit

  • เดิม: ฮาร์ดโค้ด /tmp/mks_msf_resource.rc — มีโอกาสเกิด race condition เมื่อมีหลายคำขอพร้อมกัน
  • เปลี่ยน: os.CreateTemp — ใช้ชื่อไฟล์เฉพาะต่อคำขอ ทำให้จัดการได้อย่างปลอดภัย

รองรับ tshark

  • เดิม: ไม่มี
  • เปลี่ยน: เพิ่ม endpoint เฉพาะ

สถาปัตยกรรม

ยังคงโครงสร้างแบบ 2-tier เหมือนเดิม แต่เปลี่ยนเฉพาะภายใน

[AI Client]  →(MCP stdio)→  [mcp-client]  →(HTTP + Bearer token)→  [kali-server]  →(exec)→  [nmap, tshark, ...]  

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น