校园网的一些小东西
警告:滥用这些API可能会造成不可预测的后果,本研究均在根据代码复现的环境中进行,请谨慎使用。您使用此代码的一切行为与本人无关,如果造成不良结果请您后果自负。
校园网认证系统经常更新,下面方法不一定随时可用
1. 登录认证
var
解释
示例
identity
网络登录账号(学号)
B11451419
password
登陆密码
1919810!senpai
myip
你要登陆的ip
10.114.51.4
operator
你的运营商:cmcc,njxy,(null)
cmcc
其中cmcc是移动,njxy是电信,空是校园网缴费的
Code
可以直接填好下面的链接浏览器打开, ${myip}
为空时可以登陆本机
https://p.njupt.edu.cn:802/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C'${identity}'%40'${operator}'&user_password='${password}'&wlan_user_ip='${myip}'&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac
最简单版本Bash脚本
1 2 3 4 5 #!/bin/bash identity='' operator='' password='' curl -k -s 'https://p.njupt.edu.cn:802/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C' ${identity} '%40' ${operator} '&user_password=' ${password} '&wlan_user_ip=' `curl -k -s "https://10.10.244.11/a79.htm" | sed -nE 's/.*ss5="([0-9\.]*?)".*/\1/p' `'&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac'
全功能,自动登陆本机,客观上改变myip为任何值则为登陆您输入的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 #!/bin/bash myip=$(curl -k -s "https://10.10.244.11/a79.htm" | sed -nE 's/.*ss5="([0-9\.]*?)".*/\1/p' ) identity='' operator='' password='' function login () {result=$(curl -k -s 'https://10.10.244.11:802/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C' ${identity} '%40' ${operator} '&user_password=' ${password} '&wlan_user_ip=' ${myip} '&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac' \ -H 'cookie: program=2; vlan=0; ssid=null; areaID=null; ip=' ${myip} ' ' ) if [[ $result =~ "\"ret_code\":2" ]]; then echo "already logged in" elif [[ $result =~ "Portal协议认证成功" ]]; then echo "$myip successfully logged in" else echo "$result " fi } function login_dbg () { echo your ip: $myip curl -k 'https://10.10.244.11:802/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C' ${identity} '%40' ${operator} '&user_password=' ${password} '&wlan_user_ip=' ${myip} '&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac' \ -H 'cookie: program=2; vlan=0; ssid=null; areaID=null; ip=' ${myip} ' ' \ -v } if [ "$1 " != "-v" ]; then login else login_dbg fi
Powershell Desktop (5.1) 全功能
如果无法运行,请管理员权限PowerShell下
1 Set-ExecutionPolicy RemoteSigned
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 $identity = "" $operator = "" $password = "" $target_ip = "10.10.244.11" function login () { add-type @" using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } } "@ [System.Net.ServicePointManager ]::CertificatePolicy = New-Object TrustAllCertsPolicy [string ]$response = Invoke-WebRequest -Uri "https://$target_ip /a79.htm" -UseBasicParsing $lines = $response .Split("`n" ) $myip = "" foreach ($line in $lines ) { if ($line .Contains("ss5" )) { $par = $line .Split("=" ) foreach ($i in $par ) { if ($i .Contains("ss6" )) { $myip = $i .Split('"' )[1 ] } } break } } if (!$myip .Contains("10." )) { $myip = "" } Write-Host Got your ip = $myip $login_uri = "https://$target_ip " +":802/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C$ {identity}%40$ {operator}&user_password=$ {password}&wlan_user_ip=$ {myip}&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac" Write-Host Trying to contact with $login_uri $response = Invoke-WebRequest -Uri $login_uri -Headers @ { "accept" = "*/*" "cookie" = "program=2; vlan=0; ssid=null; areaID=null; ip=$ {myip}" } Write-Host $response .ToString() } login
注解
如果上面的ip获取不正常,你可以尝试空ip,或者手动抠出来
你可以先用 ifconfig {你的网卡} | awk -F ' *|:' '/inet addr/{print $4}'
检查输出的ip是否是你需要的.
另外,对于部分Linux,ifconfig eth0 | awk -F ' *|:' '/inet /{print $3}'
就可以了
附: 例如你的ifconfig输出了这样的结果:
1 2 3 4 5 6 7 8 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.28.35.52 netmask 255.255.240.0 broadcast 172.28.47.255 inet6 fe80::215:5dff:feb7:aca0 prefixlen 64 scopeid 0x20<link> ether 00:15:5d:b7:ac:a0 txqueuelen 1000 (Ethernet) RX packets 323 bytes 233020 (233.0 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 122 bytes 8612 (8.6 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0就是你的网卡名称,awk后面由 / / 包住的部分就应该是inet,就是IP地址前面的那些内容,很明显这里是第三个部分所以是$3,当然你也可以直接试出来
一个小问题
如果一直报密码错而且您的密码里有特殊字符的话(尤其是 +
),请手动将 '${password}'
替换为 URL Encode 后的密码字符串(可以直接抓包手动登陆时的URL)。
2. 发送一条短信验证码
Code
校园网登录系统的任何页面,在调试控制台中输入并运行
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 var url = "https://p.njupt.edu.cn:802/eportal/portal/sms" var phone = "" var data = { 'telephone' : phone, 'mac' : term.mac , 'ip' : term.ip , 'ipv6' : term.ipv6 , 'bind' : 0 , 'page_index' : page.index , 'prefix' : '' , 'sms_type' : 0 , } util._jsonp ({ url : url, data : data, success : function (json ) { if (json.result == 1 || json.result == 'ok' ) { _alert (lang ('验证码正下发,请注意查收!' )); } else { _alert (lang (json.msg ) || lang ('发送验证码失败,因为网络问题或者页面已过期,请刷新页面重试!<br/>如果已收到验证码,请忽略此提示!' )); } }, error : function (error ) { _alert (lang ('发送验证码失败,因为网络问题或者页面已过期,请刷新页面重试!<br/>如果已收到验证码,请忽略此提示!' )); } });
结果会出现在一个弹窗中
冷知识:这个代码直接从相关js里面扣下来的,util类都是直接用的现成的
3. 获取用户在线信息
变量名称
解释
例子
target_ip
目标ip,10进制格式
175256324
例如这里是我随便找的转换网站:https://www.browserling.com/tools/ip-to-dec
Code
1 2 target_ip = '' curl "https://p.njupt.edu.cn:802/eportal/portal/online_list?callback=dr1002&user_account=&user_password=&wlan_user_mac=000000000000&wlan_user_ip='${target_ip} '&curr_user_ip=&jsVersion=4.X&v=10081&lang=zh"
callback有两种
dr1002({“result”:0,“msg”:“获取用户在线信息数据为空!”});
dr1002({“result”:1,“msg”:“获取用户在线信息成功!”,“list”:[{“online_session”:某种idx,“online_time”:“上线时间”,“online_ip”:“ip”,“online_mac”:“mac地址”,“time_long”:“上线时长”,“uplink_bytes”:“字面意思”,“downlink_bytes”:“字面意思”,“dhcp_host”:“”,“device_alias”:“”,“nas_ip”:“不知道啥意思,是个数字ip”,“user_account”:“用户名@运营商”,“is_owner_ip”:“固定分配此IP?”}],“total”:1});
4. 登出用户
变量名称
解释
例子
target_ip
目标ip
10.114.51.4
Code
1 curl "https://p.njupt.edu.cn:802/eportal/portal/logout?callback=dr1003&login_method=1&user_account=drcom&user_password=123&ac_logout=1®ister_mode=1&wlan_user_ip='${target_ip} '&wlan_user_ipv6=&wlan_vlan_id=0&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&v=6215&lang=zh"
callback:
dr1003({“result”:0,“msg”:“Radius注销失败!”});
dr1003({“result”:1,“msg”:“Radius注销成功!”});