16 ธันวาคม 2559

Published ธันวาคม 16, 2559 by with 0 comment

เขียนโปรแกรมเชื่อมต่อเครือข่าย WiFi ด้วย pywifi

เขียนโปรแกรมเชื่อมต่อเครือข่าย WiFi ด้วย pywifi

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปเขียนโปรแกรมเชื่อมต่อเครือข่าย 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]
>>> iface.scan()
>>> a=iface.scan_results()
>>> a
[<pywifi.profile.Profile object at 0x000001553015E320>, <pywifi.profile.Profile object at 0x00000155303BDC50>]
จะเห็นได้ว่า ผลลัพธ์ถูกส่งออกมาในรูปแบบ List สามารถดูว่าดึงข้อมูลรายละเอียดอะไรได้บ้างโดยคำสั่ง
>>> 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 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)