struct sockaddr_in web; /* 服務(wù)器 */ char request[1024] = {'\0'}; /* 客戶端發(fā)送的請求報(bào)文內(nèi)容 */ char recvbuf[4096] = {'\0'}; /* 客戶端接收的內(nèi)容 */ char sessionid[40] = {'\0'}; /* 獲取JSESSIONID */ FILE *fd; memset(&web, 0, sizeof(web)); web.sin_family = AF_INET; /* ipv4 */ web.sin_port = ntohs(PORT); web.sin_addr.s_addr = inet_addr(SERVER_IP); s = socket(PF_INET, SOCK_STREAM, 0); /* socket */ if (s == -1) bail("socket(1)"); /* 錯(cuò)誤處理函數(shù) */ c = connect(s, (struct sockaddr *)&web, sizeof(web)); if (c == -1) bail("connect(1)"); s = socket(PF_INET, SOCK_STREAM, 0); c = connect(s, (struct sockaddr *)&web, sizeof(web)); memset(request, 0, 2048); strcat(request, "POST /check/checkuser.jsp HTTP/1.1\r\n"); strcat(request, "Accept: text/html\r\n"); strcat(request, "Referer: strcat(request, "Accept-Language: zh-cn\r\n"); strcat(request, "Content-Type: application/x-www-form-urlencoded\r\n"); strcat(request, "Accept-Encoding: gzip, deflate\r\n"); strcat(request, "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon)\r\n"); strcat(request, "Host: 59.xx.xx.xx:xx\r\n"); strcat(request, "Content-Length: 63\r\n"); strcat(request, "Connection: Keep-Alive\r\n"); strcat(request, "Cache-Control: no-cache\r\n\r\n"); strcat(request, "username=liuby&userpw=MIMA&usertype=student&Submit=%B5%C7%C2%BD"); // printf("%s\n,%d\n", request,strlen(request)); z = send(s, request, strlen(request), 0); /* send */ recv(s, recvbuf, 4096, 0); /* 接收 */ get_sessionid(recvbuf); /* 獲取sessionid */ /* 此時(shí)接收到的報(bào)文顯示為302 Moved Temporarily,這種一般需要再次發(fā)送請求GET需要跳轉(zhuǎn)到的網(wǎng)頁,不知道我這樣理解對不對,完全是根據(jù)這次做的來猜測的 */ memset(request, 0, 2048); strcat(request, "GET /check/students/stulogin1.jsp?username=liuby&usertype=student HTTP/1.1\r\n")");
/* 根據(jù)抓包分析和JSESSIONID,再次構(gòu)造要發(fā)送到服務(wù)器的報(bào)文 */ close(s); /* 關(guān)閉連接,如果要再次請求,重新建立socket,connect,send等 */ |