สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปเขียนโปรแกรมเชื่อมต่อเครือข่าย WiFi ด้วย pywifi ในภาษา Python กันครับ
โมดูล pywifi เป็นโมดูลสำหรับใช้จัดการการเชื่อมต่อ WiFi ด้วยภาษา Python โดยรองรับการทำงานทั้งบน Windows และ Linux รองรับทั้ง Python 2 และ Python 3 ใช้ MIT License
ติดตั้งได้ด้วยคำสั่ง pip3:
pip3 install pywifi
การใช้งาน
เนื่องจากโมดูลนี้ยังไม่มีหน้าเอกสารนอกจากตัวอย่างเพียงเล็กน้อย ผมจึงทำการแกะ api โมดูลนี้ด้วยตัวเอง และขอเขียนอธิบายในสิ่งที่ได้ใช้งานจริงครับ
การเรียกใช้งาน
import pywifi
import pywifi.const as const
การสแกนเครือข่ายที่มี
ใช้คำสั่ง
wifi.interfaces()[0].scan()แล้วรับผลลัพธ์ด้วยคำสั่ง
wifi.interfaces()[0].scan_results()
ตัวอย่าง
>>> iface = wifi.interfaces()[0]จะเห็นได้ว่า ผลลัพธ์ถูกส่งออกมาในรูปแบบ List สามารถดูว่าดึงข้อมูลรายละเอียดอะไรได้บ้างโดยคำสั่ง
>>> iface.scan()
>>> a=iface.scan_results()
>>> a
[<pywifi.profile.Profile object at 0x000001553015E320>, <pywifi.profile.Profile object at 0x00000155303BDC50>]
>>> dir(a[0])
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__r
educe_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'akm', 'auth', 'bssid', 'cipher', 'freq', 'key', 'process_akm', 'signal', 'ssid']
ผมลองดึงรายละเอียด wifi ใน a[0] มา
>>> a[0].ssid
'tontan5'
ssid คือ ชื่อไวไฟ
key คือ รหัส
bssid คือ Mac address ของ Access Point
และอื่น ๆ
การเชื่อมต่อ WiFi
หากผมต้องการเชื่อมต่อกับ WiFi ที่ชื่อ tontan5 รหัส abcd123 ใช้การเชื่อมต่อแบบ WPA 2 PSK สามารถเขียนโค้ดได้ดังนี้
iface = wifi.interfaces()[0]
profile1 = pywifi.Profile()
profile1.ssid = "tontan5"
profile1.auth = const.AUTH_ALG_OPEN # มีแบบ AUTH_ALG_OPEN และ AUTH_ALG_SHARED
profile1.akm.append(const.AKM_TYPE_WPA2PSK) # การยืนยัน key ดูเพิ่มเติมได้ที่ https://github.com/awkman/pywifi/blob/master/pywifi/const.py
profile1.cipher = const.CIPHER_TYPE_CCMP # cipher ดูเพิ่มเติมได้ที่ https://github.com/awkman/pywifi/blob/master/pywifi/const.py
profile1.key = 'abcd123' # key
tmp_profile = iface.add_network_profile(profile1) # เพิ่มโปรไฟล์
iface.connect(tmp_profile) # เชื่อมต่อเครือข่าย
ลบรายการเครือข่ายที่เคยเชื่อมต่อ
ใช้คำสั่ง
iface.remove_all_network_profiles()
ตรวจการเชื่อมต่อไวไฟ
ใช้คำสั่ง
iface.status() == const.IFACE_CONNECTED
จะคืนค่า True หากเชื่อมต่ออยู่ และจะคืนค่า False หากไม่ได้เชื่อมต่อเครือข่ายไวไฟ
รับชื่ออุปกรณ์เชื่อมต่อไวไฟ
>>> iface.name()
'Qualcomm Atheros AR9485WB-EG Wireless Network Adapter'
ยกเลิกการเชื่อมต่อไวไฟ
iface.disconnect()
แกะ API เพิ่มเติมได้จาก https://github.com/awkman/pywifi
เขียนโดย นาย วรรณพงษ์ ภัททิยไพบูลย์ ที่ https://python3.wannaphong.com/
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)