守听 发表于 2025-2-14 06:44:01

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]
查看完整版本: socks5服务器选型与搭建