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

自做跨境电商网站收款自己做网站 怎么赚钱

自做跨境电商网站收款,自己做网站 怎么赚钱,淘客做的网站属于什么类型,建设网站主题初级代码游戏的专栏介绍与文章目录-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.hkea.cn/news/14524945/

相关文章:

  • 惠州 网站建设好文案网站
  • 人力招聘网站建设目的淘宝联盟怎么新建网站
  • 西安mg动画制作网站建设北京专业网站制作价格
  • 中企动力网站建设 长春电影网站开发视频
  • 公司网站现状装修网站平台排行榜
  • 免费网络推广网站网站建设与管理读书心得
  • 汇泽网站建设全国免费信息发布平台
  • 网站源码下载 用户注册域名备案和网站备案的区别
  • 模具外贸营销网站如何做村网站建设计划书
  • 珠海企业建站模板网站页面设计公司电话
  • 网站建设实现用户登录玉林网站制作
  • 广西网站建设哪里有网站建设费用模板
  • 免费做头像网站有哪些wordpress 会议网站
  • 怎么选wordpress模板厦门seo百度快照优化
  • 常州微信网站建设好么推广营销海外网站
  • 七台河建设网站大连关键词排名系统
  • 个人网站怎么建立网站建设前途
  • wordpress 开启伪静态网站seo诊断湖南岚鸿
  • 徐州建站公司模板成都网站建设方案优化
  • 网站自动站建做暧视频网站大全
  • 泊头公司做网站重庆网站营销案例
  • 网站建设技术指标有哪些好的做兼职的网站
  • 国内html5网站案例微盟如何做网站
  • 做单网站网站建设项目收获
  • 网站优化关键词排名公司名字做头诗的网站
  • 高端建设网站做淘宝券网站
  • 网站集群系统建设推广平台的方式有哪些
  • 怎么建设自己导购网站深圳网站制作价格
  • 重庆做蔬菜配送的网站有哪些wordpress4.9.6中文版
  • 网站风格主要包括wordpress主题偷