socks5服务器选型与搭建
前言迩来向导安排了新使命,需要搭建一台socks5服务器,然后再做一个远程登录客户端,嵌入网络代理功能。最初的想法是把vpn嵌入到自己做的客户端内里,但这个技能要求相对来说太高了,小弟气力还远远不够。背面QQ、钉钉等客户端软件得到灵感,发现他们登录界面都内嵌了网络代理功能,随后小弟便想到了下图的架构。
https://i-blog.csdnimg.cn/direct/3a1b26d51ada4b8a87784cf7c7790aa1.png#pic_center
socks5代理服务器预研及总结
四款socks5服务器分析
[*]shadowsocks 需要安装专门的客户端毗连,雷同于openvpn需要有客户端和服务端配套使用
[*]ss5 该方案较为古老,下载完安装包之后,编译失败(ubuntu22系统)
[*]goproxy 采取go语言开辟,该方案最新且性能较好,但是高级功能需要购买商业版(免费版本无法使用用户名密码认证),如果需要稳定使用购买该商业版较好
[*]socks-server,采取c++语言开辟,服务端可以设置用户名,密码认证,缺点该服务器相对小众,运用在生产环境不确定是否稳定
最后选择socks-server,项目地址:https://github.com/xukeawsl/socks-server
socks-server安装搭建
[*] 下载堆栈并创建构建目录
git clone https://github.com/xukeawsl/socks-server.git
cd socks-server
mkdir build
cd build
https://i-blog.csdnimg.cn/direct/e6e2273902da46d8be1f7b03ddd47041.png#pic_center
[*] 使用cmake构建release版本
build_type选择release
cmake -DCMAKE_BUILD_TYPE=Release ..
https://i-blog.csdnimg.cn/direct/47139c74414d4d1bacadbf5c2d690aa4.png#pic_center
构建
cmake --build .
https://i-blog.csdnimg.cn/direct/e5f208a5801b495dada317d6eb428002.png#pic_center
[*] 安装,我这里选择到**/usr/local/**目录下
cmake --install . --prefix /usr/local
https://i-blog.csdnimg.cn/direct/20432b645ab245b799cc03b205ea9066.png#pic_center
[*] 进入安装目录后执行
cd /usr/local/socks_server/Release/bin/
./socks_server
发现报如图错误
https://i-blog.csdnimg.cn/direct/865400ce70964500871a27ef4cb39381.png#pic_center
我这里为了方便,直接将libsocks_server.4.3.so移动到系统目录下面去了
mv libsocks_server.4.3.so /usr/lib/x86_64-linux-gnu/
再执行一遍发现运行成功无报错
./socks_server
[*] 修改config.json文件,配置用户名密码登录
cd /usr/local/socks_server/Release/
vim config.json
https://i-blog.csdnimg.cn/direct/72d4c6b92a254dfd8bcd1768146bc904.png#pic_center
[*] 让代理服务器在背景启动并不产生输出
nohup /usr/local/socks_server/Release/bin/socks_server > /dev/null 2>&1 &
使用python脚本测试socks5客户端毗连
[*] 测试代码
import socks
import socket
def test_socks5_proxy_connection(proxy_host, proxy_port, proxy_username, proxy_password, timeout=10):
"""
测试 SOCKS5 代理连接是否能够成功。
:param proxy_host: SOCKS5 代理主机地址
:param proxy_port: SOCKS5 代理端口
:param proxy_username: SOCKS5 代理用户名
:param proxy_password: SOCKS5 代理密码
:param timeout: 连接超时时间(秒)
:return: 如果连接成功,返回 True;否则返回 False
"""
original_socket = socket.socket# 保存原始的 socket 类
try:
# 设置 SOCKS5 代理,包括用户名和密码
socks.set_default_proxy(proxy_type=socks.SOCKS5,addr=proxy_host, port=proxy_port, rdns=True, username=proxy_username, password=proxy_password)
socket.socket = socks.socksocket# 覆盖 socket 模块的 socket 类
test_host = '10.8.0.214'
test_port = 80
with socket.create_connection((test_host, test_port), timeout) as conn:
print(f"成功连接到 SOCKS5 代理 {proxy_host}:{proxy_port},并通过它连接到了 {test_host}:{test_port}")
return True
except Exception as e:
print(f"连接失败: {e}")
return False
finally:
# 恢复原始的 socket 类
socket.socket = original_socket
# 示例用法
if __name__ == "__main__":
proxy_host = '10.10.112.5'
proxy_port = 1080# 常见的 SOCKS5 代理端口
proxy_username = 'narada'
proxy_password = 'narada@123'
result = test_socks5_proxy_connection(proxy_host, proxy_port, proxy_username, proxy_password)
print(f"测试结果: {result}")
[*] 使用正确的用户名密码和错误的用户名密码进行测试
https://i-blog.csdnimg.cn/direct/752d7421e4cd40fa907eb0d3847afb8c.png#pic_center
测试成功!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]