8 คะแนน โดย GN⁺ 2025-02-04 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • httptap เป็นเครื่องมือที่ช่วยให้ดูคำขอ HTTP และ HTTPS ที่โปรแกรมบน Linux ส่งออกไปได้อย่างง่ายดาย
    • สามารถติดตามคำขอเครือข่ายของคำสั่งที่ต้องการได้ด้วย httptap --
  • ตัวอย่างเช่น เมื่อใช้คำสั่ง curl เพื่อส่งคำขอไปยัง URL หนึ่ง httptap จะแสดงทั้งคำขอและคำตอบกลับ
    • httptap ไม่ต้องใช้สิทธิ์ root และไม่ส่งผลกระทบต่อทั้งระบบ
    • ปัจจุบันทำงานได้เฉพาะบน Linux เท่านั้น และพอร์ตไปยังระบบปฏิบัติการอื่นได้ยาก
  • วิธีติดตั้ง
    • ติดตั้งไบนารีที่คอมไพล์ไว้ล่วงหน้า: curl -L https://github.com/monasticacademy/httptap/… | tar xzf -
    • ติดตั้งด้วย Go: go install github.com/monasticacademy/httptap@latest
  • เริ่มต้นใช้งานอย่างรวดเร็ว
    • สามารถใช้คำสั่ง curl เพื่อส่งคำขอ HTTP และตรวจสอบคำขอรวมถึงคำตอบกลับด้วย httptap
    • หากใช้ตัวเลือก -L เพื่อตามการ redirect จะมีคำขอ HTTP เพิ่มเติมเกิดขึ้น
  • ตัวอย่างการใช้งานกับ Google Cloud และ kubectl
    • สามารถติดตามคำขอ HTTP ที่เกิดขึ้นเมื่อใช้คำสั่ง gcloud compute instances list เพื่อแสดงรายการ compute instance บน Google Cloud
    • สามารถติดตามคำขอ HTTP ที่เกิดขึ้นเมื่อใช้คำสั่ง kubectl get all เพื่อแสดงรายการทรัพยากรในคลัสเตอร์ Kubernetes
  • DNS-over-HTTP
    • สามารถใช้ตัวเลือก --doh-url ของ curl เพื่อส่งคำขอ DNS-over-HTTP ได้
    • สามารถใช้ httptap เพื่อตรวจสอบคำขอและคำตอบกลับของ DNS ได้
  • เอาต์พุต HAR
    • สามารถดัมพ์คำขอและคำตอบกลับ HTTP เป็นไฟล์ HAR ได้
    • ไฟล์ HAR สามารถนำไปแสดงผลแบบภาพผ่าน viewer หลากหลายแบบได้
  • หลักการทำงาน
    • httptap ใช้ network namespace เพื่อรันคำสั่งในสภาพแวดล้อมที่แยกออกจากกัน
    • สร้างอุปกรณ์ TUN เพื่อติดตามทราฟฟิกเครือข่าย และสร้าง certificate authority ชั่วคราวเพื่อถอดรหัสทราฟฟิก HTTPS
  • ข้อควรระวัง
    • โปรเซสจะไม่สามารถรับการเชื่อมต่อเครือข่ายขาเข้าได้
    • ต้องมีสิทธิ์เข้าถึง /dev/net/tun
    • คำขอ ICMP echo ทั้งหมดจะถูก echo กลับโดยไม่ส่งแพ็กเก็ต ICMP ไปยังเครือข่ายจริง

2 ความคิดเห็น

 
halfenif 2025-02-06

มันถูกพัฒนาขึ้นที่ Monastic Academy ในรัฐเวอร์มอนต์ สหรัฐอเมริกา เราเชื่อว่าตารางชีวิตแบบนักบวช และการปฏิบัติตามเส้นทางจิตวิญญาณของพุทธศาสนาโดยทั่วไป เป็นเงื่อนไขที่เหมาะอย่างยิ่งสำหรับการพัฒนาเทคโนโลยี

