🔗 特性:SOCKS 支持
- 目标:为 Squid 添加 SOCKS 支持。
- 状态:测试中。代码可用。
- 预计完成时间:未知
- 版本:
- 开发者:AmosJeffries
🔗 详细信息
Squid 处理许多与 HTTP 相关的协议。但目前无法原生通过 SOCKS 接受或发送 HTTP 连接。
本项目旨在让 http_port 接受 SOCKS 连接,并建立到 SOCKS cache_peer 的出站连接,以便 Squid 可以轻松地通过 SOCKS 网关发送请求,或者自身充当 HTTP SOCKS 网关。
🔗 Squid 的现有状态
一些研究表明,SOCKSv5 应该像一个新的 bind() 调用和库链接一样简单。 https://squid.org.cn/mail-archive/squid-users/199901/0033.html
export CFLAGS=" -Dbind=SOCKSbind "
export CXXFLAGS=" -Dbind=SOCKSbind "
export LDADD=" -lsocks "
了解上游对等连接的工作原理后,可以推断 Squid 的 connect() 调用也可能需要 SOCKS 化,以便使用 cache_peer 连接 SOCKS 代理。这将是
export CFLAGS=" -Dbind=SOCKSbind -Dconnect=SOCKSconnect "
export CXXFLAGS=" -Dbind=SOCKSbind -Dconnect=SOCKSconnect "
这样做似乎可行,可以将 Squid 变成一个 SOCKS 代理。有几个用户报告称他们目前以这种方式使用 Squid。
它有一个缺点,即所有入站和出站连接都是 SOCKS 连接。没有混合 SOCKS/非 SOCKS 连接的折衷方案。
🔗 升级计划
监听器绑定需要为 comm 层调用添加一个新的 COMM_SOCKSBIND 标志,出站连接可能需要为 acting on the bind() choice directly 的 cache_peer 设置一个配置项。
我有一些时间,但不足以做太多事情,我创建了一个分支,据说可以处理监听端口和 SOCKS 对等连接。据我目前所知,它构建并监听一个 http_port。squidclient 也已改编为使用 SOCKS 套接字操作。
待解决的问题
- 此分支似乎无法执行 SOCKS。即使链接了 SOCKS 库并使用了 SOCKS 绑定和连接调用。这很可能是由于我缺乏 SOCKS 编程和调试知识。该分支已构建,并似乎可以正常作为常规代理运行。
- 在 SOCKS_listen() 绑定的端口和常规 listen() 绑定的端口上接收的流量似乎没有区别。常规流量和 SOCKS 流量都尝试了。两个端口都接受了这两种类型的流量!
- 在出站 cache_peer 链接上似乎没有 SOCKS 操作,即使是通过 SSH SOCKS 隧道与 SOCKS 服务器通信,并使用 SOCKS_connect()+SOCKS_bind() 来建立出站连接。可能是在隧道或服务器配置上出错,正在寻找更专业的测试人员来正确测试。
所以目前工作受阻。使用 API 通过 -D= 编译器选项似乎仍然有效,但编写使用 if() 语句的代码却失败了。有什么想法吗?
情况
- 某些应用程序发送 HTTP,但只能配置为使用 SOCKS 代理(而不是 HTTP 代理)作为中继。很奇怪,但确实如此。
- TOR 网络通过 HTTP 流量,但需要 SOCKS 来将网关与该网络接口。
- SSH 隧道似乎也使用/需要 SOCKS 来隧道到另一端的 Web 服务器。
- 有报告称一个 MMORPG 游戏也需要 SOCKS 来作为网关。我在此之前无法验证他们的流量是否实际上是 HTTP。
额外补充:似乎还有一个系统配置设置和配置文件用于设置一个父 SOCKSv5 代理。将其作为可能的自动 cache_peer 条目引入可能很有用。
分类: WantedFeature
导航:站点搜索,站点页面,类别,🔼 向上