Python 实现断网自动重连

来所里一年了,终于有了一台电脑,是小乐师兄淘汰给我的,很开心,因为用它编程智商有加成。但是问题就来了,我平时人在怀柔啊,怎么才能用所里的电脑搞科研呢?远程自然是很简单的,但是所里每天晚上三天钟会可耻地断一次网,而且断网必须要登录才能重连,为了不麻烦师兄,同时也让我周末回来显得很忙的样子,我开始鼓捣Python自动联网。

扯远了...道理很简单,就是每隔一段时间ping一下百度,判断网络状态,没有联网的话,就模仿浏览器发一条Post给服务器。

先从最基本的功能说起: 发送Post给服务器。这里你需要知道你登录的时候到底发送了什么,大概看一下登录页面的代码:
 function do_login()
 { 	
 	var uname=document.form1.uname.value;
 	var pass=document.form1.pass.value;
 	if(uname=="")
 	{
 		alert("请填写用户名");
 		document.form1.uname.focus();
 		return;
 	}
 	
 	if(pass=="")
 	{
 		alert("请填写密码");
 		document.form1.pass.focus();
 		return;
 	}
 	//密码md5加密传送
 	var pass1=hex_md5(pass);
 	var pass2=pass1.substr(8,16);
 	
 	var drop=(document.form1.drop.checked==true)?1:0;
 	var data="username="+uname+"&password="+pass2+"&drop="+drop+"&type=1&n=100";

 	var con=postData("/cgi-bin/do_login", "post", data);
 	//alert(con); 
 	var p=/^[\d]+$/;
 	if(p.test(con))
 	{
 		document.form1.uid.value=con;
 		if(document.form1.save_me.checked) //写COOKIE
 		{
 			setCookie("srun_login",uname+"|"+pass);
 		}
 		else
 		{
 			delCookie("srun_login");
 		}
 		if(location.search != "")
 		{
 			window.open("login.html"+location.search+","+con+","+uname,"user_login","width=428,height=296"); 	
 		}
 		else
 		{
 			window.open("login.html?"+location.search+","+con+","+uname,"user_login","width=428,height=296");
 		}
 		setTimeout("jump_to(url)", 1000);	
 		return;
 	}	
 	switch(con)
 	{
 			
 	} 	
 }
可以发现,
var data="username="+uname+"&password="+pass2+"&drop="+drop+"&type=1&n=100";

这一句,就是Post的内容了,当然密码是MD5加密过后的,这个随便找找也没有问题的

接下来是 检测网络是否连接,我采用Ping百度的办法,毕竟这是百度最大的功能之一,网上参考一下别人的代码,自己写了一个:
def ping(user,password):
        fnull = open(os.devnull, 'w')
        return1 = subprocess.call('ping 61.135.169.125', shell = True, stdout = fnull, stderr = fnull)
        if return1:
                print_ts('Internet not connected!')
                print_ts('Connecting now...')
                postLogin('http://159.226.39.22/cgi-bin/do_login',user,password)
                ping(user,password)
        else:
                print_ts('Internet connected!')
        fnull.close()

最后是定时运行,需要用到Python的time模块
def print_ts(message):
        print "[%s] %s"%(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), message)
def run(interval,user,password):
        print_ts("-"*50)
        print_ts ('Copyright (c) Huntley')
        print_ts ('Email:zhangzihao@ict.ac.cn')
        print_ts ('')
        print_ts("Check the Internet every %s seconds."%interval)
        print_ts("-"*50)
        while True:
                try:
                        time_remaining = interval-time.time()%interval
                        time.sleep(time_remaining)
                        print_ts("Checking Internet connection...")
                        ping(user,password)
                        print_ts("Next check will start after %s seconds"%interval)
                except Exception, e:
                        print e


最后,附一下完整代码
#!/usr/bin/env python
#coding=utf8

import urllib
import urllib2
import hashlib
import subprocess
import os
import time

def getPass(password):
        pass1 = hashlib.md5()
        pass1.update(password)
        pass2 = pass1.hexdigest()
        return pass2[8:24]

def postLogin(url,user,password):
        pass2 = getPass(password)
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393'}
        post_data = {'username':user,'password':pass2,'drop':'0','type':'1','n':'100'}
        post_data = urllib.urlencode(post_data)
        req = urllib2.Request(url, post_data, headers)
        response = urllib2.urlopen(req)

def ping(user,password):
        fnull = open(os.devnull, 'w')
        return1 = subprocess.call('ping 61.135.169.125', shell = True, stdout = fnull, stderr = fnull)
        if return1:
                print_ts('Internet not connected!')
                print_ts('Connecting now...')
                postLogin('http://159.226.39.22/cgi-bin/do_login',user,password)
                ping(user,password)
        else:
                print_ts('Internet connected!')
        fnull.close()

def print_ts(message):
        print "[%s] %s"%(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), message)
def run(interval,user,password):
        print_ts("-"*50)
        print_ts ('Copyright (c) Huntley')
        print_ts ('Email:zhangzihao@ict.ac.cn')
        print_ts ('')
        print_ts("Check the Internet every %s seconds."%interval)
        print_ts("-"*50)
        while True:
                try:
                        time_remaining = interval-time.time()%interval
                        time.sleep(time_remaining)
                        print_ts("Checking Internet connection...")
                        ping(user,password)
                        print_ts("Next check will start after %s seconds"%interval)
                except Exception, e:
                        print e

# 设置联网检查时间间隔
interval = 600
# 设置用户名
user = 'TYPE YOUR USERNAME HERE'
# 设置密码
password = 'TYPE YOUR PASSWORD HERE'
# 运行
run(interval,user,password)

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编写一个用Python编写的断网程序主要涉及以下几个步骤。 1. 导入所需的模块 在Python程序中,可以使用`import`语句来导入所需的模块,例如`subprocess`模块用于执行系统命令,`time`模块用于设置等待时间。 2. 执行断网命令 通过执行一条断网命令来实现断网的效果。在Windows系统中,可以使用`ipconfig /release`命令来释放当前连接的IP地址;在Linux系统中,可以使用`sudo ifconfig eth0 down`命令来禁用网络接口。 3. 设置等待时间 为了在断网后给用户一些时间来确认断网状态,可以使用`time.sleep()`函数设置程序的等待时间。这个函数接受一个参数,表示等待的秒数。 4. 恢复网络连接 在断网状态被确认后,可以执行相应的命令来恢复网络连接。在Windows系统中,可以使用`ipconfig /renew`命令来重新获取IP地址;在Linux系统中,可以使用`sudo ifconfig eth0 up`命令来启用网络接口。 5. 编写主程序逻辑 将上述步骤整合在一起,编写一个主程序逻辑。可以使用`while`循环来让程序一直执行断网和恢复网络连接的操作,直到用户选择退出。 下面是一段示例代码: ```python import subprocess import time def disconnect(): if subprocess.call("ipconfig /release", shell=True) == 0: # Windows命令 print("网络断开") else: print("断网失败") def reconnect(): if subprocess.call("ipconfig /renew", shell=True) == 0: # Windows命令 print("网络已恢复") else: print("恢复网络失败") while True: choice = input("请选择操作(1-断网,2-恢复网络,0-退出):") if choice == "1": disconnect() time.sleep(5) # 等待5秒 elif choice == "2": reconnect() time.sleep(5) # 等待5秒 elif choice == "0": break else: print("请输入有效的选项") ``` 以上代码仅作为示例,实际的断网程序可以根据操作系统的不同采用相应的系统命令来执行断网和恢复网络连接的操作。同时,也可以根据实际需求对程序进行扩展,例如添加异常处理、日志记录等功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值