树莓派自动连接校园网并开启wifi
连接校园网
准备工作
- 打开校园网界面
- 打开开发者工具,进行抓包
- 找到校园网登录的包,得到关键数据
编写Python脚本
- 利用request库构建请求,代入找包得到的数据
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
26def login():
url = "http://172.19.1.9:8080/eportal/InterFace.do?method=login"
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Origin': 'http://172.19.1.9:8080',
'Referer': 'http://172.19.1.9:8080/eportal/index.jsp?wlanuserip=a1ea6bfa0d6e6eefa185548d2eccb994&wlanacname=29185648f4390d7911ef4b72391e17a9&ssid=&nasip=07e38f2323f330cd5ffcc3a203a63100&snmpagentip=&mac=fadf15c8d0df3a45ee61813a79609e5c&t=wireless-v2&url=096e8e7059e430e024191585b02b6dc9b7b80d56d3cad4404b0c90f7e44fbab3&apmac=&nasid=29185648f4390d7911ef4b72391e17a9&vid=acf5e31dcc166138&port=e65ae3d6b3555e50&nasportid=ac41d60d7f1382081362a1ed29e6af272c4a438e3140152c0358914a2f2ac8c82054d7eb5505b59d',
'Save-Data': 'on',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
}
user = '2015*********'
pwd = '******'
data = 'userId='+user+'&password='+pwd+'&service=Internet&queryString=wlanuserip%253Da1ea6bfa0d6e6eefa185548d2eccb994%2526wlanacname%253D29185648f4390d7911ef4b72391e17a9%2526ssid%253D%2526nasip%253D07e38f2323f330cd5ffcc3a203a63100%2526snmpagentip%253D%2526mac%253Dfadf15c8d0df3a45ee61813a79609e5c%2526t%253Dwireless-v2%2526url%253D096e8e7059e430e024191585b02b6dc9b7b80d56d3cad4404b0c90f7e44fbab3%2526apmac%253D%2526nasid%253D29185648f4390d7911ef4b72391e17a9%2526vid%253Dacf5e31dcc166138%2526port%253De65ae3d6b3555e50%2526nasportid%253Dac41d60d7f1382081362a1ed29e6af272c4a438e3140152c0358914a2f2ac8c82054d7eb5505b59d&operatorPwd=&operatorUserId=&validcode=&passwordEncrypt=false'
r = requests.post(url,headers=headers,data=data).json()
#print(r['result'])
# 判断当前是否已在线
if r['result']=='success':
return 1
else:
return 0 - 利用os库和ping工具检测是否连上网
1
2
3
4
5import os
def isNetOK(testserver="baidu.com"):
return os.system("ping " + testserver+" -c 2 -W 1 > /dev/null") - 构造loop,防止长时间不用断网
1
2
3
4
5
6
7
8
9
10
11def loop():
count = 0
while True:
if isNetOK() != 0:
if login() == 0:
count+=1
print('已断线重连%d次'%count)
else:
print("第一次连上网")
else:
print("已经连上网")
创建AP
安装create_ap
$git clone https://github.com/Scallions/auto_net_ap
$cd create_ap
$make install
# 安装依赖
$sudo apt install util-linux procps hostapd iproute2 iw haveged dnsmasq
使用
$create_ap wlan0 eth0 ssid pwd
开机启动
利用service
创建文件/etc/init.d/netap
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
#/etc/init.d/netandap
### BEGIN INIT INFO
# Provides: netandap
# Required-Start:$remote_fs $syslog
# Required-Stop:$remote_fs $syslog
# Default-Start:2 3 4 5
# Default-Stop:0 1 6
# Short-Description: netandap
# Description: This service is used to start my applaction
### END INIT INFO
case "$1" in
start)
echo "Connect Internet and Turn on AP"
nohup /home/pi/whu-wlan.py > /dev/null 2>&1 &
nohup /home/pi/wifi.sh > /dev/null 2>&1 &
;;
stop)
echo "Stop wifi."
pkill whu-wlan
killall create_ap
killall wifi.sh
;;
*)
echo "Usage: service netandapt start|stop"
exit 1
;;
esac
exit 0
添加服务
$sudo chmod 777 netap
$sudo update-rc.d netap defaults
# test
$sudo service netap start