socks5服务器选型与搭建

守听  金牌会员 | 2025-2-14 06:44:01 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 972|帖子 972|积分 2916

前言

迩来向导安排了新使命,需要搭建一台socks5服务器,然后再做一个远程登录客户端,嵌入网络代理功能。最初的想法是把vpn嵌入到自己做的客户端内里,但这个技能要求相对来说太高了,小弟气力还远远不够。背面QQ、钉钉等客户端软件得到灵感,发现他们登录界面都内嵌了网络代理功能,随后小弟便想到了下图的架构。

socks5代理服务器预研及总结

四款socks5服务器分析


  • shadowsocks 需要安装专门的客户端毗连,雷同于openvpn需要有客户端和服务端配套使用
  • ss5 该方案较为古老,下载完安装包之后,编译失败(ubuntu22系统)
  • goproxy 采取go语言开辟,该方案最新且性能较好,但是高级功能需要购买商业版(免费版本无法使用用户名密码认证),如果需要稳定使用购买该商业版较好
  • socks-server,采取c++语言开辟,服务端可以设置用户名,密码认证,缺点该服务器相对小众,运用在生产环境不确定是否稳定
最后选择socks-server,项目地址:https://github.com/xukeawsl/socks-server
socks-server安装搭建


  • 下载堆栈并创建构建目录
    1. git clone https://github.com/xukeawsl/socks-server.git
    2. cd socks-server
    3. mkdir build
    4. cd build
    复制代码

  • 使用cmake构建release版本
    build_type选择release
    1. cmake -DCMAKE_BUILD_TYPE=Release ..
    复制代码

    构建
    1. cmake --build .
    复制代码

  • 安装,我这里选择到**/usr/local/**目录下
    1. cmake --install . --prefix /usr/local
    复制代码

  • 进入安装目录后执行
    1. cd /usr/local/socks_server/Release/bin/
    2. ./socks_server
    复制代码
    发现报如图错误

    我这里为了方便,直接将libsocks_server.4.3.so移动到系统目录下面去了
    1. mv libsocks_server.4.3.so /usr/lib/x86_64-linux-gnu/
    复制代码
    再执行一遍发现运行成功无报错
    1. ./socks_server
    复制代码
  • 修改config.json文件,配置用户名密码登录
    1. cd /usr/local/socks_server/Release/
    2. vim config.json
    复制代码

  • 让代理服务器在背景启动并不产生输出
    1. nohup /usr/local/socks_server/Release/bin/socks_server > /dev/null 2>&1 &
    复制代码
使用python脚本测试socks5客户端毗连


  • 测试代码
    1. import socks
    2. import socket
    3. def test_socks5_proxy_connection(proxy_host, proxy_port, proxy_username, proxy_password, timeout=10):
    4.     """
    5.     测试 SOCKS5 代理连接是否能够成功。
    6.     :param proxy_host: SOCKS5 代理主机地址
    7.     :param proxy_port: SOCKS5 代理端口
    8.     :param proxy_username: SOCKS5 代理用户名
    9.     :param proxy_password: SOCKS5 代理密码
    10.     :param timeout: 连接超时时间(秒)
    11.     :return: 如果连接成功,返回 True;否则返回 False
    12.     """
    13.     original_socket = socket.socket  # 保存原始的 socket 类
    14.     try:
    15.         # 设置 SOCKS5 代理,包括用户名和密码
    16.         socks.set_default_proxy(proxy_type=socks.SOCKS5,addr=proxy_host, port=proxy_port, rdns=True, username=proxy_username, password=proxy_password)
    17.         socket.socket = socks.socksocket  # 覆盖 socket 模块的 socket 类
    18.         test_host = '10.8.0.214'
    19.         test_port = 80
    20.         with socket.create_connection((test_host, test_port), timeout) as conn:
    21.             print(f"成功连接到 SOCKS5 代理 {proxy_host}:{proxy_port},并通过它连接到了 {test_host}:{test_port}")
    22.             return True
    23.     except Exception as e:
    24.         print(f"连接失败: {e}")
    25.         return False
    26.     finally:
    27.         # 恢复原始的 socket 类
    28.         socket.socket = original_socket
    29. # 示例用法
    30. if __name__ == "__main__":
    31.     proxy_host = '10.10.112.5'
    32.     proxy_port = 1080  # 常见的 SOCKS5 代理端口
    33.     proxy_username = 'narada'
    34.     proxy_password = 'narada@123'
    35.     result = test_socks5_proxy_connection(proxy_host, proxy_port, proxy_username, proxy_password)
    36.     print(f"测试结果: {result}")
    复制代码
  • 使用正确的用户名密码和错误的用户名密码进行测试

    测试成功!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表