使用校园网的时候 需要登陆认证界面才能正常上网 但是开发板并没有浏览器什么的 所以思考是否可以通过别的方法来实现上网。后来便想到了使用抓包的方法。
首先笔记本浏览器清除cookie 开启fiddler 然后打开校园网认证界面 登录账号并提交。
然后 分析fiddler抓到的包 看看都提交了什么数据。
最后 模拟上面的请求 使用程序提交登录数据。这里 我是用的是C语言
#include stdio.h
#include sys/types.h
#include sys/socket.h
#include string.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h
#define SERVER_PORT 80
int main(int argc, char **argv)
char ch;
int fd_socket 0;
int ret;
struct sockaddr_in sock_server_addr;
unsigned char send_buffer[800] POST /include/auth_action.php HTTP/1.1n
Host: 服务器IPn
Connection: keep-aliven
Content-Length: 113n
Accept: */*n
X-Requested-With: XMLHttpRequestn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36n
Content-Type: application/x-www-form-urlencoded; charset UTF-8n
Origin: http://服务器IPn
Referer: http://服务器IP/srun_portal_pc.php?ac_id 1 n
Accept-Encoding: gzip, deflaten
Accept-Language: zh-CN,zh;q 0.9n
cookie: language enn
rn
action login username 账户名 password 账户密码 ac_id 1 user_ip nas_ip user_mac save_me 0 ajax 1n ;
int send_len;
fd_socket socket(AF_INET, SOCK_STREAM, 0);
if(fd_socket -1)
printf( built socket err.n );
return fd_socket;
sock_server_addr.sin_family AF_INET;
sock_server_addr.sin_port htons(SERVER_PORT);
sock_server_addr.sin_addr.s_addr inet_addr( 服务器IP );
memset(sock_server_addr.sin_zero, 0, 8);
ret connect(fd_socket, (struct sockaddr *) sock_server_addr, sizeof(struct sockaddr));
if (ret -1)
printf( connect error!n );
return -1;
send_len send(fd_socket, send_buffer, strlen(send_buffer), 0);
if (send_len 0)
close(fd_socket);
return -1;
else
printf( Sent %d bytes.n , send_len);
while(read(fd_socket, ch,1)){
printf( %c , ch);
return 0;
send_buffer的内容是我根据自己的抓包得来的 你用的时候需要自行修改 程序其他部分一般可以不动。
编译执行 结果如下
登录成功。
这时 ping baidu.com会出现
ping bad address baidu.com
但是ping 220.181.38.251(百度的IP地址)已经可以了。
所以只需要再设置一下DNS 这里的设置要根据你自己的来 可以看看你的笔记本的DNS服务器是什么 二者设置成一样的就行了 :
vi /etc/network/interfaces 修改/etc/resolv.conf的话也行 但是重启后会丢失 dns-nameservers 192.168.0.1 8.8.8.8 重启网络 或者直接重启开发板 然后再执行一下上面的登录程序
更进一步 可以在/etc/init.d/下新建文件 开机自启动上面的登录程序。
有了上面的思路 也可以写个程序在windows上使用 这样就不用每次手动登录 用python什么的 都很简单了。
时间有限 这里只是提供一个大概思路 没有写得很详细。有问题的话可以留言 我尽量回答。
另
C 语言Socket 实现http 带参数的POST请求 https://blog.csdn.net/liujiaoyage/article/details/52467709



