在服务器命令行下登录校园网

在服务器终端下登录校园网关(东北大学)

项目动机

​ 实验室服务器有时候需要上网下载东西(东大的服务器校园网不登录也可以下载一些pip源和默认源的资源),但是我们需要登录网关才能访问外网,当然也有使用w3m 等工具上网的办法,但是实测并不美好,所以想自己写个小东西可以在命令行登录网关。所以,开工。


1 准备工作

1.1设计思路

​ 使用python实现表单的提交,包括填写用户名密码 以及submit 操作

1.2环境准备

​ 就在服务器上进行测试,自带Python2.7 以及urllib urllib2

​ 需要先学习一点urllib 的使用知识

​ 测试系统为Ubuntu 16.04

​ 需要你有一点Python基础和Linux基础


2 开始实现

2.1 登录

2.1.1 实现过程

登录操作

按照urllib 的使用方法,先用字典变量存储我们要登录的账户和密码,也就是我们要提交的表单的内容,具体表单内容可以在ipgw.neu.edu.cn的页面源代码找到。

判断是否登录成功

把request的页面转化成字符串,然后找到在登录成功后独有的一部分字符串,比如代码的第27行,就是进行这个操作。

2.1.2 遇到的问题

  • 表单中仅仅使用用户名和密码无法正常登录,这是仔细查看网页源代码,会发现表单中还有好几项在代码的前一段。也就是<input... 开头的部分。所以我们在usernamepassword 这两项之外还要把这些额外的内容添加上。
  • 本来在登录检测的时候想使用网络已连接 来进行str.find() 但是服务器报错了,它无法识别中文,考虑到不同系统环境,这里我使用的是包含它的div 标记中的样式来检测,这个在登录不成功的情况下是没有的。

2.2 注销

2.2.1 实现过程

登录后的页面同样有一个表单,而且submit 是一个注销按钮,所以简单修改我们的登录程序,就可以实现注销。

2.2.2 遇到的问题

  • 一开始以为只要注销就行了,但是实际上,注销的表单是有要求username 和ip地址的,但是不光我一个人会登录网关,所以用户名是可变的,而且要和之前的登录联系起来。所以这里让登录程序创建一个文件temp_username.dat 来临时存储当前登录的校园网账号,然后注销程序来读取这个文件中的username

3 源码

3.1 ConnectNeu.py

import urllib2  
import urllib  

class Loginer():  
    def __init__(self, username, password):  
        self.loginUrl = 'http://202.118.1.87/srun_portal_pc.php?ac_id=1&'  
        self.username = username  
        self.password = password  
        self.openner = urllib2.build_opener()  

    def login(self):  
        postdata = {  
            'username': self.username,  
            'password': self.password,  
            'action': 'login',  
            'ac_id': '1',
            'user_ip':'',
            'nas_ip':'',
            'user_mac':'',
            'url':''  
        }  
        postdata = urllib.urlencode(postdata)  
        myRequest = urllib2.Request(url=self.loginUrl, data=postdata)  

        result = self.openner.open(myRequest).read()
        resStr=str(result)
        ind=resStr.find('font-weight:bold;color:orange') 
        if(ind!=-1):
            print 'connected successfully' 
        else:
            print 'connected faild!! Maybe your username or password is wrong!'

def main():  
    username=raw_input('Enter your username:')
    password=raw_input('Enter your password:')
    file=open('temp_username.dat','w')
    file.write(username)
    file.close()
    l = Loginer(username,password)
    l.login()  

if __name__ == '__main__':  
    main()  
    print 'done'

3.2 logout.py

import urllib2  
import urllib  

class Loginer():  
    def __init__(self, username, password):  
        self.loginUrl = 'http://202.118.1.87/srun_portal_pc.php?ac_id=1&'  
        self.username = username  
        self.password = password  
        self.openner = urllib2.build_opener()  

    def login(self):  
        postdata = {  
            'username': self.username,  
            'info': '',  
            'action': 'auto_logout',  
            'usr_ip': '202.199.6.187'  
        }  
        postdata = urllib.urlencode(postdata)  
        myRequest = urllib2.Request(url=self.loginUrl, data=postdata)  

        if(str(self.openner.open(myRequest).read()).find('font-weight:bold;color:orange')!=-1):
            print 'logout successfully' 

def main():  
    file=open('temp_username.dat','r')
    username=file.readline()
    print username
    l = Loginer(username,'')
    l.login()  

if __name__ == '__main__':  
    main()  
    print 'done'

4 Python源代码文件生成可执行文件

这里只介绍下这里的简单应用,详细请参见其他文档。

4.1 工具介绍

使用pyinstaller 这个工具,在如此优秀的校园网环境下,在终端里执行下面代码

pip install pyinstaller

这里可能有的同学没有pip程序,可以输入su 进入root 用户,然后输入下面

apt-get install python-pip
sudo apt-get install python-pip #如果你的用户本来就是root权限用户,用这句

4.2 开始Build,Make

安装好之后,我们需要就要把我们的程序打包成可执行文件了。在我们的源代码目录下执行下面语句

pyinstaller -F ConnectNeu.py
pyinstaller -F logout.py

程序就会在当前目录下创建两个文件夹build dist 和两个和源代码同名的文件。我们需要的可执行文件就在文件夹dist 中,那两个文件直接就可以执行。

注意 Linux中执行当前目录下的文件要使用./example 的形式才可以,因为不加前面的两个符号,它默认是从Path环境变量中的地址来找程序的。就是这样。

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值