- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我构建了一个名为 Tun2Socks GUI 的应用程序.它是使 Socks 代理透明的程序。
通常它使用 SSH 端口转发或 TOR 作为 SOCKS 服务,但我希望它也可以使用 HTTP 代理。因此,我自己构建了连接到该 HTTP 代理的 SOCKS5 代理。它可以很好地捕获来自客户端的 HTTP 请求以发送到 HTTP 代理。
客户端发送SSL请求时的问题,我无法捕获要转发的请求。如何通过 HTTP 代理从 SOCKS 代理发出 SSL 请求的最佳方法?
请求传输的架构如下:客户端 SSL 请求 > SOCKS 代理 > HTTP 代理 > 互联网
谢谢
最佳答案
当客户端有意通过代理与目标服务器建立 SSL session 时,它不会与代理本身建立 SSL session 。客户端首先告诉代理建立到目标服务器的连接,然后客户端启动与目标服务器的 SSL session 。在这种情况下,代理不可能嗅探流量,因为它是加密的,也不应该尝试这样做。代理只是一种传递,它根据需要在客户端和服务器之间来回交换原始数据。代理不应该关心客户端发送什么样的请求,因为客户端告诉代理连接到哪里。
如果您以客户端不知道您的代理存在的方式在客户端和服务器之间注入(inject)您的代理,客户端将不知道它需要调整其请求以使其对代理友好。客户端将连接到您的代理,但它会认为它已连接到目标服务器,因此将启动您的代理必须响应的 SSL 握手。只有这样,您的代理才能访问客户端的请求数据(前提是握手成功,例如客户端未验证对等证书),然后可以根据需要将未加密的数据隧道传输到下一个代理。
更新:我刚刚想到了另一种适用于明文和 SSL 连接的方案。无论您是在客户端不知道的情况下透明地将客户端的出站连接重定向到您的 SOCKS 代理,还是客户端有意连接到 SOCKS 代理并告诉它去哪里,SOCKS 代理都知道客户端的目标主机/IP:端口. SOCKS 代理可以直接连接到目标,也可以连接到 HTTP 代理并要求它通过 HTTP CONNECT
创建到目标的隧道。方法。如果成功,则客户端与目标建立了可行的连接,并且客户端发送的任何数据(SSL 或其他方式)都将按原样流向目标,反之亦然。除了目标主机/IP:端口之外,SOCKS 代理和 HTTP 代理都不需要知道有关客户端请求的任何信息。这是在初始 SOCKS 请求中,或者从截获的 TCP header 中捕获,或者从客户端显式获取。
关于ssl - 如何通过 http 代理发出 Socks 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22548081/
我在使用 IdHTTP 客户端组件时遇到一般 Indy 错误结合 SOCKS5 代理服务器并使用 SSL。 如果我将 IdHTTP 组件与我的 SOCKS5 代理(和非 https URL)一起使用,
使用代理连接(HTTP 代理:10.3.100.207,端口 8080)。 使用 python 的 request 模块的 get 函数,得到以下错误: “无法从 socks://10.3.100.2
如何为我的应用程序添加 SOCKS 支持?我在哪里可以得到库? 最佳答案 来自 http://java.sun.com/javase/6/docs/technotes/guides/net/proxi
我正在设置一个安装和配置了 docker 的基础镜像,这样当我运行我的 jenkins 管道时我可以进行 anchor 扫描。我必须将 anchor 图像拉到 docker 图像中,因为我的管道在 d
我提供了一个工作客户端和服务器文件。客户端向服务器发送图片。当你注释掉时: data = sock.recv(1024) print("received: ",str(data,"UTF-8")) 图
为什么我的 SOCKS 代理代码抛出 SocketException: Malformed reply from SOCKS server?我试过在 URLConnection 或其他中设置,但这不起
您好,我刚刚下载了适用于 OS X 10.11 的 mysql 5.7.13,我在让 phpmyadmin 连接它时遇到问题。 我能够完全安装 mysql,打开 mysql 服务器并设置 root 密
我正在尝试从容器内部控制主机 docker 服务。 对于 Linux 主机和 Linux 容器,通常是这样完成的:docker run -it -v/var/run/docker.sock:/var/
我正在使用将执行 docker 命令(docker ps 等)的图像设置 kubernetes 部署。 我的 yaml 如下所示: kind: Deployment apiVersion: apps/
我使用 this guide 安装 docker .我正在使用 Distributor ID: Ubuntu Description: Ubuntu 13.10 Release: 13.1
我正在使用以下命令启动docker: /usr/bin/dockerd --bip=172.30.224.1/21 --ip-masq=false --mtu=1450 --containerd=/r
我刚注册到 Stack Overflow,因为从 2 天前开始我真的无法摆脱这个问题。我使用 Xampp。 所以,我正在关注这个 Laravel tutorial当我从终端输入项目目录或每个其他目录
首先,我发誓我已经查看了涉及此错误的每一个问题。几乎每个人提供的解决方案都是不同的,而且似乎没有人理解错误的系统原因。我和网络上遇到这个常见问题的许多人需要的是对实际出了什么问题的解释。 基本上,当我
Magento 显示“处理您的请求时出错” 尝试命令“sudo service mysqld restart”但启动失败 然后看到日志显示“SQLSTATE[HY000] [2002] 没有这样的文件
Ubuntu 15.04 64位,docker 1.6.1,用户在docker组中。 操作系统启动后,每个docker命令执行都会导致此错误: FATA[0000] Get http:///var/r
我的问题开始于我无法再以 root 身份登录我的 mysql 安装。我试图在没有打开密码的情况下运行 mysql...但是每当我运行命令时 # mysqld_safe --skip-grant-tab
我的问题开始于我在安装 mysql 时无法再以 root 身份登录。我试图在没有打开密码的情况下运行 mysql ......但是每当我运行命令时 # mysqld_safe --skip-grant
简单明了,谁能解释一下如何通过代理 (socks4/5) 连接到 mysql 服务器。最好通过 mysql 命令行(尽管在客户端中没有选项)。 如果无法通过 mysql 命令行,那么任何其他方法都可以
简单明了,谁能解释一下如何通过代理 (socks4/5) 连接到 mysql 服务器。最好通过 mysql 命令行(尽管在客户端中没有选项)。 如果无法通过 mysql 命令行,那么任何其他方法都可以
我试图通过与 SoX 中的脉冲响应进行卷积来应用混响。以下 shell 脚本完全符合我的要求: #!/usr/bin/env bash # # Convolve audio file with and
我是一名优秀的程序员,十分优秀!