使用Python来自动反复拨号
宽带拨号直接点击连接就可以了,何必蛋疼的去写一段代码来拨号呢?难道学软件的都这么无聊。这个问题的答案当然是否,虽然自己常常蛋疼,但还没有到那种地步,先说说我们学校的网络情况。我们学校可以说上网费还真不是一般的贵,只能包时,不能包月,而且网络情况十分糟糕,服务态度也十分糟糕,这个在我们学校是出了名的。
每到用网高峰期,比如中午,更加厉害的是晚上,在那个时候才联网的话,你就得饱受错误代码之734之痛,由于上网人数过度,学校网络估计IP地址有限或者其他原因,在这种情况下很难连接上,唯一的办法是,一直在那里连啊连,运气一好,就挤上去了,不过是人都是很懒的,谁愿意一直守着电脑在那里无聊的点着连接呢,所以还是交给程序吧,Python已经安装了,所以决定用Python写,简单啊。
第一个想法就是用Python操作系统命令,这个在标准库中有os,所以比较简单,于是搞出了以下代码,具体意思看注释。
# -*- coding:utf-8 -*-
import os
import time
result = os.system("rasdial entyname user pass") # entyname:连接名称 user:用户帐号 pass:密码
while result: # 如果连接成功,result为0
time.sleep(10) # 暂停10s然后继续,当然你也可以不用
result = os.system("rasdial entyname user pass")
不过这种方法有个缺点,因为是调用的DOS,所以会出现窗口,为了避免这种情况,在网上找到了用pywin32来实现拨号的方法,不过要使用这种方法的话,必须先下载pywin32这个库,安装过后代码如下。
# -*- coding:utf-8 -*-
import win32ras
import time
def connect (dialname, account, passwd):
dial_params = (dialname, '', '', account, passwd, '')
return win32ras.Dial(None, None, dial_params, None)
def main():
dialname = '宽带连接' # 我的连接名称,在网络连接里可手动重命名
account = 'username'
passwd = 'pass'
handle, result = connect(dialname, account, passwd)
# handle为pid可用于后期结束,成功则result返回0,
# account为拨号帐号,passwd为密码
return result
result = main()
while result:
print("拨号失败,等待10s继续。。。。")
time.sleep(10) # 这个也可以不用
result = main()
有了上面的代码,就可以不用自己手动在那里重复拨号了,让程序自己来拨号吧,自己可以去冲个凉什么的,说不定就已经联上了,最后觉得Python不太普遍,所以写了个C语言版的,当然为了简单,使用的是Python的第一种解决方案,其实就是DOS中的rasdial
命令,参考代码如下。
#include <conio.h>
int main()
{
int result;
do{
result=system("rasdial entyname user pass") //entyname:连接名称 user:用户帐号 pass:密码;
}while(result!=0)
}
当然,这个是超级简化版,如果你要添加其他功能,自己修改吧,提供一个思路而已。我使用不来Windows的bat,或许可以使用bat来解决,可能更简单。最后,我用的是Python的第二种方法,效果不错,解放双手,哈哈。使用Python来做一些小事,还是非常方便的,人生苦短,我用Python。