0%

pi-net-ap

树莓派自动连接校园网并开启wifi

参考代码

连接校园网

准备工作

  1. 打开校园网界面
  2. 打开开发者工具,进行抓包
  3. 找到校园网登录的包,得到关键数据

编写Python脚本

  1. 利用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
    26
       def 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
  2. 利用os库和ping工具检测是否连上网
    1
    2
    3
    4
    5
    import os

    def isNetOK(testserver="baidu.com"):
    return os.system("ping " + testserver+" -c 2 -W 1 > /dev/null")

  3. 构造loop,防止长时间不用断网
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def 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
#!/bin/bash
#/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