怎样用python判断当前是无线网络连接,还是有线网络连接,并做内外网切换?

windows系统,安装无线网卡,既可以连接wifi连接内网,也可以有线连接内网。怎样用python判断当前是无线网络连接,还是有线网络连接?并做到内外网切换?
谢谢

阅读 8.5k
4 个回答

如果是dhcp动态获取ip的话,可以考虑,分别读取下两张网卡的ip,如果可以正常获取到ip,说明网卡工作是正常的。如果两张都有ip,那就按需要禁用其中一张就可以

调用ipconfig /all命令并且分析输出,里面会有windows起的网络适配器名字和它当前的网络配置状况,
输出格式就不贴了,自己运行一下就能看到
没有提示“媒体已断开连接的”,并且有具体IP地址、默认网关等参数的,可以认为是当前可用适配器
注意可用适配器可以不止一个

一个快速粗暴,不考虑通用性的做法是

#切换到无线网
ipconfig /release *以太网适配器*
ipconfig /renew *无线局域网适配器*

#切换到有线
ipconfig /release *无线局域网适配器*
ipconfig /renew *以太网适配器*

除了直接执行系统命令,还可以用psutil获取网络接口信息:

psutil.net_if_stats()返回所有接口的名称和状态,结果中的isup可以判断网络是否启用。
psutil.net_if_addrs()返回所有接口地址信息。
(这两个函数不会返回Windows下被禁用的接口。)

要启用/禁用网络接口,运行系统命令就行了。

最简单的办法自然是用 subprocess,netsh 和 ipconfig 、VBS+WMI 等等。这些工具都是现成的,你要做的就是解析下这些工具输出的内容。


或者也可以再深入一点,更底层一点的层面实现这些功能。大概就是三个方向:Win32API,WMI,WinAPI 上层封装的跨平台网络库如 libnl

希望有帮助。

推荐问题