列出PC上的所有无线网络Python代码

9

我正在尝试查找如何在Python中列出所有可用的无线网络,我的操作系统是Windows 8.1。

是否有内置函数或库可以调用?

请友善地展示一下打印列表的代码。


请查看此文件中的scan()函数:https://github.com/changyuheng/pywinwifi/blob/master/src/winwifi/main.py - Johann Chang
3个回答

20

您需要使用subprocess模块和Windows命令:

import subprocess
results = subprocess.check_output(["netsh", "wlan", "show", "network"])

额外获取SSID的小技巧。

results = results.decode("ascii") # needed in python 3
results = results.replace("\r","")
ls = results.split("\n")
ls = ls[4:]
ssids = []
x = 0
while x < len(ls):
    if x % 5 == 0:
        ssids.append(ls[x])
    x += 1
print(ssids)

https://docs.python.org/2/library/subprocess.html


1
["netsh", "wlan", "show", "all"] 提供更多信息,包括接入点 MAC 地址(BSSIDD),如果有人需要的话。 - LuWi
1
@LuWi 我尝试使用 "all" 但是出现了错误:'ascii' codec can't decode byte 0xc3 in position 5996: ordinal not in range(128)。 - rodrigorf
@rodrigorf 你可以尝试将文本解码为Unicode:results = results.decode("utf8") - weirdev
1
@weirdev 我得到了这个错误 FileNotFoundError: [Errno 2] No such file or directory: 'netsh': 'netsh',我正在使用 Linux。 - 3bu1
@3bu1 这个答案是针对 Windows 的,因为这就是 OP 所询问的。对于 Linux,您可以通过使用适合您发行版的正确命令调用 subprocess.check_output() 来列出网络。您将不得不以不同的方式解析输出,因为它的格式与 Windows 输出不同。 - weirdev

9
这是一个来自早期的问题,但即便在当时,被认可的答案也可以更加符合Python风格,例如:
r = subprocess.run(["netsh", "wlan", "show", "network"], capture_output=True, text=True).stdout
ls = r.split("\n")
ssids = [k for k in ls if 'SSID' in k]

如果你只想将SSID名称列在列表中,请将ssids =行更改为:
ssids = [v.strip() for k,v in (p.split(':') for p in ls if 'SSID' in p)]

完美运行。然而,Windows有时需要被激活以显示最近激活的SSID。有什么办法吗?我正在通过单击Windows任务栏上的网络图标手动执行此操作。 :-( - Sany

-4

c:\netsh

C:\netsh\wlan

c:\netsh\wlan)显示全部


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接