实验室自动登录校园网
系统Ubuntu20.04
仅适用于宁波大学(实验室)网络,寝室网络的认证更简单一些
部分代码参考:https://github.com/password123456/setup-selenium-with-chrome-driver-on-ubuntu_debian
更新源
下载Chrome包
1 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
安装google-chrome
1 dpkg -i google-chrome-stable_current_amd64.deb
检查Chrome版本
1 2 google-chrome --version
安装selenium, webdriver-manager
1 2 pip3 install selenium pip3 install webdriver-manager
自动登录代码
路径:/home/autoNet.py
功能:使用chrome浏览器模拟登录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManagerfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysimport timeoptions = Options() options.add_argument('--disable-dev-shm-usage' ) driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) def login (): driver.get('https://sso.nbu.edu.cn/login' ) username = "xx" password = "xx" time.sleep(3 ) driver.find_element(By.NAME, 'username' ).send_keys(username) driver.find_element(By.CSS_SELECTOR, 'input.ant-input[type="password"]' ).send_keys(password) time.sleep(1 ) login_button = driver.find_element(By.CSS_SELECTOR, 'button.login-button' ) login_button.click() driver.get('https://www.baidu.com' ) time.sleep(3 ) current_url = driver.current_url if 'sso.nbu.edu.cn/login' in current_url: login() time.sleep(5 ) driver.quit()
登录shell脚本
路径:/home/autoNet.sh
功能:判断是否联网,未联网则执行python脚本
1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash if ping -c 1 baidu.com &> /dev/nullthen echo "已联网。" else echo "未联网,执行Python脚本。" /opt/anaconda3/bin/python /home/autoNet.py fi
开机自动执行脚本
在crontab中添加shell脚本,开机执行一次,每隔三个小时检测一次是否断网
1 2 @reboot /home/autoNet.sh 2>&1 0 */3 * * * /home/autoNet.sh 2>&1
寝室自动登录校园网
具体的data需要抓包获得,大致是要把账号和密码写入data即可
具体的ip也要修改下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/bin/bash curl -X POST 'http://10.36.100.2:8181/eportal/InterFace.do?method=login' \ -H 'Accept: */*' \ -H 'Accept-Encoding: gzip, deflate' \ -H 'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \ -H 'Cookie: EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_COOKIE_NEWV=; EPORTAL_AUTO_LAND=; EPORTAL_USER_GROUP=null; JSESSIONID=D069F24487DD083F7DA803CC95D7E9E8' \ -H 'Host: 10.36.100.2:8181' \ -H 'Origin: http://10.36.100.2:8181' \ -H 'Referer: http://10.36.100.2:8181/eportal/index.jsp?wlanuserip=f8d6b18d1d88bbd7c5301af547f014b2&wlanacname=813916505d4c0137&ssid=7284ca0f746d6dcd&nasip=3cc5b35fd0a3ef1602aca09ebdc05056&mac=225422356a00073294ba1a9308b0c40c&t=wireless-v2&url=754ab213852ddc85a2f1c9d8f5f9700d4f729dd3f8f842b9' \ -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0' \ --data 'userId=YourID&password=YourPassword&service=&queryString=wlanuserip%3Df8d6b18d1d88bbd7c5301af547f014b2%26wlanacname%3D813916505d4c0137%26ssid%3D7284ca0f746d6dcd%26nasip%3D3cc5b35fd0a3ef1602aca09ebdc05056%26mac%3D225422356a00073294ba1a9308b0c40c%26t%3Dwireless-v2%26url%3D754ab213852ddc85a2f1c9d8f5f9700d4f729dd3f8f842b9&operatorPwd=&operatorUserId=&validcode=&passwordEncrypt=false'
最保险的方法是在浏览器抓包,找到data
这个项,把它完整的复制过来
上面代码的data不可以直接用
脚本wait2login.sh ,输入一个参数表示等待时长(分钟),如ash wait2login.sh 20
则是20分钟后执行登录脚本
1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash DEFAULT_DELAY=30 if [[ -n "$1 " && "$1 " =~ ^[0-9]+$ ]]; then DELAY=$1 else DELAY=$DEFAULT_DELAY fi echo " $DELAY to excute /root/login-in-network" sleep $(($DELAY * 60 ))ash /root/login-in-network echo "finished"