【问题标题】:List All Wireless Networks Python for PC列出所有用于 PC 的无线网络 Python
【发布时间】:2015-10-30 08:28:06
【问题描述】:

我正在尝试找出如何在 Python 中列出所有可用的无线网络。我使用的是 Windows 8.1。

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

请告诉我打印列表的代码。

【问题讨论】:

标签: python wifi wireless


【解决方案1】:

你需要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

【讨论】:

  • ["netsh", "wlan", "show", "all"] 提供更多信息,包括接入点 MAC 地址 (BSSIDD),如果有人需要的话。
  • @LuWi 我尝试使用“all”但失败:'ascii'编解码器无法解码位置 5996 中的字节 0xc3:序数不在范围内(128)
  • @rodrigorf 您可以尝试将文本解码为 Unicode:results = results.decode("utf8")
  • @weirdev 我收到此错误 FileNotFoundError: [Errno 2] No such file or directory: 'netsh': 'netsh', 我正在使用 linux
  • @3bu1 这个答案专门针对 Windows,因为这就是 OP 所要求的。对于 Linux,您可以通过使用适当的命令调用 subprocess.check_output() 来执行类似的操作,以便您的发行版列出网络。您必须以不同方式解析输出,因为它的格式与 windows 输出不同。
【解决方案2】:

这是一个古老的问题,但即使在当时,接受的答案也可能更加 Pythonic - 例如,

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 任务栏上的网络图标手动执行此操作。 :-(
【解决方案3】:

c:\netsh

C:\netsh\wlan

c:\netsh\wlan)Show all

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多