พอลองทดสอบแล้วไปดู GitHub ก็เลยคิดว่า หรือจะเป็นคนที่ฝึกปฏิบัติในอารามสร้างขึ้นมาเป็นส่วนหนึ่งของการบรรลุทางจิตวิญญาณก็ได้

 
GN⁺ 2025-02-04
ความคิดเห็นบน Hacker News
  • ส่วน "How it was made" ใน README น่าสนใจพอๆ กับตัวเครื่องมือเอง

    • พัฒนาซอฟต์แวร์ผ่านการใช้ชีวิตแบบชุมชนและการฝึกสมาธิ
    • ไอเดียการรันโปรเซสใน network namespace ที่แยกออกมานั้นอัจฉริยะมาก
    • สนใจส่วนของ HTTPS และมีการตั้งค่าตัวแปรสภาพแวดล้อมเพื่อสั่งให้โปรแกรมใช้ CA bundle ในไดเรกทอรีชั่วคราว
    • อาจเกิดปัญหาแบบเดียวกับ http_proxy และโปรแกรมอาจเพิกเฉยต่อตัวแปรนั้นได้
    • มีการเมานต์ overlay filesystem ที่ /etc/resolv.conf และสงสัยว่าจะช่วยได้ไหมหากเมานต์ไดเรกทอรี /etc/ca-certificates โดยใช้ CA bundle ชั่วคราว
  • httptap เป็นตัวติดตาม HTTP ระดับโปรเซสที่รันได้โดยไม่ต้องใช้สิทธิ์รูท

    • รันด้วย httptap <command> เพื่อดูการติดตามคำขอและการตอบกลับ HTTP/HTTPS ผ่าน standard output ได้
    • รันคำสั่งใน network namespace ที่แยกออกมา และใช้ TCP/IP stack ของตัวเอง
    • ไม่ใช่ HTTP proxy จึงไม่ต้องตั้งค่าให้คำสั่งใช้ HTTP proxy
    • ถอดรหัสทราฟฟิก TLS โดยสร้าง CA แบบเรียลไทม์
    • ไม่ได้ติดตั้งกฎ iptables หรือเปลี่ยนแปลงระดับทั้งระบบ
  • อีกเครื่องมือหนึ่งที่ใช้วิเคราะห์ทราฟฟิกเครือข่ายได้โดยไม่ต้องใช้สิทธิ์รูทคือ rootless Podman และ Pasta

    • เพิ่มออปชัน --network=pasta:--pcap,myfile.pcap เพื่อบันทึกทราฟฟิกเครือข่ายเป็นไฟล์ PCAP
    • มีการเขียนตัวอย่างง่ายๆ สำหรับวิเคราะห์ไฟล์ PCAP ที่บันทึกไว้ด้วย tshark
  • การใช้ TUN device เป็นไอเดียที่ยอดเยี่ยม และส่วน "How it was made" ก็เป็นหนึ่งใน README บน GitHub ที่ดีที่สุด

    • กำลังพัฒนาเครื่องมือชื่อ Subtrace ซึ่งสามารถดักจับคำขอขาเข้าและขาออกได้โดยอัตโนมัติ
    • ใช้ Seccomp BPF เพื่อดักจับ system call อย่าง socket, connect, recv, accept และพร็อกซีการเชื่อมต่อ TCP ทั้งหมดผ่าน Subtrace
    • แยกวิเคราะห์คำขอ HTTP จาก TCP stream แล้วแสดงให้ผู้ใช้ดูในแท็บ Network ของ Chrome DevTools
  • น่าจะนำไปใช้ดีบักการตั้งค่า nginx ได้ทันที

    • ตอนนี้ใช้ curl -v เพื่อตรวจดูเอาต์พุตด้วยตนเอง แต่เครื่องมือนี้จะช่วยให้เห็น redirect loop และปัญหาอื่นๆ ได้ทันที
  • เพิ่งสร้างความสามารถคล้ายกันใน mitmproxy เมื่อไม่นานมานี้ แต่มี trade-off คนละแบบ

    • ต้องใช้สิทธิ์รูท และยังไม่มีการติดตั้งใบรับรองอัตโนมัติ
    • ไม่จำเป็นต้องรันแอปใน namespace เฉพาะ จึงสามารถจับโปรเซสที่กำลังรันอยู่แล้วได้
  • วิธีอื่นที่ใช้ LD_PRELOAD อาจล้มเหลวกับ ELF ที่ลิงก์แบบตายตัว เช่น golang binary

  • เป็นการนำ TCP/IP stack ใน user space ของ gVisor มาใช้ได้อย่างยอดเยี่ยม

  • Mitmproxy v11.1 ก็สามารถทำสิ่งที่คล้ายกันได้