当前位置: 首页 > news >正文

网站分类有哪些移动卡套餐

网站分类有哪些,移动卡套餐,百度搜索不到自己的网站,wordpress邮件发布早期上网经常需要使用代理服务器#xff0c;现在用的比较少了#xff0c;大家更耳熟能详的反而是“反向代理”如Nginx。 代理服务器一般用作局域网上网#xff0c;而反向代理则是把来自互联网的连接转发到局域网上#xff0c;作用刚好相反。 HTTP协议自身就带有对代理服务器…        早期上网经常需要使用代理服务器现在用的比较少了大家更耳熟能详的反而是“反向代理”如Nginx。 代理服务器一般用作局域网上网而反向代理则是把来自互联网的连接转发到局域网上作用刚好相反。 HTTP协议自身就带有对代理服务器的支持。HTTP协议目前主要有多个版本0.9太简单基本不见了1.0只支持一个连接一个请求1.1则支持长连接2.0极大复杂化了传输过程支持多路复用。协议版本这么多但是代理服务器作为中间商可以选择一个较低的版本用户的客户端和服务器一般都有能力适应多个版本。 代理服务器可以选择比较简单的HTTP1.0版本一个连接就是一个请求只需要在连接建立之后做处理处理完请求就是简单的数据转发了。 HTTP1.0协议对代理服务器的支持基本就是两点 请求行对使用绝对URL专用于代理服务器的Proxy-XXXX头标 代理服务器要做的事情是 取出请求行的服务器域名和端口并擦除擦除后与直接请求的请求行相同将协议版本降低为自己支持的版本根据proxy-XXXX头标处理并擦除像直接请求一样访问服务器转发数据给用户 前面说的“擦除”是把后面的数据前移而不是设置为空格设置为空格并不符合HTTP协议服务器一般不能理解。 原则上代理服务器可以支持客户端和服务器是不同的协议版本比如客户端是1.0而服务器是1.1这将极大地影响程序复杂度。 虽然HTTP的BODY与代理服务器处理无关只需要接受完头部就可以处理但是最好整个请求完整发送因为有些服务器不能处理请求头和BODY分开的情形。 代理服务器认证 代理服务器通过Proxy-XXXX头标进行认证这个认证是代理服务器的认证而不是用户要访问的服务器的认证。代理服务器认证完后就应该删除这些头标因为这些头标对目标服务器毫无意义。 隧道请求CONNECT CONNECT是个不常用的头标专门用于代理。代理服务器取得目标服务器后直接连上去就可以了然后就是双向转发数据。 代码示例 下面的代码就是一个HTTP1.0代理的协议处理部分的代码没有认证因为用的是IP地址认证在进入这个代码之前就已经处理过了 //servicethreadhttp.cpp#include stdafx.h #include mystd.h #include Proxy.h #include httpresp.hextern CProxyApp theApp;//HTTP协议处理线程 DWORD ServiceThreadHttp(LPDWORD lpdwParam) { //--线程参数处理------------------------int cdindex;//连接数据索引struct ServiceData * servicedata;cdindex((struct ThreadUserData *)lpdwParam)-index;servicedata((struct ThreadUserData *)lpdwParam)-servicedata; //--------------------------------------struct ConnectionData * cd;struct LogStruct * logs;cdservicedata-connectiondataarray.pconnectiondata[cdindex];if(-1!cd-log){logsservicedata-memlogfile.logstructcd-log;}else{logsNULL;} //----------------------------------------struct ConfigInfo * pci;pciservicedata-serviceconfigfiledata.configarray[cd-serviceindex];int headlen;int port;char host[256];char uri[256];unsigned long addr;SOCKADDR_IN sa;BOOL isTunnelFALSE;//是否是隧道请求char tunnelresponse[]HTTP/1.0 200 Connection established\x0d\x0aProxy-agent: FreeProxy 1.0\x0d\x0a\x0d\x0a;//退出if(CONNECTIONDATA_CMD_QUITcd-cmd){closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-1;}//接收请求cd-sdc.bufcountRecvHttpRequest(cd-sdc.s,cd-sdc.buf,BUFFERSIZE,cd-cmd,headlen,pci-islimitpost,1000*pci-maxpost);if(0cd-sdc.bufcount){//DebugMessage(RecvHttpRequest失败);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-1;}//分析请求 /* char tracertfile[256];if(-1!mymemindex(cd-sdc.buf,cd-sdc.bufcount,says%2Fnick,strlen(says%2Fnick))){strcpy(tracertfile,tracert_);itoa(cdindex,tracertfilestrlen(tracertfile),10);if(-1!cd-log)WriteTracertFile(tracertfile,logs-username,strlen(logs-username));WriteTracertFile(tracertfile,cd-sdc.buf,cd-sdc.bufcount);}*/if(0GetHttpURL(cd-sdc.buf,cd-sdc.bufcount,headlen4,host,256,port,uri,256)){if(pci-isenableconnect 0GetTunnelURL(cd-sdc.buf,cd-sdc.bufcount,headlen4,host,256,port,uri,256)){//是隧道请求isTunnelTRUE;if(-1!cd-log){strcpy(logs-domainname,host);}}else{send(cd-sdc.s,httpresp400,strlen(httpresp400),0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-2;}}else{if(-1!cd-log){strcpy(logs-domainname,host);}}ClearProxyInfo(cd-sdc.buf,cd-sdc.bufcount);//检查目标许可if(IsForbidden(theApp.bandata,host,uri)){send(cd-sdc.s,httpresp403,strlen(httpresp403),0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-1;}//退出if(CONNECTIONDATA_CMD_QUITcd-cmd){closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-1;}//记录日志计时开始if(-1!cd-log){time(logs-timestart);}//域名解析if(1!GetAddrByHost(addr,host)){send(cd-sdc.s,httpresp600,strlen(httpresp600),0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-3;}memcpy((sa.sin_addr.S_un.S_addr),addr,4);sa.sin_familyAF_INET;sa.sin_porthtons((unsigned short)port);//建立SOCKETif(INVALID_SOCKET(cd-sdr.ssocket(AF_INET,SOCK_STREAM,0))){send(cd-sdc.s,httpresp601,strlen(httpresp601),0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-4;}//退出if(CONNECTIONDATA_CMD_QUITcd-cmd){closesocket(cd-sdc.s);closesocket(cd-sdr.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-1;}//连接if(SOCKET_ERRORconnect(cd-sdr.s,(struct sockaddr *)sa,sizeof(sa))){send(cd-sdc.s,httpresp602,strlen(httpresp602),0);closesocket(cd-sdc.s);closesocket(cd-sdr.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-5;}else{if(-1!cd-log){strcpy(logs-domainname,uri);}}//退出if(CONNECTIONDATA_CMD_QUITcd-cmd){closesocket(cd-sdc.s);closesocket(cd-sdr.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-1;}//发送请求if(isTunnel){if(SOCKET_ERRORsend(cd-sdc.s,tunnelresponse,strlen(tunnelresponse),0)){send(cd-sdc.s,httpresp603,strlen(httpresp603),0);closesocket(cd-sdc.s);closesocket(cd-sdr.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-6;}}if(SOCKET_ERRORsend(cd-sdr.s,cd-sdc.buf,cd-sdc.bufcount,0)){send(cd-sdc.s,httpresp603,strlen(httpresp603),0);closesocket(cd-sdc.s);closesocket(cd-sdr.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-6;}//记录字节数if(-1!cd-log){logs-bytecountcd-sdc.bufcount;}///TraceData(servicedata-isDataTrace,servicedata-memlogfile.logdatatrace[cd-log].dc,cd-sdc.buf,cd-sdc.bufcount);//退出if(CONNECTIONDATA_CMD_QUITcd-cmd){closesocket(cd-sdc.s);closesocket(cd-sdr.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-1;}//接收数据并发给客户TransData(cd-sdr.s,cd-sdc.s,cd-sdr.buf,BUFFERSIZE,cd-cmd,cd-sdr.bufcount,servicedata,cd);//记录字节数if(-1!cd-log){logs-bytecountcd-sdr.bufcount;}closesocket(cd-sdc.s);closesocket(cd-sdr.s);if(-1!cd-log){time(logs-timeend);logs-stateLOGSTRUCT_STATE_USED;}cd-stateCONNECTION_NOUSE;return 1; }//接收HTTP请求如果出错不执行closesocket() int RecvHttpRequest(SOCKET s,char * buf,int buflen,int * cmd,int* headlen,BOOL islimitpost,int maxpost) {maxpost1;const char CRLF[]\x0d\x0a;const char CRLFCRLF[]\x0d\x0a\x0d\x0a;const char CONTENTLENGTH[]Content-Length:;int recvcount0;int temp;int recvall0;BOOL tempbool;struct timeval timeout;timeout.tv_sec0;timeout.tv_usec100000;for(;1;){//退出if(CONNECTIONDATA_CMD_QUIT*cmd){return -1;}if(1!IsSocketReadReady(s,timeout,tempbool)){return -2;}if(tempbool){recvcountrecv(s,bufrecvall,buflen-recvall,0);}else{continue;}if(SOCKET_ERRORrecvcount){return -3;}else if(0recvcount){return -4;}recvallrecvcount;//在使用后面代码段时使用CRLFCRLF,4否则使用CRLF,2tempmymemindex(buf,recvall,(char*)CRLFCRLF,4);if(-1!temp){*headlentemp;break;}}if(islimitpost -1!(tempmymemindex(buf,*headlen,(char*)CONTENTLENGTH,15))){long i;char len[10];if(-1(imymemindex(buftemp,buflen-temp,(char*)CRLF,2))){return -5;}i-strlen(CONTENTLENGTH);if(i9){return -6;}memcpy(len,buftempstrlen(CONTENTLENGTH),i);len[i]\0;iatoi(len);if(imaxpost){return -7;}}return recvall; }//取得URL int GetHttpURL(char* buf,int * buflenall,int buflen,char * host,int hostbuflen,int * port,char * uri,int uribuflen) {const char CRLF[]\x0d\x0a;int urlstart,urlend;int hoststart,hostend,hostlen;int portstart,portend,portlen;int pos;char str[10];urlendmymemindex(buf,buflen,(char*)CRLF,2);if(-1(urlstartmymemindex(buf,urlend,http://,7))){return -2; }if(urlend-urlstarturibuflen){memcpy(uri,bufurlstart,uribuflen-1);uri[uribuflen-1]\0;}else{memcpy(uri,bufurlstart,urlend-urlstart);uri[urlend-urlstart]\0;}//得到主机名起始位置hoststarturlstart7;if(-1(posmymemindex(bufhoststart,urlend-hoststart,/,1))){return -3;}portendposhoststart;posmymemindex(bufhoststart,portend-hoststart,:,1);if(-1!pos)//有端口{portstartposhoststart1;//得到端口起始位置hostendposhoststart;portlenportend-portstart;memcpy(str,bufportstart,portlen);str[portlen]\0;if(0portlen) *port80;//若端口长度为零实际上无端口{if(0(*portatoi(str)))return -4;}}else//无端口{*port80;hostendportend;}hostlenhostend-hoststart;if(hostlenhostbuflen)return -5;memcpy(host,bufhoststart,hostlen);host[hostlen]\0;//HTTP请求处理long i;//降版本1.1为1.0if(1buf[urlend-1]){buf[urlend-1]0;}//擦去URLiportend-urlstart;memmove(bufurlstart,bufportend,*buflenall-portend);*buflenall-i;return hostlen; }//取得隧道请求 int GetTunnelURL(char* buf,int * buflenall,int buflen,char * host,int hostbuflen,int * port,char * uri,int uribuflen) {const char CRLF[]\x0d\x0a;int urlstart,urlend;int hoststart,hostend,hostlen;int portstart,portend,portlen;int pos;char str[10];urlendmymemindex(buf,buflen,(char*)CRLF,2);if(buflen8 || 0!memcmp(buf,CONNECT,7))return -2;if( !buf[7])return -2;for(urlstart8;urlstartbuflen;urlstart){if( !buf[urlstart])break;}if(urlenduribuflen){memcpy(uri,buf,uribuflen-1);uri[uribuflen-1]\0;}else{memcpy(uri,buf,urlend);uri[urlend]\0;}//得到主机名起始位置hoststarturlstart;if(-1(posmymemindex(bufhoststart,urlend-hoststart,/,1))){return -3;}portendposhoststart;posmymemindex(bufhoststart,portend-hoststart,:,1);if(-1!pos)//有端口{portstartposhoststart1;//得到端口起始位置hostendposhoststart;portlenportend-portstart;memcpy(str,bufportstart,portlen);str[portlen]\0;if(0portlen) *port80;//若端口长度为零实际上无端口{if(0(*portatoi(str)))return -4;}}else//无端口{*port80;hostendportend;}hostlenhostend-hoststart;if(hostlenhostbuflen)return -5;memcpy(host,bufhoststart,hostlen);host[hostlen]\0;//HTTP请求处理*buflenall0;return hostlen; }//清除代理信息 int ClearProxyInfo(char * buf,int * buflenall) {const char PROXYCONNECTION[]Proxy-Connection;const char CRLF[]\x0d\x0a;int i,j;if(2(imymemindex(buf,*buflenall,PROXYCONNECTION,strlen(PROXYCONNECTION))))return 1;//前面至少应有一个CRLFif(0!memcmp(bufi-2,CRLF,2))return 1;if(-1(jmymemindex(bufistrlen(PROXYCONNECTION),(*buflenall)-i-strlen(PROXYCONNECTION),CRLF,2))){j(*buflenall)-i-strlen(PROXYCONNECTION);}//擦去代理信息memmove(bufi-2,bufistrlen(PROXYCONNECTION)j,(*buflenall)-(istrlen(PROXYCONNECTION)j));*buflenall-2strlen(PROXYCONNECTION)j;return 1; } 主要就是这么几件事取出目标地址和端口擦除目标信息降低版本为1.0擦除Proxy-XXXX头标连接目标双向转发数据。 这个代码是从实际项目中截取出来的。 这里是结束
http://www.zqtcl.cn/news/733844/

