用树莓派为平台实现校园网登录

小半年前由于疫情原因,实验室的各位都只能远程搞科研。 然而大家都碰到了一个很现实的问题:学校虽然有免费的校园网,但是学校的网络系统会在每天凌诚把所有在线的人踢下线,于是乎大家的远程就

全 部 木 大

只能等着第二天导师上班的时候到实验室帮忙登录一下。再后来(大概七月二十来号)我被导师抓到学校当了工具人,工具人之余就有了下面的对话:

导师:“xxx啊,你知不知道对面实验室搞了个每天自动登录校园网的东西啊”
我:“我不知道,不过可以去问问”(内心OS:“怕不是又要当工具人搞自动登录”)
导师:“好像是一个什么脚本跑在路由器上,这样吧,我去买个路由器,回来刷下系统,你把我们实验室的自动登录也弄好。”
我:“好的”(内心OS:“果然,但是有新的华硕路由器玩感觉也挺不错的”)

后续又问了问,发现脚本不是我想的那样用shell写的,居然是用Python写的,那不就是爬虫了么。呜呼哀哉,哪家路由器这么强能跑Python解释器啊。细问才知道脚本是跑在服务器上的,我们实验室泡在服务器上怕不是会被臭骂一顿,刚好我还有块吃灰很久的树莓派3B+,干脆就拿这个搭自动登录了。
结果由于各种神奇的原因(中间家里有事,大家回学校不需要自动登陆了),这套东西一个月之前(十月左右)才正式搭好开始运行,后面又被导师要求出个配置手册,美其名曰“你走了不就没人会用这个了?”(你还能阻止我拔树莓派么233),又摸了两周终于把手册写出来了。具体内容就放下面了,总之大家就看个笑话,我也是菜鸡一个,大家多多批评哈。

校园网自动登录脚本配置手册

系统搭建在Raspberry Pi Model 3B+上,系统信息如图下:

neofetch.png

一,树莓派系统烧录

