【问题标题】:Can I tunnel TLS traffic in bash without multithreading?我可以在没有多线程的情况下在 bash 中隧道 TLS 流量吗?
【发布时间】:2019-08-31 16:57:28
【问题描述】:

我想使用 bash 在 Linux 上传输 TLS 流量。我可以在没有多线程的情况下做到这一点吗?是否有可预测的消息交换顺序,以便我在任何时候只需要听其中一方的声音?

我正在为 Linux 编写代理服务器,并且需要隧道 TLS。我更喜欢用 bash 来做。

exec 3<>/dev/tcp/example.com/443
while 1
do
    cat <mypipe >&3
    cat <&3 >mypipe
done

我可以这样做吗?大致?我的意思是,这是一个可行的架构吗?没关系,我最终应该退出循环。我打算使用信使在命名管道 mypipe 中提供数据,并收集响应。

信使是用来运行代码的:

cat <&0 >mypipe
cat <mypipe

要发送的数据来自标准输入(http 请求的正文)。

【问题讨论】:

    标签: bash proxy tls1.2 tunneling


    【解决方案1】:

    不,这不是一个可行的架构。

    即使不了解您计划如何将数据输入管道,通过 TLS 进行通信的端点也没有义务按照您阻止 cat 调用的要求传递消息。

    另外,bash 不做多线程。它允许您启动多个作业/进程,但它本身不是多线程的。

    【讨论】:

    • 我知道第一个 cat 块,但为什么会出现问题?
    • 因为它是一个代理,我假设你是管道是为了在两个方向上传回数据,看起来第二个 cat 是为了在其中一个方向上传递数据。它永远不会执行,因此数据只会朝一个方向移动。
    • 数据将由信使提供给命名管道 mypipe。一旦有数据,第一只猫就会执行并完成。然后第二只猫侦听来自目标服务器的回复,读取它并将其转发到 mypipe,由信使收集它。就是这样。
    • @Henrik4 在多个协议级别上来回发生。例如,请参阅“强制性 SSL/TLS 握手图形”here,其中显示了在 TLS 设置期间来回传递的消息。这就是 只是 TLS -- http,尤其是使用 keepalive(通过单个连接来回多次)等。我对您的问题的回答是:这是 not 一个可行的架构。
    • 我遇到了另一个问题:缓冲。 cat(以及各种 TCP 堆栈)喜欢在传递大块数据之前对其进行缓冲。但是如果发送者完成并且缓冲区还没有满......管道可能会停止(可能永远),每个人都在等待其他人。 TCP 有办法解决这个问题:PSH flag 告诉接收网络堆栈立即刷新其缓冲区。但是cat 无法识别这一点,更不用说将其传递给下一个链接了。
    猜你喜欢
    • 1970-01-01
    • 2014-10-03
    • 2021-07-05
    • 2012-10-08
    • 2021-12-22
    • 1970-01-01
    • 2017-12-31
    • 2019-01-31
    • 2016-08-11
    相关资源
    最近更新 更多