如何用spi实现socks5代理

展开全部找到socks5-v1.0r11.tar.gz这个软件包开始编译,安装 #tar xvfz socks5-v1.0r11.tar.gz #cd socks5-v1.0r11 #./configure --with-threads #make #make install 开始配置 一般来说安装完后,会在/etc目录下生成socks5.conf(配置文件)和socks5.passwd(用于验证的文件)这两个文件,下面我把我的配置文件帖出来 #/etc/socks5.conf #指定SOCKS v5绑定的ip地址和监听的端口。如果不指定绑定的IP将使用0.0.0.0 set SOCKS5_BINDINFC 192.168.0.8:1080 #忽略ident请求。当客户机没有运行identd时,使用SOCKS5_NOIDENT将降低超时值 set SOCKS5_NOIDENT #指定连接停顿最长时间。超过最大值后,socks5断开连接 set SOCKS5_TIMEOUT 15 #socks5将接受SOCKS V4 协议的请求,默认不接受 set SOCKS5_V4SUPPORT #指定同时存在的最大子进程数,Socks5预设为64 set SOCKS5_MAXCHILD 4 #指定密码文件 set SOCKS5_PWDFILE /usr/local/socks5/etc/socks5.passwd #对所有的客户连接都使用username/password用户认证方法 auth - - u #允许来自192.168.0.的任何经过用户认证的连接 permit u - 192.168.0. - - -#/usr/local/socks5/etc/socks5.passwd#用户密码userA passwdAuserB passwdBuserC passwdC前面的一些设置由于我在配置文件里都写了相关的内容,就不在说明了 如果不需要用户验证只需要把 auth - - u改成 auth - - -permit u - 192.168.0. - - -改成permit - - - - - -大家注意上面permit - - - - - -这一句,是使任何人都可以使用你的socks5 server,非常不安全(让你作跳板),最好是有点限制 如 permit - - clientIP - - - 开始测试/usr/local/socks5/bin/socks5 -f -s如果出现下面的信息表示测试成功。18210: Socks5 starting at Mon Dec 14 18:23:45 1998 in normal mode然后退出socks5,开始正式运行它在背景模式:正式运行/usr/local/socks5/bin/socks5 -t -s 2> /var/log/socks5最后,加到/etc/rc.d/rc.localecho "/usr/local/socks5/bin/socks5 -t -s 2> /var/log/socks5.log">> /etc/rc.d/rc.local如果要停止socks5,只要运行/usr/local/socks5/bin/stopsocks -kill就行,socks5就会停止!启动测试:/usr/local/socks5/bin/socks5 -t使用非默认端口:如果你想让socks5服务启动的时候不启动默认监听端口1080,比如为1234,我们可以运行如下命令socks5 -b 1234 -t 当然你关掉这个服务,就必须用下面的命令 /usr/local/socks5/bin/stopsocks -p 1234 -kill展开全部如果只支持TCP的话 HOOK WSPConnect如果要支持UDP的话还要HOOK WSPSendto等几个函数。int WSPAPI WSPConnect(SOCKET s,const struct sockaddr *name,int namelen,LPWSABUF lpCallerData,LPWSABUF lpCalleeData,LPQOS lpSQOS,LPQOS lpGQOS,LPINT lpErrno){if (_ProxySwitch == TRUE)//代理开关{struct sockaddr_in sin;sin = *(const struct sockaddr_in *)name;int Port = ntohs(sin.sin_port);char *IP = inet_ntoa(sin.sin_addr);if (strcmp(IP, "127.0.0.1") == 0 || strcmp(IP, "0.0.0.0") == 0){return NextProcTable.lpWSPConnect(s, name, namelen, lpCallerData, lpCalleeData, lpSQOS, lpGQOS, lpErrno);}return Socks5Proxy...... //这里为连接代理服务器的代码。}else{return NextProcTable.lpWSPConnect(s, name, namelen, lpCallerData, lpCalleeData, lpSQOS, lpGQOS, lpErrno);}}