.Net SSL / TLS Passthrough

时间:2012-11-23 00:44:18

标签: c# ssl stream

我想要进行使用SSL / TLS的协议分析,幸运的是我可以安装自己的证书,DNS部分也不会成为问题。我的问题是我该怎么做才能做到这一点。我考虑过使用paros,但它会比它的价值更麻烦。所以我想我可以编写两个C#应用程序。第一个是伪服务器,另一个是伪客户端。两者之间有一个tcp连接,然后我可以使用wireshark。问题是,我对流的经验很少。因此,如果有人能够指出我有用的文章,或者代码很短,那么样本就会很棒。先谢谢你。

1 个答案:

答案 0 :(得分:2)

读取/写入流不是非常困难,您不能只连接流,您需要拥有自己的代码来执行此操作。最好是它自己的线程(或工作流程或任务或你需要的任何线程概念)。

public void ConnectStreams(Stream inStream, Stream outStream)
{
    byte[] buffer = new byte[1024];
    int bytesRead = 0;

    while((bytesRead = inStream.Read(buffer, 0, 1024)) != 0)
    {
        outStream.Write(buffer, 0, bytesRead);
        outStream.Flush();
    }
}

基本上Streams在字节数组上运行。当我们运行这一行时:

while((bytesRead = inStream.Read(buffer, 0, 1024)) != 0)

我们基本上是说,在Read上执行inStream,将读取的字节放入buffer,索引0(缓冲区中)并读取最大值{{ 1}}字节。

然后我们将返回值分配给1024,这是读取的ACTUAL字节数(在这种情况下在bytesRead0之间),如果不等于0,则继续循环。

然后我们简单地将它写回1024,缓冲区包含数据,以及实际读取的字节数。我们执行刷新以实际强制输出,而不是在内部缓冲区中堆叠。

当流到达EOF时,outStream将返回0,循环将退出,您可以继续。这就是您在最简单的级别“连接”两个流的方式。