#!/usr/bin/env python # -*- encoding: utf-8 -*- ''' @Contact : liuyuqi.gov@msn.cn @Time : 2021/01/28 20:47:55 @License : Copyright © 2021 liuyuqi.gov@msn.cn. All Rights Reserved. Licensed under the Apache 2.0 license. @Desc : wifi 转化为 QRcode 方便扫码连接wifi+ ''' import re,os,sys import qrcode import logging import pathlib import subprocess from shutil import which # 是否输出图片 image=True def getSSID(): if sys.platform == "darwin": airport = pathlib.Path( "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport") if not airport.is_file(): logging.error(f"Can't find 'airport' command at {airport}") ssid = run_command( f"{airport} -I | awk '/ SSID/ {{print substr($0, index($0, $2))}}'") ssid = ssid.replace("\n", "") elif sys.platform == "linux": if which("iwgetid") is not None: logging.error("Can't find the 'iwgetid' command") ssid = run_command("iwgetid -r") ssid = ssid.replace("\n", "") elif sys.platform == "win32": ssid = run_command( "netsh wlan show interfaces | findstr SSID").replace("\r", "") ssid = re.findall(r"[^B]SSID\s+:\s(.*)", ssid)[0] return ssid def getPasswordWithSSID(ssid): if sys.platform == "darwin": password = run_command( f"security find-generic-password -l \"{ssid}\" -D 'AirPort network password' -w") password = password.replace("\n", "") elif sys.platform == "linux": # Check if the user is running with super user privilages if os.geteuid() != 0: logging.error(f"You need to run '{sys.argv[0]}' as root") password = run_command(f"cat /etc/NetworkManager/system-connections/{ssid} | grep psk=") password = password.replace("\n", "") elif sys.platform == "win32": password = run_command(f"netsh wlan show profile name=\"{ssid}\" key=clear | findstr Key").replace("\r", "") password = re.findall(r"Key Content\s+:\s(.*)", password)[0] if password == "": logging.error("Cound not find password") return password def genQRCode(text): qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4) qr.add_data(text) if image: file_name = ssid.replace(" ", "_") + ".png" img = qr.make_image() img.save(file_name) logging.info(f"QR code has been saved to {file_name}") else: qr.make() qr.print_tty() def run_command(command): output, _ = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=True).communicate() return output.decode("utf-8") if __name__ == "__main__": ssid = getSSID() if(ssid != ""): password = getPasswordWithSSID(ssid) text = f"WIFI:T:WPA;S:{ssid};P:{password};;" genQRCode(text) else: logging.info("Please connect to Wifi.")