Demo样例,请勿用于实际环境,不足之处欢迎指点和纠正,感激不尽
浏览器与远程服务器直接通过socks5连接,socks5协议的数据都是未加密的明文,因此可以被监听(不考虑应用层的加密协议,仅针对传输层)
模拟172.17.0.1为浏览器,172.17.0.2为服务器
浏览器尝试与远程服务器握手,发送050100
表明socks5协议,仅支持无密码认证方式
服务器选中一个方法返回给客户端,返回0500
使用无密码认证方式
浏览器向服务器发送请求细节,包含域名和端口120.x.x.201:50735
服务器收到请求后,需要返回一个响应其中包含服务绑定的地址和端口
完成握手后,服务器开始进行中继
浏览器向服务器发送请求,服务器收到后,解析内容,如果是TCP请求,服务器向目标建立TCP连接,将所有数据转发到目标(即120.x.x.201:50735
)
可以看到数据被明文传输
浏览器连接本地客户端,本地客户端与远程服务器通过socks5连接,传输数据为未加密的明文,因此可以被监听(不考虑应用层的加密协议,仅针对传输层)
与alpha的差别在于将传输流程拆分,本地客户端在浏览器与远程服务器之间起到了桥梁的作用,为后面添加加密操作打基础
浏览器连接本地客户端,本地客户端与远程服务器之间的数据传输被加密,无法被监听
生成RSA文件
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.pem
EDCH握手示例
客户端向服务器发送握手报文
服务器生成共享密钥并回应握手报文
客户端请求在经过RC4加密(密钥会该次EDCH握手协商得到的共享密钥)后发送到服务器
服务器解密后发送到目标地址
服务器接收目标地址的响应报文
响应报文在经过RC4加密(密钥会该次EDCH握手协商得到的共享密钥)后发送到客户端
客户端正确解密
文件发送测试,客户端加密
服务器解密并转发
目的地址正确接收文件