基于SS5服务端的Socks5客户端
SS5停止更新已经好几年了,用作socks5代理的服务端还是比较稳定的。但是如果要使用加密账号和密码的协议,有些坑需要去填。
1、服务端的账号密码验证方式配置为“s”时,客户端进行协议验证时,需要用“0x21”,此时服务端会提醒不存在该协议或者错误的请求。是因为服务端的代码有问题。
在服务端SS5Mod_socks5.c文件的unsigned char GetMethod(struct _SS5ClientInfo *ci )函数中,有一段判断协议的代码是这样的
do {
if( (node->SrcAddr == n_sa) && (node->Mask == nm) && (sp >= node->SrcRangeMin) && (sp <= node->SrcRangeMax) ) {
if( ((node->Method == NOAUTH) && ci->NoAuth) || (((node->Method == USRPWD) || (node->Method2 == FAKEPWD)) && ci->BasicAuth) ||((node->Method == GSSAPI) && ci->GssApiAuth) )
return node->Method;
if( ((node->Method2 == NOAUTH) && ci->NoAuth) || (((node->Method2 == USRPWD) || (node->Method2 == FAKEPWD)) && ci->BasicAuth) || ((node->Method2 == GSSAPI) && ci->GssApiAuth) )
return node->Method2;
}
if判断时,把账号密码加密模式给丢了,其实要在里边加上 ((node->Method == S_USER_PWD) && ci->SecureBasicAuth)。
2、开发者写在“draft-supa.txt”里的《Socks 5 Secure User-Name and Password authentication protocol》,其实是有问题的。
比如发送密码交换协议时,作者是这样写的:
Now can start the Key Exchange process based of Diffie-Hellman procedure:
Client send a packet with "P", "G" and "A" to the server:
+-----+-----+----+-----+
| STAT| P | G | A |
+-----+----+-----+-----+ STAT:
| 1 | 4 | 4 | 4 | 0x1: Request Key
+-----+-----+----+-----+
服务端验证时,其实是这样的:
+-----+-----+----+-----+-----+----+-----+
| STAT| Plen| P |Glen | G |Alen| A |
+-----+----+-----+-----+----+-----+-----+ STAT:
| 1 | 4 | 4 | 4 | 4 | 4 | 4 | 0x1: Request Key
+-----+-----+----+-----+-----+----+-----+
3、作者在说明文档中说使用的是3des_cbc模式,但是在代码中使用的是3des_cbcm模式,而且未说明密钥的使用方式。实际密钥使用方式为:
ks1:密钥1;(为16字节密钥的左边8字节)
ks2:密钥2;(为16字节密钥的右边8字节)
ks3:密钥3;(为16字节密钥的左边8字节)
随机加密串iv使用0填充 memset(iv2,'\0',sizeof iv2);
需要注意的地方主要就是上边这些了。如果客户端使用其他加密库时(如cryptpp),需要留意与openssl之间的兼容性,所以客户端尽可能的也是用openssl。总之感觉作者没经过测试,就把程序放出来了,贻害无穷啊。
基于SS5服务端的Socks5客户端的更多相关文章
- 基于TCP协议套接字,服务端实现接收客户端的连接并发
基于TCP协议套接字,服务端实现接收客户端的连接并发 服务端 import socket from multiprocessing import Process server=socket.socke ...
- 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发
''' 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发 ''' client import socket import time client = socket.socket() clie ...
- 基于CFSSL工具创建CA证书,服务端证书,客户端证书
背景描述 在局域网中部署组件时,想要通过证书来实现身份的认证,确保通信的安全性,可以通过cfssl工具来进行CA证书,服务端证书,客户端证书的创建. 目录 背景描述 部署cfssl工具 下载,上传cf ...
- centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解
一.简介 iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够 ...
- 服务端挂了,客户端的 TCP 连接还在吗?
作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. 如果「服务端挂掉」指的是「服务端进程崩溃」,服务端的进程在发生崩溃的时候,内核会发送 ...
- [发布]SuperIO v2.2.5 集成OPC服务端和OPC客户端
SuperIO 下载:本站下载 百度网盘 1.修复串口号大于等于10的时候导致IO未知状态. 2.优化RunIODevice(io)函数内部处理流程,二次开发可以重载这个接口. 3.优化IO接收数据, ...
- SVN--下载、安装VisualSVN server 服务端和 TortoiseSVN客户端
前言: 在http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html的博客中已经很详细地介绍了SVN的服务器--VisualS ...
- “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX
"快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...
- 使用rsync在windows(服务端)与linux(客户端)之间同步
说明: 1.cwRsyncServer服务端 系统:Windows7 IP地址:192.168.0.110 2.Rsync客户端 系统:CentOS 6.7 IP地址:192.168.0.141 实现 ...
随机推荐
- 昆仑游戏[JS加密修改]
昆仑游戏:http://www.kunlun.com/index.html JS加密修改 BigTools=window.BigTools;//重点 RSAKeyPair=window.RSAKeyP ...
- canvas-图片翻转
图片90度翻转 在canvas中插入图片需先加载图片(利用Image对象);加载完成后再执行操作drawImage(obj,x,y,w,h) 插入图片的坐标宽高等值 <!DOCTYPE html ...
- 【挖坑】thusc前一周计划2016.5.30-2016.6.3
首先开了徐姥爷blog&&AC记录里的几题,然后还有几个算法&&模板题要搞掉. 今天&&明天: bzoj3571/3083/2752/2727/2728 ...
- 【bzoj4423】 AMPPZ2013—Bytehattan
http://www.lydsy.com/JudgeOnline/problem.php?id=4423 (题目链接) 题意 给出一个N*N的格点图,m次操作,每次切断U,V之间的边,问切断之后,U, ...
- Oracle 性能优化
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table) ...
- hibernate优化笔记(随时更新)
一:优化配置 1.关联映射的配置:对照之前的博客,如:inverse属性的设置(减少对同一对象的多条update语句):在one端设置为true,只会执行一次update语句 2.级联cascade属 ...
- 线程池 Threadpool (还需要补充)
1.池(pool)是一种常见的提高性能的方式.有时创建和销毁一些资源是非常耗费时间的行为.我们会考虑在一个池内放一些资源,在用的时候拿,不够的时候添加,用完就归还,这样就可以避免不断的创建和销毁资源了 ...
- MTK MT33xx型GPS的NMEA协议解析实例
1)解析实现 gps_main.c #include <nmea/nmea.h> #include <string.h> #include <stdio.h> #i ...
- 2016百度之星 资格赛ABCDE
看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...
- github免密码设置
在创建好了github账号之后,我们可以新建自己的github项目.然而,我们在本地代码升级维护的过程中,涉及到git操作的时候并不是想每次都重新输入密码.这个时候我们需要使用ssh和私钥(公钥)来方 ...