相关文章:

  • 大型的营销型网站建设怎么选择网站建设公司
  • 怎么用网站源码建站友情链接交换方式有哪些
  • 国外免费网站服务器链接幼教网站建设分析
  • 做药品网站有哪些陕西专业网站建设价格
  • 网络公司做网站网站 服务器选择
  • 湖南省重点建设项目办公室网站河南省住建局官网
  • 建设网站企业网上银行登录入口官方论坛系统
  • 嘉定建设机械网站合肥制作网页设计
  • 外链网站有哪些空港经济区内的建设工程网站
  • 企业网站开发价阿里云快速备份网站
  • 大型电子商务网站建设成本ai网页生成
  • 网页播放视频 网站开发常用网站搜索引擎
  • 制作一个购物网站要多少钱做创意小视频的网站
  • 淇县网站建设软件定制流程
  • 17网站一起做网店代发流程wordpress悬浮 联系
  • 如何查网站外链快速开发平台 免费开源
  • 做网站有哪些流程怎么做网站电影
  • 做街机棋牌上什么网站发广告网站策划和运营
  • 建网站是什么专业类别阳江网红人物
  • 网站建设工作描述株洲市建设质监站网站
  • 做网站 橙色怎么搭配吐鲁番市网站建设
  • 企业信息网站衡阳高端网站建设
  • 中小学网站建设小程序开发费用是多少
  • 网站开发项目可行性分析单位logo设计
  • 做最好的美食分享网站网站源码网站
  • 宝塔搭建app教程360优化大师下载
  • 杭州网站制作 乐云践新开发公司竣工员工奖励计划
  • 绍兴市越城区建设局网站网站策划运营方案书
  • 怎么查网站备案信息查询wordpress 新安装 慢
  • 做一个卖东西的网站深圳市住房和建设局网站变更