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

1688黄页网免费网站建筑模板是干嘛用的

1688黄页网免费网站,建筑模板是干嘛用的,电子商务网站规划与建设步骤,下载一个网站初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github#xff1a;codetoys#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的#xff0c;可以在任何平台上使用。 早期上网经常需要使用代理服务…初级代码游戏的专栏介绍与文章目录-CSDN博客 我的githubcodetoys所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的可以在任何平台上使用。 早期上网经常需要使用代理服务器现在用的比较少了大家更耳熟能详的反而是“反向代理”如Nginx。 代理服务器一般用作局域网上网而反向代理则是把来自互联网的连接转发到局域网上作用刚好相反。 HTTP协议自身就带有对代理服务器的支持。HTTP协议目前主要有多个版本0.9太简单基本不见了1.0只支持一个连接一个请求1.1则支持长连接2.0极大复杂化了传输过程支持多路复用。协议版本这么多但是代理服务器作为中间商可以选择一个较低的版本用户的客户端和服务器一般都有能力适应多个版本。 代理服务器可以选择比较简单的HTTP1.0版本一个连接就是一个请求只需要在连接建立之后做处理处理完请求就是简单的数据转发了。 目录 HTTP1.0协议对代理服务器的支持基本就是两点 代理服务器要做的事情是 代理服务器认证 隧道请求CONNECT 代码示例 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.w-s-a.com/news/981759/

相关文章:

  • 网络销售代理加盟南京seo排名扣费
  • 赤峰中国建设招标网站网站开发投标文件
  • 域名抢住网站婚庆网页设计
  • 公司网站建设的通知南宁怎么做网站
  • 搜狐快站建站教程电子商务网站后台模板
  • .gs域名做网站怎么样做网站有没有用
  • 肇庆住房和城乡建设局网站广州seo公司排名
  • j2ee网站开发买什么书网络媒体有哪些
  • 江西省住房建设部官方网站用多说的网站
  • 云课堂哪个网站做的好网站 集约化平台建设方案的通知
  • 撰写网站栏目规划怎么建自己的平台
  • 中国建设银行巴黎分行网站建设银行忘记密码网站首页
  • 网站左侧树形导航怎么做像wordpress一样的网站吗
  • 做网站用的书公司做网站 需要解决哪些问题
  • 电器网站建设策划书深圳动画制作
  • cpa网站建设wordpress支付宝微信收费吗
  • 权威网站排名桂林生活网论坛
  • 网站设计息济南网站建设济南
  • 安蓉建设总公司网站网站怎么做才能被百度收录
  • 电子商务网站业务流程分析做效果图的外包网站
  • wordpress仿站视频教程wordpress用什么php版本好
  • 郑州做网站九零后网络沧州做网站的专业公司
  • 小游戏网站建设可以自己做图片的软件
  • 湖南地税局官网站水利建设基金app仿制
  • 苏州网站设计kgwl建设网站需要用到哪些技术人员
  • 万户网络做网站如何亚马逊网站建设
  • 门户网站制作费用暴雪公司最新消息
  • 深圳专业建网站公司济南公司做网站的价格
  • 怎么运行自己做的网站网上申请平台怎么申请
  • 旅游公司网站 优帮云新闻近期大事件