Python 操作windows的Wlan

前言

netsh介绍

Netsh(全称是network shell)简单来说 是命令行脚本工具,它允许从本地或远程显示或修改当前正在运行的计算机的网络配置。

关于net是的详细资料可以参考下面的连接:netsh命令_顺其自然~的博客-CSDN博客_netsh命令

由于今天我们只需要操作windows的WLAN,所以只需要了解netsh wlan的相关命令即可。

那么netsh wlan有哪些命令呢?

可以使用 netsh wlan ?来查看

 

 每条命令是做什么的后面都带有解释。若想查看每条子命令的用法直接在后面加?即可;

比如想知道netsh wlan show 的用法,只需输入:netsh wlan show ?

实践

一.连接之前连接过的WiFi

想用python实现此功能,首先需要知道具体的netsh命令,然后利用我之前文章里提到过的subprocess来执行命令,获取返回值即可。

首先,通过命令:netsh wlan show profiles 列出所有该电脑连接过的wifi,以我本机为例

以上列出的名称是我电脑连接过的wifi列表;然后需要知道连接wifi所需命令: netsh wlan connect name=SSID名,SSID就是wifi名称,命令实现如下:

 好了,知道具体命令后就可以用python的subprocess模块来实现自动连接功能了。

二.连接已连接过的wifi:

	def get_connected_wlans(self):
		cmdString = 'netsh wlan show profiles'

		try:
			process = subprocess.Popen(cmdString, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
		except Exception as err:
			raise AssertionError('Execute command: {:s} error,{:s}'.format(cmdString, err))

		resp = process.stdout.read().decode()

		wlans = re.findall(r'所有用户配置文件\s*\S{1}\s*(?P<name>\w*)', resp, re.S)

		if wlans is None:
			raise AssertionError('Not found connected wlan ssid in {:s}'.format(resp))

		return wlans


	def connect_to_wlan(self, ssid):
		ssid = str(ssid).strip()

		cmdString = 'netsh wlan connect name={:s}'.format(ssid)

		try:
			process = subprocess.Popen(cmdString, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
		except Exception as err:
			raise AssertionError('Execute command: {:s} error,{:s}'.format(cmdString, err))

		resp = process.stdout.read().decode()
		
		if '已成功完成连接请求' in resp:
			logger.info('Connect to {:s} success'.format(ssid))

此外,netsh命令还可获取当前PC搜索到的所有可用的wifi,具体命令是:

netsh wlan show networks

三.获取当前所有可用wlan:

	def get_all_accessible_wlans(self):
		"""
		Only for windows system
		"""
		self.disconnect_wlan_connection()
		cmdString = 'netsh wlan show networks'
		wlanItems = {}

		try:
			process = subprocess.Popen(cmdString, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
		except Exception as err:
			raise AssertionError('Execute command: {:s} error,{:s}'.format(cmdString, err))

		resp = process.stdout.read().decode('gbk')

		items = re.findall(r'(?P<ssid>[A-Z]+\s{1}\d{1,2})\s*\S{1}\s*(?P<name>\w*)', resp, re.S)
		#match = re.findall(r'SSID\s{1}\d{1,2}\s*\S{1}\s*(?P<name>\w*)', resp, re.S)

		if items is None:
			raise AssertionError('Not found wlan ssid in {:s}'.format(resp))

		for item in items:
			wlanItems[item[0]] = item[1]

		return wlanItems

除了以上,还可通过python脚本加netsh命令实现修改本机ip地址。命令格式为:

【netsh interface ip set address name="连接名称" static 新IP地址 子网掩码 网关】

这里我举个自己的例子,修改本机“WLAN”的ip地址为固定的地址。

四.修改本机WLAN的IP:

	def modify_wlan_ip(self, ipAddress, mask='255.255.255.0'):

		cmdString = 'netsh interface ip set address name="WLAN" source=static addr={:s} mask={:s}'.format(ipAddress, mask)

		try:
			process = subprocess.Popen(cmdString, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
		except Exception as err:
			raise AssertionError('Execute command: {:s} error,{:s}'.format(cmdString, err))

		resp = process.stdout.read().decode()
		
		# ToDo Validation

总结: 

总的来说,所有netsh命令实现的功能都可以用python进行封装,但是你需要清除netsh命令是什么。但是netsh命令相当庞大,具体命令还需要自己去查询,然后用subprocess模块封装成函数。

我这里就是简单封装一些wlan相关的功能成关键字,然后在robotframework中进行调用,从而实现自动化测试的功能。

以上内容只用于抛砖引玉,更多更复杂的功能还需各位自己去调研! 感谢阅读!! 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不过如此1951

如果有收获,可以打赏一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值