需要准备的材料:

  • 一块树莓派(不能是Raspberry Pi 0
  • 一张大于等于16G的SD卡和读卡器,或一块U盘

1,使用Raspberry Pi imager烧写

国内网络原因,不是很建议使用这种方式,下载过于慢

访问树莓派官网,并下载官方烧录工具

根据自己对应的系统类型下载

rasp_download.png

对于Raspberry Pi OS,可以直接使用apt命令安装,安装命令如下:

sudo apt install rpi-image

软件安装完成后进入,Operating system选择Raspbarry Pi OS(32bit),如果对其他操作系统更熟悉的话,也可选择其他镜像。SD Card 选择准备好的内存卡/U盘,按下write等待系统刷写完成。

2,下载并刷写系统镜像

访问树莓派镜像下载地址,选择Raspberry Pi OS with desktop and recommended software项下载。

download_image.png

下载BelenaEtcher并安装。安装完成后打开,选择下载的镜像和代刷写的SD卡,按下Flash完成刷写。

belena.png

二,树莓派配置

1,通过SSH访问树莓派

系统刷写完成后,在文件管理器中打开SD卡,创建名为“SSH”的文件,完成后将SD卡插入树莓派,连接网线上电启动。

访问路由器管理界面,查看树莓派的ip地址(426的路由器应该是固定为了192.168.50.114),路由器账号密码如下:

user:xxxxxx
password:*********

查看ip地址位于路由器首页阅览名单位置,树莓派名称应为raspberrypiaabbcco-s-pi

pi_ip.png

使用Powershell(Windows)或Terminal(Linux)访问树莓派,命令为

ssh pi@<raspberry ip>

raspberry ip为树莓派对应的ip地址,初始密码为raspberry

rasplogin.png

至此完成登陆步骤

2,更新软件源

a.清华源

清华源由清华大学TUNA协会(清华大学学生网络与开源软件协会)提供,网址在此,网站上有如何使用该软件园的帮助文档,摘抄基于Debian10(buster)的换源方法如下:

# 编辑 `/etc/apt/sources.list` 文件,删除原文件所有内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi

# 编辑 `/etc/apt/sources.list.d/raspi.list` 文件,删除原文件所有内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

b.中科大源

中科大源由中国科学技术大学网络信息中心提供支持,由LUG@USTC(中国科学技术大学Linux用户协会)维护.同样的,在软件源网站上也有如何使用该源的帮助文档,摘抄于网页的换源方法如下:

将 /etc/apt/sources.list 文件中默认的源地址 http://raspbian.raspberrypi.org/ 替换为 http://mirrors.ustc.edu.cn/raspbian/ 即可。

raspbian 2018-04-19 之后的镜像默认源已经更改,用如下命令替换:

  sudo sed -i 's|raspbian.raspberrypi.org|mirrors.ustc.edu.cn/raspbian|g' /etc/apt/sources.list

当然也可以直接编辑 /etc/apt/sources.list 文件(需要使用 sudo)。删除原文件所有内容,用以下内容取代(以 Buster 示例):

  deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
  #deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi

编辑源文件方法为:

sudo nano <file position>
或
sudo vi <file position>

编辑源文件后,在命令行运行:

sudo apt-get update
sudo apt-get upgrade

三,Python环境配置

登录脚本使用了模拟浏览器,需要在python环境中安装selenium包,chromium浏览器和配合selenium使用的chromium-chromedriver。不过Raspberry Pi OS自带了cheomium,这里只要安装selenium和配套的chromium-chromedriver

安装selenium

pip3 install selenium
selenium.png

安装chromium-chromedriver

sudo apt-get install chromium-chromedriver

查看安装路径

dpkg -L chromium-chromedriver
chromedriver.png

四,自动登录脚本配置

1,Python脚本:

自动登录脚本使用了之前配置的Python环境和系统(很可能)自带的cron定时任务服务,Python脚本如下:

import time
import logging
import socket
from selenium import webdriver

Chrome_driver_root = "<chrome driver position>"


def init_logger():
    logging.basicConfig(level=logging.INFO,
                     format="%(asctime)s %(levelname)s %(message)s",
                     datefmt="%Y-%m-%d %H:%M:%S",
                     filename="<logdir>")
    logger = logging.getLogger("netlogger")

    return logger


def is_connected(logger):
    '''
    show if the net is connected
    '''
    s = socket.socket()
    status = s.connect_ex(("www.bing.com", 443))
    try:
        if status == 0:
            return True
        else:
            return False
    except Exception:
        logger.critical("an Exception happend, check your system")
        return False


if __name__ == "__main__":
    logger = init_logger()
    if not is_connected(logger):
        options = webdriver.ChromeOptions()
        options.add_argument('--headless')
        options.add_argument('blink-settings=imagesEnabled=false')
        options.add_argument('--disable-gpu')
        browser = webdriver.Chrome(Chrome_driver_root, options=options)
        try:
            browser.get("http://www.msftconnecttest.com/redrict")
            time.sleep(1)
            browser.find_element_by_id("userphone").send_keys("<学号>")
            time.sleep(1)
            browser.find_element_by_id("password").send_keys("<密码>")
            time.sleep(1)
            browser.find_element_by_id("mobilelogin_submit").click()
            time.sleep(1)
            if is_connected(logger):
                logger.info("network reconnected")
            else:
                logger.warning(
                    "login filed, waiting for the next login")
            browser.quit()
        except Exception:
            browser.quit()
            logger.critical("An Exception happend, check your system")
    else:
        logger.info("network still connected,waiting for the next ask")

2,cron定时任务

a.安装cron

一般的Linux发行版都会带cron模块,而且是默认运行的,查询cron是否在工作可以用

systemctl status cron.service

service cron status

如果看到如下文字即说明cron已安装且正在运行,第四行为active(running)

pi@aabbcco-s-pi:~ $ systemctl status cron.service
● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-11-24 16:08:49 CST; 19h ago
    Docs: man:cron(8)
Main PID: 331 (cron)
    Tasks: 1 (limit: 1939)
CGroup: /system.slice/cron.service
        └─331 /usr/sbin/cron -f

若cron安装完成但未运行,应有如下显示,第四行为inactive(dead)

pi@aabbcco-s-pi:~ $ systemctl status cron.service
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Wed 2020-11-25 12:25:04 CST; 4s ago
    Docs: man:cron(8)
Process: 331 ExecStart=/usr/sbin/cron -f $EXTRA_OPTS (code=killed, signal=TERM)
Main PID: 331 (code=killed, signal=TERM)

此时可以运行

sudo systemctl start cron.service

启动服务

若cron未安装,则使用

sudo apt-get install cron

进行安装

b.配置cron

这里使用crontab命令对其进行配置,命令为

crontab -u <user> -e

第一次使用会弹出编辑器选择按钮,建议使用nano,配置文件如下

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

具体用法不再赘述,有疑问的话请看这篇博客

编写这篇文章时脚本文件为netlogin.py,位于~/scripts文件夹,每天凌晨0点到1点每隔20分钟运行一次,表达式为

*/20 0 * * * python3 /home/pi/scripts/netlogin.py

至此,所有配置已完成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355