【原创】破解校园网设备限制

1 介绍

  • 在宿舍使用软路由,将其配置为旁路由,可以在宿舍里,连接wifi,在网关和旁路由网关相同情况下,将自己设备网关修改为旁路由IP,即可实现不用登录使用校园网

  • 我在使用的是,将旁路由连上网线,开启旁路由Wi-Fi,在宿舍里连接旁路由的wifi,将网关修改为旁路由IP,即可免登录使用校园网

  • 在其他地方的wifi网关和寝室不一样,所以不能直接修改网关为旁路由ip,所以只能在寝室免登录使用校园网

  • 但是后面又有一个方法,就是使用旁路由的passway插件,开启服务端,创建sockes,这样无论在学校哪里,只要连接上校园网,开启clash工具,使用自己创建的sockes,开启全局流量,即可全校园免登录使用校园网

2 刷软路由

  • 请网上找刷 openwrt的教程
  • 我这里使用的是n1盒子,刷完之后是这样的

image-20241205152027958

3 软路由配置

3.1 配置为旁路由

  • 这里最好是使用静态IP,而非是使用dhcp,但是我这里使用静态ip用不了,所以只能使用dhcp
  • 使用dhcp也没什么问题,只不过每次重启软路由之后,都需要修改使用设备的网关

image-20241205152348599

3.2 登录校园网

3.2.1 登录代码

  • 随便用一台已经连接了校园网的电脑,将下面的 账号,密码,ip(软路由的IP)设置完成后,运行即可给软路由登录上校园网。
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
50
51
52
53
54
55
56
57
58
import random
import requests


class CampusNetwork():
def __init__(self):
self.url = 'http://192.168.200.2:801/'
self.ac = ''
self.device = 1 # 1 为手机 2 为电脑
# 请按照格式输入账号
# 运营商 默认移动cmcc 电信telecom 联通unicom
self.user_account = f',{self.device},1673111@telecom'
# 请输入密码
self.user_password = '123456789'
# 将这个修改为软路由的IP地址
self.my_ipv4 = '10.16.1.1'
self.callback = 'dr1003'
self.v = random.randint(1000, 9999)
self.jsVersion = '3,3.3'
self.headers = {
"User-Agent": "Mozilla/ 5.0 (Linux; Android 4.0 . 3 ; U9200 Build/HuaweiU9200)",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.5",
"Connection": "keep-alive",
"Referer": self.url,
}

# 登录
def login(self):
# 请求参数
params = {
'c': 'Portal',
'a': 'login',
'callback': 'dr1004',
'login_method': '1',
'user_account': self.user_account,
'user_password': self.user_password,
'wlan_user_ip': self.my_ipv4,
'wlan_user_ipv6': '',
'wlan_user_mac': '000000000000',
'wlan_ac_ip': '',
'wlan_ac_name': '',
'jsVersion': self.jsVersion,
'v': self.v
}
url = self.url + 'eportal/'
resp = requests.get(url, params=params).text
if r"\u8ba4\u8bc1\u6210\u529f" in resp:
return "登录成果"
return f"登录失败,{resp}"


if __name__ == '__main__':
a = CampusNetwork()
b = a.login()
print(b)

3.2.2 自动登录

  • 这一步可忽略

  • 可以设置为自动登陆校园网sh脚本,开机自启动,这样在软路由重启之后不需要在手动登录校园网

  • 具体操作如下:

3.2.2.1 编辑rc.local
1
vi /etc/rc.local
3.2.2.2 添加路径
1
bash /home/cqupt.sh

image-20241205153245172

3.2.2.3 创建脚本
1
2
3
4
5
cd /home
touch cqupt.sh
vi /home/cqupt.sh
#将下面脚本代码复制进去
chmod +x /home/cqupt.sh

image-20241205152758565

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 登录IP 地址
target_ip="192.168.200.2"

# 定义检查状态的 URL 和参数
chkstatus_url="http://192.168.200.2/drcom/chkstatus"
callback="dr1004" # 替换为实际 callback 参数
# v="8888" # 替换为实际 v 参数

# 循环尝试 60 次,每次间隔 3 秒
for i in {1..60}; do
echo "尝试第 $i 次检测 $target_ip 是否可达..."

# 使用 ping 检查是否可达,-c 1 表示只发送一个包,-W 1 表示超时时间为 1 秒
if ping -c 1 -W 1 $target_ip > /dev/null 2>&1; then
echo "$target_ip 可达,尝试获取本地 IPv4 地址..."

