IT评测·应用市场-qidao123.com
标题:
socks5服务器选型与搭建
[打印本页]
作者:
守听
时间:
2025-2-14 06:44
标题:
socks5服务器选型与搭建
前言
迩来向导安排了新使命,需要搭建一台socks5服务器,然后再做一个远程登录客户端,嵌入网络代理功能。最初的想法是把vpn嵌入到自己做的客户端内里,但这个技能要求相对来说太高了,小弟气力还远远不够。背面QQ、钉钉等客户端软件得到灵感,发现他们登录界面都内嵌了网络代理功能,随后小弟便想到了下图的架构。
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
复制代码
使用cmake构建release版本
build_type选择release
cmake -DCMAKE_BUILD_TYPE=Release ..
复制代码
构建
cmake --build .
复制代码
安装,我这里选择到**/usr/local/**目录下
cmake --install . --prefix /usr/local
复制代码
进入安装目录后执行
cd /usr/local/socks_server/Release/bin/
./socks_server
复制代码
发现报如图错误
我这里为了方便,直接将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
复制代码
让代理服务器在背景启动并不产生输出
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}")
复制代码
使用正确的用户名密码和错误的用户名密码进行测试
测试成功!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4