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

辽宁省建设行业协会网站澄迈住宅与建设局网站

辽宁省建设行业协会网站,澄迈住宅与建设局网站,鞍山做网站的公司,厦门哪里有建设网站的SOCKS5是个代理服务器协议。 我这里有个可用的基本实现#xff0c;下面列出的代码不包含框架和辅助功能#xff0c;仅包含客户端连接建立后的处理#xff0c;没有认证#xff08;因为用的是IP地址限制#xff0c;连接建立之前就审查过了#xff09;。 实现不完整#xf…        SOCKS5是个代理服务器协议。 我这里有个可用的基本实现下面列出的代码不包含框架和辅助功能仅包含客户端连接建立后的处理没有认证因为用的是IP地址限制连接建立之前就审查过了。 实现不完整不支持BINDFTP协议可以使用PASV绕开这个问题。 没有给出实现的函数基本看名字就可以猜出功能。 头文件 //servicethreadsocks.h //SOCKS协议的处理#ifndef servicethreadsocks_h #define servicethreadsocks_h//SOCKS协议处理线程 DWORD ServiceThreadSocks(LPDWORD lpdwParam);//版本标识/方法选择 STATE SocksMethodSelect(SOCKET s,char * buf,int buflen,int * cmd,int * method);//方法选择 BYTE SelectMethod(BYTE * msg);//方法00 //接收用户请求(方法00) STATE SocksRecvRequest00(SOCKET s,char * buf,int buflen,int * cmd);//命令01CONNECT处理方法00 STATE SocksCmd01Method00(LPDWORD lpdwParam,SOCKADDR_IN *);//命令03UDP ASSOCIATE处理方法00 STATE SocksCmd03Method00(LPDWORD lpdwParam,SOCKADDR_IN *);#endif//servicethreadsocks_h 实现文件 //servicethreadsocks.cpp#include stdafx.h #include mystd.h//SOCKS协议处理线程 DWORD ServiceThreadSocks(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 method;char host[256];SOCKADDR_IN sa;char resp[10];//构造错误应答resp[0]5;//版本//resp[1]//应答resp[2]0;//保留resp[3]1;//IPV4memset(resp4,0,6);//退出if(CONNECTIONDATA_CMD_QUITcd-cmd){closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-1;}//版本标识/方法选择过程method返回选中的方法//隐含调用SelectMethod选择一个方法if(1!SocksMethodSelect(cd-sdc.s,cd-sdc.buf,BUFFERSIZE,cd-cmd,method)){closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-2;}//方法子协商结果仅支持无认证(方法0x00)switch(method){case 0x00://无认证break;case 0xff://没有可接受的方法default:closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-3;}//接收用户请求if(1!SocksRecvRequest00(cd-sdc.s,cd-sdc.buf,BUFFERSIZE,cd-cmd)){closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-4;}//记录日志if(-1!cd-log){time(logs-timestart);}//取得目标主机switch((BYTE)cd-sdc.buf[3]){case 0x01://IP V4memcpy((sa.sin_addr.S_un.S_addr),cd-sdc.buf4,4);sa.sin_familyAF_INET;memcpy(sa.sin_port,cd-sdc.buf8,2);if(-1!cd-log){strcpy(logs-domainname,inet_ntoa(sa.sin_addr));}break;case 0x03://domain nameif(cd-sdc.buf[4]256){resp[1]\x01;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-5;}memcpy(host,cd-sdc.buf5,cd-sdc.buf[4]);host[cd-sdc.buf[4]]\0;if(1!GetAddrByHost(sa.sin_addr.S_un.S_addr,host)){resp[1]\x04;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-5;}sa.sin_familyAF_INET;memcpy(sa.sin_port,cd-sdc.buf41cd-sdc.buf[4],2);if(-1!cd-log){strcpy(logs-domainname,host);}break;case 0x04://IP V6default:resp[1]\x08;send(cd-sdc.s,resp,10,0);//0x08地址类型不支持closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return (DWORD)-6;break;}//转移至命令处理在命令处理内部结束所有操作switch(method){case 0x00://无认证switch(cd-sdc.buf[1]){case 0x01://CONNECTif(pci-isenablesocksconnect)SocksCmd01Method00(lpdwParam,sa);else{resp[1]\x02;//请求因不符合规则而被拒绝send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;}break;case 0x03://UDP ASSOCIATEif(-1!cd-log){mystrcat(logs-domainname,256, - UDP ASSOCIATE,FALSE);}SocksCmd03Method00(lpdwParam,sa);break;case 0x02://BIND//直接下落default:resp[1]\x07;//命令未实现send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;break;}break;default:break;}//结束不做任何处理return 1; }//版本标识/方法选择 STATE SocksMethodSelect(SOCKET s,char * buf,int buflen,int * cmd,int * method) {BYTE nmethods;int recvcount0;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;if(recvall1){if(0x05!(BYTE)buf[0]){return -5;}}if(recvall2){nmethodsbuf[1];if(recvallnmethods2){break;}}}//选择方法*methodSelectMethod((BYTE*)buf);buf[1](BYTE)(*method);//发送 方法选择 消息if(SOCKET_ERRORsend(s,buf,2,0)){return -6;}return 1; }//方法选择 BYTE SelectMethod(BYTE * msg) {int i;for(imsg[1];i;i--){if(0x00msg[i1]){return msg[i1];}}return 0xff; }//接收用户请求(方法0x00) STATE SocksRecvRequest00(SOCKET s,char * buf,int buflen,int * cmd) {BYTE atyp;BOOL isrecvendFALSE;int recvcount0;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;if(recvall1){if(0x05!(BYTE)buf[0]){return -5;}}if(recvall6){atypbuf[3];switch(atyp){case 0x01://IP V4if(recvall10){isrecvendTRUE;}break;case 0x03://domain nameif(recvall7buf[4]){isrecvendTRUE;}break;case 0x04://IP V6if(recvall22){isrecvendTRUE;}break;}}if(isrecvend){break;}}return 1; }//*命令01CONNECT处理方法00 STATE SocksCmd01Method00(LPDWORD lpdwParam,SOCKADDR_IN * psa) { //--线程参数处理------------------------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;} //----------------------------------------char str[256];char str2[256];char * pstr;char resp[10];//构造应答resp[0]5;//版本//resp[1]//应答resp[2]0;//保留resp[3]1;//IPV4memcpy(resp4,psa-sin_addr.S_un.S_addr,4);memcpy(resp8,psa-sin_port,2);//建立SOCKETif(INVALID_SOCKET(cd-sdr.ssocket(AF_INET,SOCK_STREAM,0))){resp[1]\x01;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -1;}//退出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 -2;}//连接if(SOCKET_ERRORconnect(cd-sdr.s,(struct sockaddr *)psa,sizeof(*psa))){resp[1]\x04;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);closesocket(cd-sdr.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -3;}else{resp[1]\x00;send(cd-sdc.s,resp,10,0);if(-1!cd-log){strcpy(logs-domainname,SOCKS:CONNECT - );strcpy(str,);switch((BYTE)cd-sdc.buf[3]){case 0x01://IP V4if(NULL!(pstrinet_ntoa(psa-sin_addr))){strcpy(str,pstr);}else{strcpy(str,???);}break;case 0x03://domain namememcpy(str,cd-sdc.buf5,cd-sdc.buf[4]);str[cd-sdc.buf[4]]\0;break;case 0x04://IP V6strcpy(str,IP V6 - 未支持的);break;}mystrcat(logs-domainname,256,str,TRUE);strcpy(str, : );itoa(ntohs(psa-sin_port),str2,10);mystrcat(str,256,str2,TRUE);mystrcat(logs-domainname,256,str,FALSE);}}//退出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 -4;}//接收数据并发给客户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; }//命令03UDP ASSOCIATE处理方法00 STATE SocksCmd03Method00(LPDWORD lpdwParam,SOCKADDR_IN * psa) { //--线程参数处理------------------------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;} //----------------------------------------SOCKET udpsocket;//与远程服务器连接sdr实际与客户连接int fromlensizeof(SOCKADDR_IN);SOCKADDR_IN udpsa;char host[256];char resp[10];BOOL tempbool;struct timeval timeout;timeout.tv_sec0;timeout.tv_usec100000;int i;//构造应答resp[0]5;//版本//resp[1]//应答resp[2]0;//保留resp[3]1;//IPV4//建立客户端 UDP SOCKETif(INVALID_SOCKET(cd-sdr.ssocket(AF_INET,SOCK_DGRAM,0))){resp[1]\x01;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -1;}//bindudpsa.sin_familyAF_INET;udpsa.sin_addr.S_un.S_addrservicedata-serviceconfigfiledata.configarray[cd-serviceindex].sa.sin_addr.S_un.S_addr;udpsa.sin_port0;if(SOCKET_ERRORbind(cd-sdr.s,(sockaddr *)udpsa,sizeof(SOCKADDR_IN))){resp[1]\x01;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -1;}//connectudpsa.sin_familyAF_INET;if(0psa-sin_addr.S_un.S_addr)udpsa.sin_addr.S_un.S_addr((SOCKADDR_IN *)(cd-saSC))-sin_addr.S_un.S_addr;elseudpsa.sin_addr.S_un.S_addrpsa-sin_addr.S_un.S_addr;memcpy(udpsa.sin_port,psa-sin_port,2);if(SOCKET_ERRORconnect(cd-sdr.s,(sockaddr *)udpsa,sizeof(SOCKADDR_IN))){resp[1]\x01;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -1;}isizeof(SOCKADDR_IN);if(SOCKET_ERRORgetsockname(cd-sdr.s,(sockaddr *)udpsa,i)){resp[1]\x01;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -1;}memcpy(resp4,servicedata-serviceconfigfiledata.configarray[cd-serviceindex].sa.sin_addr.S_un.S_addr,4);//设置应答memcpy(resp8,udpsa.sin_port,2);//建立服务器端 UDP SOCKETif(INVALID_SOCKET(udpsocketsocket(AF_INET,SOCK_DGRAM,0))){resp[1]\x01;send(cd-sdc.s,resp,10,0);closesocket(cd-sdc.s);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -1;}//发送应答resp[1]0;if(SOCKET_ERRORsend(cd-sdc.s,resp,10,0)){closesocket(cd-sdc.s);closesocket(cd-sdr.s);closesocket(udpsocket);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -2;}//退出if(CONNECTIONDATA_CMD_QUITcd-cmd){closesocket(cd-sdc.s);closesocket(cd-sdr.s);closesocket(udpsocket);if(-1!cd-log){logs-stateLOGSTRUCT_STATE_NOUSE;}cd-stateCONNECTION_NOUSE;return -2;}int i_Perm;IN_ADDR ipSC;bool bret;int userindex;int reason;//转发数据报i_Perm0;for(;1;){//根据IP检查用户许可i_Perm;if(i_Perm300 servicedata-userfiledata.IsCheckUser){i_Perm0;memcpy(ipSC,cd-saSC.sa_data2,4);if(1!IsUserPermission(servicedata-userfiledata,ipSC,bret,userindex,reason))break;if(!bret)break;}//检查发起连接是否已经关闭if(1!IsSocketReadReady(cd-sdc.s,timeout,tempbool)){break;}if(tempbool){cd-sdc.bufcountrecv(cd-sdc.s,cd-sdc.buf,BUFFERSIZE,0);if(0cd-sdc.bufcount || SOCKET_ERRORcd-sdc.bufcount){break;}}//检查来自客户的数据if(1!IsSocketReadReady(cd-sdr.s,timeout,tempbool)){break;}if(tempbool){cd-sdr.bufcountrecvfrom(cd-sdr.s,cd-sdr.buf,BUFFERSIZE,0,(sockaddr *)udpsa,fromlen);if(0cd-sdr.bufcount || SOCKET_ERRORcd-sdr.bufcount){break;}//取得目标主机switch((BYTE)cd-sdr.buf[3]){case 0x01://IP V4memcpy((udpsa.sin_addr.S_un.S_addr),cd-sdr.buf4,4);udpsa.sin_familyAF_INET;memcpy(udpsa.sin_port,cd-sdr.buf8,2);cd-sdr.bufcount-10;memmove(cd-sdr.buf,cd-sdr.buf10,cd-sdr.bufcount);//MessageBox(NULL,inet_ntoa(udpsa.sin_addr),IP,MB_OK);//这一句显示目标地址break;case 0x03://domain namememcpy(host,cd-sdr.buf5,cd-sdr.buf[4]);host[cd-sdr.buf[4]]\0;if(1!GetAddrByHost(udpsa.sin_addr.S_un.S_addr,host)){closesocket(cd-sdc.s);closesocket(cd-sdr.s);closesocket(udpsocket);if(-1!cd-log){time(logs-timeend);logs-stateLOGSTRUCT_STATE_USED;}cd-stateCONNECTION_NOUSE;return (DWORD)-5;}udpsa.sin_familyAF_INET;memcpy(udpsa.sin_port,cd-sdr.buf41cd-sdr.buf[4],2);cd-sdr.bufcount-61cd-sdr.buf[4];memmove(cd-sdr.buf,cd-sdr.buf61cd-sdr.buf[4],cd-sdr.bufcount);break;case 0x04://IP V6closesocket(cd-sdc.s);closesocket(cd-sdr.s);closesocket(udpsocket);if(-1!cd-log){time(logs-timeend);logs-stateLOGSTRUCT_STATE_USED;}cd-stateCONNECTION_NOUSE;return (DWORD)-6;break;}//sendif(SOCKET_ERRORsendto(udpsocket,cd-sdr.buf,cd-sdr.bufcount,0,(sockaddr *)udpsa,sizeof(SOCKADDR_IN))){closesocket(cd-sdc.s);closesocket(cd-sdr.s);closesocket(udpsocket);if(-1!cd-log){time(logs-timeend);logs-stateLOGSTRUCT_STATE_USED;}cd-stateCONNECTION_NOUSE;return -2;}if(-1!cd-log){logs-bytecountcd-sdr.bufcount;}}//检查来自远端的数据if(1!IsSocketReadReady(udpsocket,timeout,tempbool)){break;}if(tempbool){cd-sdr.bufcountrecvfrom(udpsocket,cd-sdr.buf,BUFFERSIZE,0,(sockaddr *)udpsa,fromlen);if(0cd-sdr.bufcount || SOCKET_ERRORcd-sdr.bufcount || cd-sdr.bufcountBUFFERSIZE-10){if(SOCKET_ERRORcd-sdr.bufcount 10054WSAGetLastError()){continue;}break;}memmove(cd-sdr.buf10,cd-sdr.buf,cd-sdr.bufcount);cd-sdr.bufcount10;cd-sdr.buf[0]0;cd-sdr.buf[1]0;cd-sdr.buf[2]0;cd-sdr.buf[3]1;memcpy(cd-sdr.buf4,udpsa.sin_addr.S_un.S_addr,4);memcpy(cd-sdr.buf8,udpsa.sin_port,2);//MessageBox(NULL,inet_ntoa(udpsa.sin_addr),Source IP,MB_OK);//这一句显示源地址//sendif(SOCKET_ERRORsend(cd-sdr.s,cd-sdr.buf,cd-sdr.bufcount,0)){closesocket(cd-sdc.s);closesocket(cd-sdr.s);closesocket(udpsocket);if(-1!cd-log){time(logs-timeend);logs-stateLOGSTRUCT_STATE_USED;}cd-stateCONNECTION_NOUSE;return -2;}if(-1!cd-log){logs-bytecountcd-sdr.bufcount;}}//退出if(CONNECTIONDATA_CMD_QUITcd-cmd){closesocket(cd-sdc.s);closesocket(cd-sdr.s);closesocket(udpsocket);if(-1!cd-log){time(logs-timeend);logs-stateLOGSTRUCT_STATE_USED;}cd-stateCONNECTION_NOUSE;return -2;}}closesocket(cd-sdc.s);closesocket(cd-sdr.s);closesocket(udpsocket);if(-1!cd-log){time(logs-timeend);logs-stateLOGSTRUCT_STATE_USED;}cd-stateCONNECTION_NOUSE;return 1; } 这里是结束
http://www.pierceye.com/news/402581/

