一键切换网关的程序
背景:
家里使用主路由 + 旁路由的组网方式,因为某些原因需要频繁切换网关;但是每次在电脑右下角找到网络,进入设置面板,手动更改网关非常的麻烦,因此搭建了一个一键切换网关的小程序。
另:如果大家想配置不同的组网方式,建议看https://www.youtube.com/watch?v=OPG47_wT3XI,这个链接,包含多种组网,可以根据自己的喜好配置;
接下来给出配置流程:
1.先放键盘监听的python源代码:
from pynput import keyboard
import os
import time
import wmi
import re
import ctypes, sys
def on_press(key):
if key == keyboard.Key.f20:
print("切换到旁路由模式,翻墙")
GateWay = '192.168.101.10'
os.popen(r'C:\Users\overs\Desktop\程序\网关修改为旁路由_科学上网.py')
elif key == keyboard.Key.f19:
print("切换到主路由模式")
GateWay = '192.168.101.1'
os.popen(r'C:\Users\overs\Desktop\程序\网关修改为主路由_玩游戏.py')
else:
pass
def on_release(key):
pass
with keyboard.Listener(on_press = on_press, on_release = on_release) as listener:
listener.join()
解释:
第一个函数检测键盘按键,如果按住f20的按键,则切换到旁路由模式,执行科学上网脚本;如果按住f19则切换到主路由网关,正常上网;如果按住其他按键,不做任何处理;
最下面的with XXX,是持续监听键盘的按键,然后将监听的数据传入on_press函数;
其中对每个键盘的key,都能在函数keyborad.Key里面找到对应的值;如果想要设置不同的按键反馈,修改==后面的值即可;
注意!!!wmi,ctypes的导入可能出错,注意python版本和包的版本;
2.接下来放网关切换的python源代码:
import os
import time
import wmi
import re
import ctypes, sys
def main():
IP = '192.168.101.16'
GateWay = '192.168.101.10'
nic_configs = wmi.WMI().Win32_NetworkAdapterConfiguration(IPEnabled=True)
nic = None
for obj in nic_configs:
ip = re.findall("192.\\d+.\\d+.\\d+", obj.IPAddress[0])
print(ip)
if ip[0] == IP:
nic = obj
if not nic:
print('未找到本机IP,请确认IP地址无误')
else:
#nic = nic_configs[0]
res = nic.SetGateways(DefaultIPGateway = [GateWay],GatewayCostMetric=[1])
if res[0] == 0:
print('网关已修改至:', GateWay)
else:
print('返回码:',res[0])
print('请使用管理员权限尝试')
input('Press Enter to exit...')
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
if is_admin():
main()
else:
# Re-run the program with admin rights
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
整体的逻辑是,先判断当前程序是否是以管理员运行,如果不是的话,重新以管理员权限运行函数;
接下来,使用wmi函数获取网络的配置信息;并将本机配置的IP地址对应的网关修改至目标网关;
这里要求预先输入本机的IP和目标网关,写死在main函数里面了,主要还是图方便,因为这两个值一般不会变化;如果想切换到不同的网关,把GateWay里面的变量修改即可;
3.将1的源代码复制,修改后缀由py变成pyw,这样可以使python程序不在前台显示运行,在后台运行的话更为方便;
4.创建开机自启的任务:
a.本地按win + r,打开命令框,输入taskschd.msc进入任务计划程序;创建一个开机自启的基本任务即可
b.在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 文件夹中,新增NetGateSwitch.bat文件,文件内容是
f:
cd F:\Script
start NetGateSwitch.pyw
两种方式都可以让程序开机自启
最终效果:
点击F20,网关自动切换到旁路由网关;点击F19,网关切换回主路由网关