แก้ปัญหา Wi-Fi ด้วย Wireshark
การแก้ปัญหา Wi-Fi ติดๆหลุดๆ เชื่อมต่อช้า หรือปัญหา roaming หลายครั้งเราจำเป็นต้องใช้ Protocol Analyzer อย่าง Wireshark ช่วย
ใช่ครับ Wireshark ที่มันใช้ยากๆนั่นแหละครับ ใครเคยใช้คงรู้ดีว่ามี filter เป็นร้อยเป็นพันตัว แค่คิดจะเริ่มยังไงก็ปวดหัวแล้ว แต่ถ้าใช้เป็น Wireshark จะเป็นเครื่องมือที่มีประสิทธิภาพสูงมากในการแก้ไขปัญหา Wi-Fi
ส่วนตัวแล้ว ผมพูดได้เต็มปากเต็มคำว่า Wireshark ช่วยชีวิตผมมาหลายต่อหลายครั้ง ถึงมันอาจจะไม่ได้ช่วยแก้ปัญหาโดยตรง แต่มันช่วยอธิบายถึงสาเหตุและต้นตอของปัญหา ซึ่งเราไม่ต้องมาเสียเวลาลองผิดลองถูก
แต่ถ้าใครใช้ Windows เราจำเป็นต้องใช้ตัวช่วยอย่าง WLAN Pi หรือ Software เฉพาะ เพราะ native Windows driver ไม่สามารถเปลี่ยน Wi-Fi NIC ให้เป็น Monitor Mode ได้ (monitor mode หรือ promiscuous mode คือ mode ที่ Wi-Fi NIC สามารถดักฟัง 802.11 frame ในอากาศได้โดยที่ไม่ต้องเกาะกับ AP)
หรือถ้าไม่อยากเสียเงิน อีกวิธีคือลง Linux อย่าง Ubuntu หรือ Kali ใน VM บวกกับใช้ USB NIC ที่รองรับ monitor mode เช่น NIC ที่ใช้ RTL8812AU chipset แล้วเปิด Wireshark ใน VM แทน (ไม่ใช่ Wi-Fi NIC ทุกตัวรองรับ monitor mode และตัวที่รองรับอย่าง RTL8812AU ต้องลง driver ก่่อน ไม่งั้น VM จะไม่เห็น)
ลง driver ยังไงให้ดู URL นี้
หลายคนเข้าใจผิดว่าเค้าใช้ Wireshark เก็บ traffic จาก Wi-Fi interface บน Windows ได้ แต่นั่นไม่ใช่ 802.11 traffic นะครับ เพราะ data ที่เห็นเป็น upper layer packet ระหว่าง Wi-Fi Client กับ network
ข้อมูลนี้เราสามารถใช้ troubleshooting ปัญหา L3 ขึ้นไป เช่นพวก DHCP หรือ DNS แต่จะไม่สามารถใช้บอกถึงปัญหาที่ L2 เช่นเรื่องการเชื่อมต่อของ Wi-Fi หรือ roaming เพราะมันไม่เห็น 802.11 frame
ส่วนใครที่ใช้ MacOS นี่โชคดีมากเพราะฟีเจอร์ Wi-Fi Sniffing มันมา Built-in ใน OS เลย เราสามารถเซ็ตเป็น monitor mode โดยไม่ต้องใช้ตัวช่วยอื่นๆ แค่เลือก channel กด sniff พอเสร็จแล้วเปิดใน Wireshark เลย สะดวกมากๆ
ท้ายสุดนี้ อยากฝากไว้สำหรับใครที่ไม่เคยใช้ Wireshark ผมแนะนำให้ลองใช้ดูครับ อย่าไปกลัว มันเป็นเครื่องมือที่ดีมากๆ ตอนเริ่มต้นมันอาจจะยากนิดนึง แต่วันนึงมันอาจจะช่วยชีวิตเราได้
ส่วนใครมีคำถามอะไรเกี่ยวกับการติดตั้ง การใช้ filter หรือคำถามทั่วไปเกี่ยวกับ Wireshark คอมเม้นในโพสต์ได้เลยครับ ส่วนถ้าใครต้องการให้เราเข้าไปช่วยแก้ไขปัญหา Wi-Fi ที่แก้ยังไงก็ยังไม่หาย Message มาคุยกันครับ
ปล. ภาพข้างล่างผมทำ extcap ผ่าน RPi4 โดยใช้หลักการเดียวกับ WLAN Pi คือตั่งค่าให้ RPi เป็น host โดยเรา connect ผ่านสาย USB (ใช้สายเส้นเดียวได้ทั้ง power+IP) จากนั้นเราคอนฟิก USB NIC ที่เสียบกับ RPi เป็น Monitor Mode แล้วทำ sshdump กลับมาใน Windows เรา เราจะเห็น L2 frame เด้งขึ้นมาใน Wireshark แบบ real-time
ตัวอย่าง Wireshark filter ที่ผมใช้บ่อยๆ
- wlan.fc.type == 0 (ไว้เช็ค management frame)
- wlan.fc.subtype == 8 (แสดงผลแค่ beacon)
- eapol (แสดงผล 4-way handshake หรือการเชื่อมต่อระหว่าง Client กับ AP ใช้เช็คทำไม client เกาะ AP ไม่ได้)
- wlan.fc.subtype == 10 (ไว้เช็ค disassociation หรือทำไม client ถึงหลุด)
- wlan.fc.retry == 1 (เช็ค retry frame ถ้า retry ยิ่งสูง การเชื่อมต่อก็ยิ่งช้า)
- ส่วน filter อื่นๆสามารถดูได้จาก URL นี้ครับ