Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Print Wi-Fi connection details saved in NetworkManager as a QR code supported
- on Android (with Barcode Scanner or NeoReader) and iOS 11+.
- Usage:
- python3 qifi.py [SSID]
- # (by default, currently active network will be used)
- """
- import dbus # sudo apt install python3-dbus
- from qrcode import QRCode # pip install qrcode
- def get_all_props(obj, type):
- props = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
- return props.GetAll(type)
- def get_connection_info(ssid=None):
- bus = dbus.SystemBus()
- if ssid is None:
- nm_obj = bus.get_object(
- "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager"
- )
- nm_props = get_all_props(nm_obj, "org.freedesktop.NetworkManager")
- for act_conn_path in nm_props["ActiveConnections"]:
- act_conn_obj = bus.get_object(
- "org.freedesktop.NetworkManager", act_conn_path
- )
- act_conn_props = get_all_props(
- act_conn_obj, "org.freedesktop.NetworkManager.Connection.Active"
- )
- if act_conn_props["Type"] == "802-11-wireless":
- break
- conn_obj = bus.get_object(
- "org.freedesktop.NetworkManager", act_conn_props["Connection"]
- )
- conn = dbus.Interface(
- conn_obj, "org.freedesktop.NetworkManager.Settings.Connection"
- )
- settings = conn.GetSettings()
- else:
- settings_obj = bus.get_object(
- "org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings"
- )
- settings_props = get_all_props(
- settings_obj, "org.freedesktop.NetworkManager.Settings"
- )
- for conn_path in settings_props["Connections"]:
- conn_obj = bus.get_object("org.freedesktop.NetworkManager", conn_path)
- conn = dbus.Interface(
- conn_obj, "org.freedesktop.NetworkManager.Settings.Connection"
- )
- try:
- settings = conn.GetSettings()
- except:
- continue
- if settings["connection"]["type"] != "802-11-wireless":
- continue
- conn_ssid = "".join(chr(i) for i in settings["802-11-wireless"]["ssid"])
- if conn_ssid == ssid:
- break
- else:
- raise KeyError("No network with SSID " + ssid)
- secrets = conn.GetSecrets("802-11-wireless-security")
- return {
- "ssid": "".join(chr(i) for i in settings["802-11-wireless"]["ssid"]),
- "algo": (
- "WEP"
- if settings["802-11-wireless-security"]["key-mgmt"].startswith("wep")
- else "WPA"
- ),
- "psk": secrets["802-11-wireless-security"]["psk"],
- }
- if __name__ == "__main__":
- import sys
- ssid = sys.argv[1] if len(sys.argv) > 1 else None
- conn_info = get_connection_info(ssid)
- qr = QRCode()
- qr.add_data(
- f"WIFI:S:{conn_info['ssid']};T:{conn_info['algo']};P:{conn_info['psk']};;"
- )
- qr.print_ascii(tty=True)
- print("")
- print(f" Network name: {conn_info['ssid']}")
- print(f" Password: {conn_info['psk']}")
- print("")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement