Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.09 KB | None | 0 0
  1. """
  2. Print Wi-Fi connection details saved in NetworkManager as a QR code supported
  3. on Android (with Barcode Scanner or NeoReader) and iOS 11+.
  4.  
  5. Usage:
  6. python3 qifi.py [SSID]
  7. # (by default, currently active network will be used)
  8. """
  9.  
  10. import dbus # sudo apt install python3-dbus
  11. from qrcode import QRCode # pip install qrcode
  12.  
  13.  
  14. def get_all_props(obj, type):
  15. props = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
  16. return props.GetAll(type)
  17.  
  18.  
  19. def get_connection_info(ssid=None):
  20. bus = dbus.SystemBus()
  21.  
  22. if ssid is None:
  23. nm_obj = bus.get_object(
  24. "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager"
  25. )
  26. nm_props = get_all_props(nm_obj, "org.freedesktop.NetworkManager")
  27.  
  28. for act_conn_path in nm_props["ActiveConnections"]:
  29. act_conn_obj = bus.get_object(
  30. "org.freedesktop.NetworkManager", act_conn_path
  31. )
  32. act_conn_props = get_all_props(
  33. act_conn_obj, "org.freedesktop.NetworkManager.Connection.Active"
  34. )
  35. if act_conn_props["Type"] == "802-11-wireless":
  36. break
  37.  
  38. conn_obj = bus.get_object(
  39. "org.freedesktop.NetworkManager", act_conn_props["Connection"]
  40. )
  41. conn = dbus.Interface(
  42. conn_obj, "org.freedesktop.NetworkManager.Settings.Connection"
  43. )
  44. settings = conn.GetSettings()
  45.  
  46. else:
  47. settings_obj = bus.get_object(
  48. "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings"
  49. )
  50. settings_props = get_all_props(
  51. settings_obj, "org.freedesktop.NetworkManager.Settings"
  52. )
  53. for conn_path in settings_props["Connections"]:
  54. conn_obj = bus.get_object("org.freedesktop.NetworkManager", conn_path)
  55. conn = dbus.Interface(
  56. conn_obj, "org.freedesktop.NetworkManager.Settings.Connection"
  57. )
  58. try:
  59. settings = conn.GetSettings()
  60. except:
  61. continue
  62. if settings["connection"]["type"] != "802-11-wireless":
  63. continue
  64. conn_ssid = "".join(chr(i) for i in settings["802-11-wireless"]["ssid"])
  65. if conn_ssid == ssid:
  66. break
  67. else:
  68. raise KeyError("No network with SSID " + ssid)
  69.  
  70. secrets = conn.GetSecrets("802-11-wireless-security")
  71.  
  72. return {
  73. "ssid": "".join(chr(i) for i in settings["802-11-wireless"]["ssid"]),
  74. "algo": (
  75. "WEP"
  76. if settings["802-11-wireless-security"]["key-mgmt"].startswith("wep")
  77. else "WPA"
  78. ),
  79. "psk": secrets["802-11-wireless-security"]["psk"],
  80. }
  81.  
  82.  
  83. if __name__ == "__main__":
  84. import sys
  85. ssid = sys.argv[1] if len(sys.argv) > 1 else None
  86. conn_info = get_connection_info(ssid)
  87.  
  88. qr = QRCode()
  89. qr.add_data(
  90. f"WIFI:S:{conn_info['ssid']};T:{conn_info['algo']};P:{conn_info['psk']};;"
  91. )
  92. qr.print_ascii(tty=True)
  93.  
  94. print("")
  95. print(f" Network name: {conn_info['ssid']}")
  96. print(f" Password: {conn_info['psk']}")
  97. print("")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement