SRAN Netwatch agent ตอบคำถามเดียวที่สำคัญที่สุดด้านความปลอดภัย — “โปรแกรมในเครื่องของฉันกำลังติดต่อเครือข่ายที่ใดบ้าง?” ด้วยการ join ระหว่าง network capture (Zeek) กับ process attribution (osquery) แล้วแสดงผลแบบ live เป็นลูกโลก 3 มิติ
แต่ละ arc คือการเชื่อมต่อจริงจากเครื่องของคุณ (จุด YOU ตามเมืองของ public IP) ไปยังปลายทางในแต่ละประเทศ/เมือง พร้อมบอกว่าเป็น process ใด คุยกับโดเมนอะไร ผ่าน ISP ไหน
แถบด้านขวาแสดงปลายทางทั้งหมดจัดกลุ่มตามประเทศ พร้อมธงและรายชื่อโดเมน คลิกประเทศใดก็ได้แล้วกล้องจะ “บินไป” ยังจุดนั้นบนลูกโลกทันที
IP ปลายทางถูกค้นพิกัด lat/lon ผ่าน ipwho.is (HTTPS ไม่ต้องใช้ key) แล้ว cache ลงดิสก์ถาวร — ครั้งต่อไปไม่ต้องยิงซ้ำ
มองความสัมพันธ์ทั้งระบบเป็นกราฟแรงดึงดูด 3 มิติ — โหนดสีม่วงคือ process, สีฟ้าคือ endpoint (IP:port), สีเขียวคือ domain เส้นเชื่อมบอกว่าใครคุยกับใคร
เมื่อต้องการตารางข้อมูลดิบเพื่อสืบสวน — แต่ละแท็บดึงจากแหล่งของมันโดยตรง และ join เข้ากับ process เจ้าของผ่าน PID
หัวใจของระบบ — รวมทุกการเชื่อมต่อจัดกลุ่มตาม process (ชื่อ + PID + path + user) แล้วบอกว่าแต่ละตัวคุยกับโดเมน/IP ไหนบ้าง โดยมี SNI กำกับโดเมนปลายทางจริง
รายการ connection ทุกเส้นพร้อมคอลัมน์ Process — เห็น local/remote, โปรโตคอล, state, ไบต์เข้า-ออก และเจ้าของ connection ในตารางเดียว
ทุก DNS query ที่ออกจากเครื่อง พร้อม answer และ rcode — เห็นว่าโปรแกรม พยายาม resolve โดเมนอะไรบ้าง แม้การเชื่อมต่อจริงจะยังไม่เกิด
ดึง SNI (โดเมนปลายทางจริงแม้ทราฟฟิกจะเข้ารหัส) พร้อม cipher และเวอร์ชัน TLS — รู้ว่าคุยกับใครโดยไม่ต้องถอดรหัสเนื้อหา
ทราฟฟิก HTTP แบบ plaintext — host, URI, method และ status code เห็น path ที่เรียกจริงสำหรับบริการที่ไม่ได้เข้ารหัส
Zeek รู้ว่ามี connection อะไร แต่ไม่รู้ว่าใครเปิด · osquery รู้ว่า process ไหนถือ socket ไหน — Netwatch เชื่อมสองโลกนี้เข้าด้วยกันด้วย 4-tuple
sniff interface แล้วเขียน conn / dns / ssl / http log — รู้ทุก flow ที่เกิดขึ้น และ SNI ปลายทางแม้ทราฟฟิกเข้ารหัส
อ่าน process_open_sockets พร้อมเก็บ history 90 วินาที ทำให้ connection สั้น ๆ ยังหาเจ้าของได้แม้ Zeek flush log ไปแล้ว
join key คือ (local_port, remote_addr, remote_port) ส่วน SNI/HTTP host เชื่อมข้าม log ผ่าน Zeek connection uid
# รัน agent (ต้องเป็น root) cd /opt/netwatch sudo .venv/bin/python app.py # เปิดเบราว์เซอร์ open http://localhost:8765 # ตัวเลือก --host (default 0.0.0.0) --port (default 8765) --iface (default any)
หน้าเว็บ: / = 3D globe · /graph = force-graph · /classic = ตาราง 7 แท็บ · API: /api/snapshot, /api/graph, /api/globe, WS /ws