hostapd.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/python
  2. #
  3. # Python class for controlling hostapd
  4. # Copyright (c) 2013, Jouni Malinen <j@w1.fi>
  5. #
  6. # This software may be distributed under the terms of the BSD license.
  7. # See README for more details.
  8. import os
  9. import time
  10. import logging
  11. import wpaspy
  12. logger = logging.getLogger(__name__)
  13. hapd_ctrl = '/var/run/hostapd'
  14. hapd_global = 'hostapd-global'
  15. class HostapdGlobal:
  16. def __init__(self):
  17. self.ctrl = wpaspy.Ctrl(hapd_global)
  18. def add(self, ifname):
  19. res = self.ctrl.request("ADD " + ifname + " " + hapd_ctrl)
  20. if not "OK" in res:
  21. raise Exception("Could not add hostapd interface " + ifname)
  22. def remove(self, ifname):
  23. self.ctrl.request("REMOVE " + ifname)
  24. class Hostapd:
  25. def __init__(self, ifname):
  26. self.ifname = ifname
  27. self.ctrl = wpaspy.Ctrl(os.path.join(hapd_ctrl, ifname))
  28. def request(self, cmd):
  29. logger.debug(self.ifname + ": CTRL: " + cmd)
  30. return self.ctrl.request(cmd)
  31. def ping(self):
  32. return "PONG" in self.request("PING")
  33. def set(self, field, value):
  34. logger.debug(self.ifname + ": SET " + field + "=" + value)
  35. if not "OK" in self.request("SET " + field + " " + value):
  36. raise Exception("Failed to set hostapd parameter " + field)
  37. def set_defaults(self):
  38. self.set("driver", "nl80211")
  39. self.set("hw_mode", "g")
  40. self.set("channel", "1")
  41. self.set("ieee80211n", "1")
  42. def set_open(self, ssid):
  43. self.set_defaults()
  44. self.set("ssid", ssid)
  45. def set_wpa2_psk(self, ssid, passphrase):
  46. self.set_defaults()
  47. self.set("ssid", ssid)
  48. self.set("wpa_passphrase", passphrase)
  49. self.set("wpa", "2")
  50. self.set("wpa_key_mgmt", "WPA-PSK")
  51. self.set("rsn_pairwise", "CCMP")
  52. def set_wpa_psk(self, ssid, passphrase):
  53. self.set_defaults()
  54. self.set("ssid", ssid)
  55. self.set("wpa_passphrase", passphrase)
  56. self.set("wpa", "1")
  57. self.set("wpa_key_mgmt", "WPA-PSK")
  58. self.set("wpa_pairwise", "TKIP")
  59. def set_wpa_psk_mixed(self, ssid, passphrase):
  60. self.set_defaults()
  61. self.set("ssid", ssid)
  62. self.set("wpa_passphrase", passphrase)
  63. self.set("wpa", "3")
  64. self.set("wpa_key_mgmt", "WPA-PSK")
  65. self.set("wpa_pairwise", "TKIP")
  66. self.set("rsn_pairwise", "CCMP")
  67. def enable(self):
  68. if not "OK" in self.ctrl.request("ENABLE"):
  69. raise Exception("Failed to enable hostapd interface " + self.ifname)
  70. def disable(self):
  71. if not "OK" in self.ctrl.request("ENABLE"):
  72. raise Exception("Failed to disable hostapd interface " + self.ifname)