# 发送 GET 请求获取本地 IPv4 地址
resp=$(curl -sG "$chkstatus_url" --data-urlencode "callback=$callback" --data-urlencode "v=$v")
# echo "$resp" # 打印响应,用于调试

# 使用 sed 提取 JSON 数据
json_data=$(echo "$resp" | sed -n 's/.*"v46ip":"\([^"]*\)".*/\1/p')
if [ -z "$json_data" ]; then
echo "未能获取有效响应,退出脚本。"
exit 1
fi

# 如果结果有效,将 v46ip 赋值给 wlan_user_ip
if [ -n "$json_data" ]; then
wlan_user_ip="$json_data"
echo "本地 IPv4 地址为:$wlan_user_ip"

# 执行具体操作
url="http://192.168.200.2:801/eportal/" # 替换为实际的URL
user_account=",1,1673188@telecom" # 替换为实际账号
user_password="123456789" # 替换为实际密码
jsVersion="3,3.3" # 替换为实际版本号
v="8888" # 替换为实际参数

wlan_user_ipv6=""
wlan_user_mac="000000000000"
wlan_ac_ip=""
wlan_ac_name=""

query_string="c=Portal&a=login&callback=dr1004&login_method=1&user_account=$user_account&user_password=$user_password&wlan_user_ip=$wlan_user_ip&wlan_user_ipv6=$wlan_user_ipv6&wlan_user_mac=$wlan_user_mac&wlan_ac_ip=$wlan_ac_ip&wlan_ac_name=$wlan_ac_name&jsVersion=$jsVersion&v=$v"

# response=$(curl -G -s "$url" --data "$query_string")
curl -v -G "$url" --data "$query_string"


echo "操作执行结果:$response"
exit 0 # 成功后退出脚本
else
echo "结果无效或未获取到 v46ip,退出脚本。"
exit 1
fi
else
echo "$target_ip 不可达,等待 3 秒后重试..."
sleep 3
fi
done

echo "尝试 60 次后仍未成功,脚本结束。"
exit 1 # 超过最大尝试次数,退出并返回失败状态码

3.3 开启Wi-Fi

image-20241205154539025

3.4 开启passway

  • 配置

image-20241205154348926

image-20241205154406259

  • 保存之后是这样的

image-20241205154446691

4 使用

4.1 寝室使用

4.1.1 校园wifi/网线

如果宿舍里的学校wifi或者网线和软路由的网关是一样的,就可以直接修改你设备连接校园网后的网关为软路由网关,即可绕过校园网上网。

4.1.2 使用软路由wifi

软路由开启wifi,然后设备连接软路由的wifi,将网关修改为软路由的ip,即可绕过校园网上网。

4.2 其他地方

  • clash导入配置

image-20241205155102517

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
port: 7890
socks-port: 7891
mixed-port: 7892
allow-lan: true
mode: rule
log-level: info
external-controller: '0.0.0.0:9090'
clash-for-android:
append-system-dns: false
profile:
tracing: true
dns:
enable: true
enhanced-mode: fake-ip
ipv6: false
default-nameserver: [223.5.5.5, 119.29.29.29]
fake-ip-range: 198.18.0.1/16
use-hosts: true
nameserver: ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query']
fallback: ['https://doh.dns.sb/dns-query', 'https://dns.cloudflare.com/dns-query', 'https://dns.twnic.tw/dns-query', 'tls://1.0.0.1:853', 'tls://8.8.4.4:853']
fallback-filter: { geoip: true, ipcidr: [240.0.0.0/4, 0.0.0.0/32] }

# 将下面的ip和端口修改为刚从创建的
proxies:
- { name: "校园网", type: socks5, server: 10.16.46.16, port: 8899, username: , password: , udp: true }
proxy-groups:
- name: Proxy
type: select
proxies:
- '校园网'
rules:
- DOMAIN-SUFFIX,google.com,Proxy
- DOMAIN-KEYWORD,google,Proxy
- DOMAIN,google.com,Proxy
- DOMAIN-SUFFIX,ad.com,REJECT
- IP-CIDR,127.0.0.0/8,DIRECT
- GEOIP,CN,DIRECT
- MATCH,Proxy
  • 如果哪些本地IP也要走代理,记得修改这里

image-20241205155214895