来源:GitHub大本营
过年在家,有很多亲戚来拜年,也有朋友来玩,小编发现一个现象,就是他们总会问你家里的wifi和密码是啥,他们输入密码时可能会输入错误,例如大小写之类,最后可能还是我给他们输入。

小编平时也比较喜欢在Github上逛,偶然间发现了一个项目,能解决这个问题!
这个项目的名字叫做wifi-password,这个项目可以让你快速获取当前连接的wifi密码,并且能生成二维码,通过扫码即可连接wifi(无需输入密码),这下可好了,以后也别问啥密码了,直接扫码连接就完事了!
如图:

接下来看看如何操作使用!
可以选择使用pip安装:
python3 -m pip install --user wifi-password
也可以选择使用git安装:
$ git clone https://github.com/sdushantha/wifi-password
$ cd wifi-password
$ python3 setup.py install
如果已经安装成功,使用如下命令即可快速获取当前wifi的密码:
如果想生成二维码图,输入如下命令:
wifi-password --qrcode --image

然后把二维码图片打印贴墙上或者保存收藏即可!
项目地址在:
https://github.com/sdushantha/wifi-password
该项目主要代码如下(100+行,并不复杂,建议大家研究研究原理!):
#!/usr/bin/env python3
#
# by Siddharth Dushantha
#
import pathlib
import sys
import subprocess
import argparse
from shutil import which
import re
import os
import qrcode
import colorama
__version__ = "1.1.0"
def run_command(command):
env = os.environ.copy()
env["LANG"] = "C"
output, _ = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, shell=True, env=env).communicate()
return output.decode("utf-8"
).rstrip('\r\n')
def print_error(text):
print(f"ERROR: {text}", file=sys.stderr)
sys.exit(1)
def get_ssid():
if sys.platform == "darwin":
airport = pathlib.Path("/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport")
if not airport.is_file():
print_error(f"Can't find 'airport' command at {airport}")
ssid = run_command(f"{airport} -I | awk '/ SSID/ {{print substr($0, index($0, $2))}}'")
elif sys.platform == "linux":
if which("nmcli") is None:
print_error("Network Manager is required to run this program on Linux.")
ssid = run_command("nmcli -t -f active,ssid dev wifi | egrep '^yes:' | sed 's/^yes://'")
elif sys.platform == "win32":
ssid = run_command("netsh wlan show interfaces | findstr SSID")
if ssid == "":
print_error("SSID was not found")
ssid = re.findall(r"[^B]SSID\s+:\s(.*)", ssid)[0]
return ssid
def get_password(ssid):
if ssid == "":
print_error("SSID is not defined")
if sys.platform == "darwin":
password = run_command(f"security find-generic-password -l \"{ssid}\" -D 'AirPort network password' -w")
elif sys.platform == "linux":
# Check if the user is running with super user privilages
if os.geteuid() != 0:
password = run_command(f"sudo nmcli -s -g 802-11-wireless-security.psk connection show '{ssid}'")
else:
password = run_command(f"nmcli -s -g 802-11-wireless-security.psk connection show '{ssid}'")
elif sys.platform == "win32":
password = run_command(f"netsh wlan show profile name=\"{ssid}\" key=clear | findstr Key")
password = re.findall(r"Key Content\s+:\s(.*)", password)[0]
if password == "":
print_error("Could not find password")
return password
def generate_qr_code(ssid, password, image=False):
# Source: https://git.io/JtLIv
text = f"WIFI:T:WPA;S:{ssid};P:{password};;"
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)
print(f"QR code has been saved to {file_name}")
else:
# This will emulate support for ANSI escape sequences, which is needed
# in order to display the QR code on Windows
colorama.init()
qr.make()
qr.print_tty()
def main():
parser = argparse.ArgumentParser(usage="%(prog)s [options]")
parser.add_argument("--qrcode", "-q",
action="store_true",
default=False,
help="Generate a QR code")
parser.add_argument("--image", "-i",
action="store_true",
default=False,
help="Create the QR code as image instead of showing it on the terminal (must be used along with --qrcode)")
parser.add_argument("--ssid", "-s",
help="Specify a SSID that you have previously connected to")
parser.add_argument("--version",
action="store_true",
help="Show version number")
args = parser.parse_args()
if args.version:
print(__version__)
sys.exit()
if args.ssid is None:
args.ssid = get_ssid()
password = get_password(args.ssid)
if args.qrcode:
generate_qr_code(args.ssid, password, image=args.image)
return
print(password)
if __name__ == "__main__":
main()
目前已经1.4k star~
觉得作者的项目不错,就给他点个star吧!
重磅!Python交流群已成立
为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!)

▲长按扫码