Linux字符界面连接校园网

2020年09月15日 46点热度 1人点赞 0条评论

本教程不涉及如何连接上wifi,相关内容可以搜索wi以及wpa_supplicant命令。

校园网需要登陆,这里以XX大学为例,如下图:

登陆其实就是网页向服务器发送一个包含账号密码等信息的http请求,为了获取请求内容从网上找了一个简单的抓包软件MiniSniffer,(wireshark 大同小异)。

抓到以下数据:

以下是提交账号和密码的http请求(打码部分为我的账号和密码)

其中url 部分是)

/drcom/login?callback=dr当前时间戳(毫秒)+3秒&DDDDD=账号&upass=密码&0MKKey=123456&R1=0&R3=0&R6=0&para=00&v6ip=&_=当前时间戳(毫秒)

分析到这里就可以知道如何连接校园网了,那就是用程序向10.220.10.11这个局域网ip地址发送一个get请求,url

如上。服务器就会验证账号和密码来判断是否允许通过验证。

可以在Linux下写一个程序:

#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include <sys/socket.h>
#define  BUFFER_SIZE 8000
const char * send_content = "GET /drcom/login?callback=dr%d000&DDDDD=%s&upass=%s&0MKKey=123456&R1=0&R3=0&R6=1&para=00&v6ip=&_=%d000 HTTP/1.1\r\n"
"Host: 10.20.10.11\r\n"
"Connection: keep-alive\r\n"
"Accept: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01\r\n"
"X-Requested-With: XMLHttpRequest\r\n"
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"Referer: http://10.20.10.11/\r\n"
"Accept-Language:en-CN,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,en-US;q=0.6\r\n\r\n";
char buffer[BUFFER_SIZE]={0};
int main(int argc,char *argv[])
{
    long long id,passwd;
    if(argc != 3)
    {
    printf("format :<this software> <id> <password>\n");
    exit(-1);
    }
    printf("time stamp (now) : %d\n",time(0));
    int sockfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    struct sockaddr_in address;
    address.sin_family     = AF_INET;
    address.sin_port       = htons(80);
    address.sin_addr.s_addr=inet_addr("10.20.10.11");
    sprintf(buffer,send_content,time(0)+3,argv[1],argv[2],time(0));
    int res = connect(sockfd,(struct sockaddr*)&address,sizeof(address));
    if(res!=0)
    {
        printf("cant connect to authenticating server\n");
        return -1;
    }
    res = send(sockfd,buffer,strlen(buffer)+1,0);
    if (res<0)
    {
        printf("cant send http request\n");
        return -1;
    }
    printf("http request sended;\n");
    recv(sockfd,buffer,sizeof(buffer),0);
    printf("data recv from server:\n");
    printf(buffer);
}

使用方法 ,假设编译后为a.out 命令输入

./a.out 账号 密码

这只是针对这个校园网的登陆,其他需要参考上述步骤总结方法;

Danny

我就如一粒石子,在随波逐流中,逐渐冲蚀了自己的棱角,变光滑,也变丑陋。

文章评论