命令行联网
命令行联网
一般租服务器或自己用linux系统时,都是配置好网络或可以通过图形界面联网的。但是对于开发板,尤其是不能跑桌面的小系统板来说,这一点就很难做到。但是这个过程又必不可少,无论是下载python包还是apt update都需要联网。这篇文章记录了开发板联网的全过程,轻松、不踩坑地无痛连上手机热点或其他无需登录的互联网。
1、打开手机或电脑热点
对于iPhone手机,较新的型号打开热点后都是默认位于5G频段,这种高端玩意开发板是不认的。所以要在设置里打开兼容所有型号按钮,这样你的热点就能被2.4G频段的设备搜索到了:

对于Windows电脑,在热点设置中也需要在属性里把带宽改成2.4G。这一步至关重要,我被这个问题卡了很久。
2、在开发板输入联网命令
首先打开wifi功能:
sudo nmcli r wifi on
如果正确地修改了频段,在这一步应该能顺利搜索到你的热点。搜索所有可用wifi的命令是:
sudo nmcli d wifi list
这就相当于你在图形界面浏览wifi列表:

退出这个视图只需要打:q
后回车。
比如本例中第一个就是我的wifi,如果想连上,用如下命令:
sudo nmcli dev wifi con "wifi name" password "wifi password"
注意不要丢了双引号。
这一步有概率会失败,如果失败,可以先ifconfig
检查现在是否已经连上了一个wifi,如果已经连上了,要先断掉现在的wifi:
sudo nmcli con delete "wifi name"
然后重走上边的流程。
3、连接需登录的wifi
这个不是那么常用,主要是连校园网需要。
首先要去抓包。可能有些教程说可以直接在html里看表单字段,但是在scut,这并不适用。抓包得到这个:
https://p.scut.edu.cn:802/eportal/portal/login?callback=dr1003&login_method=1&user_account=************&user_password=************&wlan_user_ip=***.***.***.***&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.1.3&terminal_type=1&lang=en&v=10323&lang=en
涉及隐私部分已经屏蔽,用你自己的账号密码即可。可以看出,它缺少了以下几个字段:wlan_user_mac
、wlan_ac_ip
、wlan_ac_name
。这是因为,如果你打开网页源码就会发现其实大部分的登录参数都是后期在js拼接的。不过幸运的是我们不需要手动加上所有的参数,只需要加这三个最关键的。mac比较好解决,直接ifconfig看一下就行。下一步是获取ac认证地址。
首先要拿到默认网关,ifconfig能看到是10.196.255.254
。然后,需要curl这个地址:
curl -v http://10.196.255.254
因为在未登录状态下curl网关会重定向到认证服务器,所以就能轻松拿到acip:
Location: https://p.scut.edu.cn/a79.htm?wlanacip=172.18.50.11
把上述字段填写到登录命令,wlan_ac_name
一般就是AC-172.18.50.11
,不过应该不填也行,因为重定向的url中也用不上它。完整的登录命令是:
curl -k \
"https://p.scut.edu.cn:802/eportal/portal/login" \
-G \
-A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/115.0.0.0 Safari/537.36" \
--data-urlencode "callback=dr1003" \
--data-urlencode "login_method=1" \
--data-urlencode "user_account=************" \
--data-urlencode "user_password=************" \
--data-urlencode "wlan_user_ip=************" \
--data-urlencode "wlan_user_mac=************" \
--data-urlencode "wlan_ac_ip=172.18.50.11" \
--data-urlencode "wlan_ac_name=AC-172.18.50.11" \
--data-urlencode "jsVersion=4.1.3" \
--data-urlencode "terminal_type=1" \
--data-urlencode "lang=en" \
--data-urlencode "v=10323"
注意,在login_method
中,电脑是1,手机用2,平板是3。输入后会获得AC认证成功的返回,此时可能还是登录不上,再执行一次即可。
另外附上全部的待拼接字段供参考:
var term = {
account: '',
password: '',
type: 2,
// 访问设备:0-其他;1-PC;2-手机;3-平板
ip: '000.000.000.000',
ipv6: '',
mac: '000000000000',
vlan: 1,
wlanacip: '000.000.000.000',
wlanacname: '',
wlanacmac: '000000000000',
wlanapmac: '000000000000',
time: '',
ssid: '',
areaID: '',
online: {},
redirect: '',
suffix: '',
//wifidog匹配参数
gw_id: '', //gw_id 用于区别wifidog设备
gw_address: '', //wifidog的IP
gw_port: '', //wifidog的端口
gw_token: '', //用户检验token
/*
* 设置终端相关的参数
*/
init: function (next) {
this.type = util.getTermType();
this.ip = util.getQueryString('ip', 'wlanuserip', 'userip', 'user-ip', 'client_ip', 'UserIP', 'uip', 'station_ip') || (typeof (v46ip) != 'undefined' ? v46ip : false) || (typeof (ss5) != 'undefined' ? ss5 : false) || (typeof (v4ip) != 'undefined' ? v4ip : false) || (typeof (ss3) != 'undefined' ? util.hex16ToString(ss3) : '000.000.000.000');
this.mac = (util.getQueryString('mac', 'usermac', 'wlanusermac', 'umac', 'client_mac', 'station_mac') || (typeof (ss4) != 'undefined' ? ss4 : false) || (typeof (olmac) != 'undefined' ? olmac : false) || '000000000000').replace(/[\-\:]/g, '');
this.vlan = util.getQueryString('vlan', 'vlanid') || (typeof (vlanid) != 'undefined' ? vlanid : 1);
this.session = util.getQueryString('session') || ((typeof (ss3) != 'undefined' && typeof (ss4) != 'undefined' && typeof (ss2) != 'undefined') ? ss3 + "-" + ss4 + "-" + ss2 : "");
this.wlanacip = util.getQueryString('wlanacip', 'acip', 'switchip', 'nasip', 'nas-ip') || '';
this.wlanacname = util.getQueryString('wlanacname', 'sysname', 'nasname', 'nas-name') || '';
this.wlanacmac = (util.getQueryString('wlanacmac', 'gw_mac') || '000000000000').replace(/[\-\:]/g, '');
this.wlanapmac = (util.getQueryString('apmac', 'ap_mac') || '000000000000').replace(/[\-\:]/g, '');
this.ssid = util.getQueryString('ssid', 'essid') || '';
this.areaID = util.getQueryString('areaID') || '';
this.ipv6 = util.getQueryString('UserV6IP') || '';
this.redirect = util.getQueryString('redirect', 'redirect-url', 'desurl', 'url', 'originalUrl', 'success_url', 'Original_url') || '';
this.gw_id = (util.getQueryString('gw_id', 'gw_mac') || '000000000000').replace(/[\-\:]/g, '').toLowerCase();
this.gw_address = util.getQueryString('gw_address') || '';
this.gw_port = util.getQueryString('gw_port') || '';
this.gw_token = util.getQueryString('token') || '';