社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

获取wifi密码?Github的这个项目火了!

Python爱好者社区 • 5 年前 • 1445 次点击  

来源: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


如果想生成二维码图,输入如下命令:

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吧!

感谢阅读

推荐阅读:

1:真实的上海IT圈:张江男vs漕河泾男

2:真实的北京IT圈:后厂村姑 vs 后厂村花?

3:为什么你的提问没人解答?

4:Python爱好者社区历史文章合集


重磅!Python交流群已成立



公众号运营至今,离不开小伙伴们的支持。
为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。
群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!)
需要进群的朋友,可长按扫描下方二维码。


▲长按扫码

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/108090