如何不借助网络工具获取Ubuntu、Raspbian系统当前连接的本地网络SSID
嘿,完全理解你不想依赖nmcli、iwgetid这类现成工具,想直接从系统底层文件里抠出当前连接SSID的需求!在Ubuntu和Raspbian里,确实有几个靠谱的文件路径能帮你做到这一点,我给你详细说说:
NetworkManager运行时活跃连接文件
系统里的NetworkManager会把当前正在使用的连接信息,实时存在/run/NetworkManager/active-connections/这个目录下。这里面的每个文件对应一个当前活跃的网络连接,你直接用cat读取这些文件,然后过滤ssid=字段就能拿到当前连接的SSID了。比如执行:cat /run/NetworkManager/active-connections/* | grep ssid=这个目录下的文件名可能会随连接变化,但内容格式是固定的,直接找
ssid=后面的内容就行——这其实就是nmcli这类工具背后读取的数据源之一哦。无线网卡的debugfs节点(需要root权限)
如果你想更深入到内核层面,还可以通过debugfs获取。首先找到你的无线网卡接口名(比如常见的wlan0),然后先确认debugfs是否挂载了,如果没挂载的话,先执行:sudo mount -t debugfs none /sys/kernel/debug接着找到对应网卡的phy设备名称,比如通过
cat /sys/class/net/wlan0/phy80211/name得到phy0,然后去读取/sys/kernel/debug/ieee80211/phy0/netdev:wlan0/assoc文件,里面包含了当前关联的AP的详细信息,其中就有SSID内容。不过这个路径需要root权限才能访问哦。wpa_supplicant运行时状态文件(如果用它管理连接)
要是你的系统是用wpa_supplicant来管理无线连接的,那/run/wpa_supplicant/目录下会有对应无线接口的socket文件。不过这个是进程间通信的socket,没法直接用cat读取,但你可以通过查看wpa_supplicant的运行时状态文件来获取——不过相对来说,前面两种方法会更直接贴合你的需求。
总结一下,最方便又不需要额外权限的就是第一种方法,直接读NetworkManager的运行时活跃连接文件,完全符合你不想用网络工具的需求~
备注:内容来源于stack exchange,提问作者Shivam Saxena