相关文章:

  • 网站栅格如何建设一个外卖订餐平台网站
  • 浙江省网站建设报价群晖wordpress不成功
  • 音乐网站制作策划书网站建设公司的服务公司
  • 南昌定制网站开发多少钱手机在线网页制作
  • 无锡网站推广$做下拉去118cr高端网站建设苏州
  • 该网站未在腾讯云备案网页界面图
  • cms开源建站系统河北省建设厅管网站
  • 网站优化排名易下拉技术做官网的步骤
  • 网站备案多久服装企业 北京 网站建设
  • 网站建设(信奈辉煌电商)陕西富通建设工程有限公司网站
  • 南昌县住房和城乡建设局网站外海网站如何做网站的推广
  • 重庆网站推广报价wordpress全景图
  • 做那个的网站谁有建立什么指标体系和评价程序规范
  • 新旧网站对比全国建设厅网站
  • 有经验的番禺网站建设做球服的网站有哪些
  • 临泉建设网站互联网行业都有哪些工作
  • 甘肃省嘉峪关建设局网站做游戏交易网站
  • 校园网站做自己的广告惠州网络问政平台官网
  • 网站建设使用的什么和国外做贸易用什么网站
  • 苏州自助建站模板宁波seo快速优化
  • 做网站的可行性分析网络推广渠道公司
  • 企业网站优化兴田德润优惠汕头网络营销推广该怎么做
  • 安徽省住房和建设厅网站企业网站建设硬件
  • 网站怎样运营网站文章收录
  • 怎么制作微网站wordpress 自动安装
  • 建设软件网站七台河新闻直播
  • 深圳 公司网站设计网站建设得花多少钱
  • 社交型网站首页面设计分析宁夏电建网站
  • 网站开发需要掌握的知识中国建设网官方网站
  • 制作网站素材网页设计代码步骤