📄 httpsocket.cpp
字号:
} fwrite(offset, sizeof(char), RecvBuffer+result-offset,fp); } fclose(fp); close(sockfd); return 0;}int HttpSocket::HttpProxy(){ int result=0; int sockfd=0; int len=0; struct sockaddr_in address; sockfd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr("203.144.160.245"); address.sin_port = htons(8080); len = sizeof(address); result = connect(sockfd, (struct sockaddr *)&address, len); if (result == -1) { string errstr = strerror(errno); return 2; } int w_rs=0; string sendBuffer = "CONNECT 203.144.160.245:8080 HTTP/1.1\r\nUser-Agent: MyApp/0.1\r\n\r\n"; w_rs = send(sockfd,sendBuffer.c_str(),sendBuffer.size(),0); char RecvBuffer[6001]; memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = recv(sockfd,&RecvBuffer,6000,0); RecvBuffer[result] = '\0';cout << RecvBuffer << endl; sendBuffer = "GET /html/45.html HTTP/1.1\r\n"; sendBuffer += "Host:www.mawudi.cn\r\n"; sendBuffer += "User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\r\n"; sendBuffer += "Cache-Control: no-cache\r\n"; sendBuffer += "Proxy-Connection: close\r\n"; sendBuffer += "Connection: close\r\n\r\n"; w_rs = send(sockfd,sendBuffer.c_str(),sendBuffer.size(),0); while (true) { memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = recv(sockfd,&RecvBuffer,6000,0); cout << RecvBuffer << endl; if (result <= 0) { break; } } close(sockfd); return 0;}int HttpSocket::Socks4Proxy(){ int result=0; int sockfd=0; int len=0; struct sockaddr_in address; char host[255]="221.234.24.46"; unsigned int port = 1080; sockfd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr(host); address.sin_port = htons(port); len = sizeof(address); result = connect(sockfd, (struct sockaddr *)&address, len); if (result == -1) { string errstr = strerror(errno); return 2; } char buf[100]={0}; int w_rs=0; buf[0] = 4; buf[1] = 1; unsigned short int wport = htons(80); memcpy(&buf[2],&wport,2); //memcpy(&buf[4],&address.sin_addr.s_addr,4); struct hostent *hostinfo=0; hostinfo = gethostbyname("61.152.238.80"); const char *ipaddress = hostinfo->h_addr_list[0]; buf[4]=ipaddress[0]; buf[5]=ipaddress[1]; buf[6]=ipaddress[2]; buf[7]=ipaddress[3]; buf[8]=0; w_rs = send(sockfd,(const char *)buf,9,0); char RecvBuffer[6001]={0}; memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = recv(sockfd,&RecvBuffer,6000,0); RecvBuffer[result] = '\0'; if(RecvBuffer[0]!=0) { return 1;//error } if(RecvBuffer[1]!=90) { return 2;// } string sendBuffer = "GET /html/45.html HTTP/1.1\r\n"; sendBuffer += "Host:www.mawudi.cn\r\n"; sendBuffer += "User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\r\n"; sendBuffer += "Cache-Control: no-cache\r\n"; sendBuffer += "Proxy-Connection: close\r\n"; sendBuffer += "Connection: close\r\n\r\n"; w_rs = send(sockfd,sendBuffer.c_str(),sendBuffer.size(),0); while (true) { memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = recv(sockfd,&RecvBuffer,6000,0); cout << RecvBuffer << endl; if (result <= 0) { break; } } close(sockfd); return 0;}int HttpSocket::Socks5Proxy(){ int result=0; int sockfd=0; int len=0; struct sockaddr_in address; string proxy_server = "202.105.182.87"; unsigned int proxy_port = 1080; string username = "netmwd"; string userpwd = "netwmdnetwmdnetwmdnetwmdnetwmd"; sockfd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr(proxy_server.c_str()); address.sin_port = htons(proxy_port); len = sizeof(address); result = connect(sockfd, (struct sockaddr *)&address, len); if (result == -1) { string errstr = strerror(errno); return 1; } char buf[100]={0}; int w_rs=0; buf[0] = 5; buf[1] = 2; buf[2] = 0; buf[3] = 2; w_rs = send(sockfd,(const char *)buf,4,0); char RecvBuffer[6001]={0}; memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = recv(sockfd,&RecvBuffer,6000,0); RecvBuffer[result] = '\0'; if(RecvBuffer[0]!=5) { cout << strerror(errno) << endl; return 2; } if(RecvBuffer[1]==2)//添加用户名密码作为验证 { const char *puser = username.c_str(); char buf[1000]={0}; int ulen = strlen(puser); int i = 0; buf[i++] = 1; buf[i++] = ulen; int j = 0; while(j < ulen) { buf[i++] = *(puser++); j++; } puser = userpwd.c_str(); ulen = strlen(puser); buf[i++] = ulen; j = 0; while(j < ulen) { buf[i++] = *(puser++); j++; } w_rs = send(sockfd,(const char *)buf,i-1,0); memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = recv(sockfd,&RecvBuffer,6000,0); if(result <= 0) { cout << strerror(errno) << endl; return 3; } RecvBuffer[result] = '\0'; if(RecvBuffer[0]!=1) { return 4; } if(RecvBuffer[1]!=0) { return 5; } } memset(buf, 0, sizeof(buf)); buf[0]=5; buf[1]=1; buf[2]=0; buf[3]=1; struct hostent *hostinfo=0; hostinfo = gethostbyname("61.152.238.80"); const char *ipaddress = hostinfo->h_addr_list[0]; buf[4]=ipaddress[0]; buf[5]=ipaddress[1]; buf[6]=ipaddress[2]; buf[7]=ipaddress[3]; unsigned short int wport = htons(80); memcpy(&buf[8],&wport,2); w_rs = send(sockfd,(const char *)buf,10,0); memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = recv(sockfd,&RecvBuffer,6000,0); if(result <= -1) { cout << strerror(errno) << endl; return 6; } RecvBuffer[result] = '\0'; if(RecvBuffer[0]!=5) { return 7; } if(RecvBuffer[1]!=0) { return 8; } string sendBuffer = "GET /html/45.html HTTP/1.1\r\n"; sendBuffer += "Host:www.mawudi.cn\r\n"; sendBuffer += "User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\r\n"; sendBuffer += "Cache-Control: no-cache\r\n"; sendBuffer += "Proxy-Connection: close\r\n"; sendBuffer += "Connection: close\r\n\r\n"; w_rs = send(sockfd,sendBuffer.c_str(),sendBuffer.size(),0); while (true) { memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = recv(sockfd,&RecvBuffer,6000,0); cout << RecvBuffer << endl; if (result <= 0) { break; } } close(sockfd); return 0;}int HttpSocket::RequestSSL(){ string sslhost = "91.189.90.19"; unsigned int sslport = 443; SSL_CTX *ctx; SSL *ssl; int result=0; int sockfd=0; int len=0; SSL_library_init(); SSL_load_error_strings(); SSLeay_add_ssl_algorithms(); ctx = SSL_CTX_new(SSLv3_client_method()); struct sockaddr_in address; sockfd = socket(AF_INET, SOCK_STREAM, 0); address.sin_family = AF_INET; address.sin_addr.s_addr = inet_addr(sslhost.c_str()); address.sin_port = htons(sslport); len = sizeof(address); result = connect(sockfd, (struct sockaddr *)&address, len); if (result == -1) { string errstr = strerror(errno); return 1; } ssl=SSL_new(ctx); SSL_set_fd(ssl,sockfd); result=SSL_connect(ssl); if(result == -1) { cout << SSL_get_error(ssl, result) << endl; return 2; } string sendBuffer = "GET / HTTP/1.1\r\n"; sendBuffer += "Host:help.ubuntu.com\r\n"; sendBuffer += "User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\r\n"; sendBuffer += "Cache-Control: no-cache\r\n"; sendBuffer += "Proxy-Connection: close\r\n"; sendBuffer += "Connection: close\r\n\r\n"; result=SSL_write(ssl,sendBuffer.c_str(), sendBuffer.size()); if(result <= 0) { cout << SSL_get_error(ssl, result) << endl; return 3; } char RecvBuffer[6001]; while (true) { memset(RecvBuffer, 0, sizeof(RecvBuffer)); result = SSL_read(ssl, RecvBuffer, 6000); cout << RecvBuffer << endl; if (result <= 0) { break; } } SSL_shutdown(ssl); SSL_free(ssl); SSL_CTX_free(ctx); close(sockfd); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -