123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #!/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.")
|