从HttpWebRequest / Response获取底层tcp连接

时间:2011-01-03 16:07:44

标签: c# .net httpwebrequest tcpclient

我正在尝试获取有关当我连接到比HttpWebRequest和HttpWebResponse给我更低级别的网站时发生的事情的更多信息。我正在使用C#。

我希望能够看到有关dns查找的信息以及建立连接所花费的时间(如果建立了新连接)。 HttpWebRequest和HttpWebResponse工作在比这更高的级别,我想询问是否有获取底层TcpClient对象(或他们使用的任何低级别对象)的方法。

如果不可能,那么有没有办法获取和操作.net正在维护的连接列表,而不通过HttpWebRequest或HttpWebResponse获取它?

我无法更改我正在使用TcpClient的应用程序,因为可靠地实现所有http内容会花费太多时间。

3 个答案:

答案 0 :(得分:4)

我能得到的最好的方法是创建一个包含以下信息的app.config文件:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <system.diagnostics>
        <trace autoflush="true" />
            <sources>
                <source name="System.Net" maxdatasize="1024">
                    <listeners>
                        <add name="MyTraceFile"/>
                    </listeners>
                </source>
              <source name="System.Net.Sockets" maxdatasize="1024">
                    <listeners>
                        <add name="MyTraceFile"/>
                    </listeners>
                </source>  
           </sources>


            <sharedListeners>
                <add
                  name="MyTraceFile"
                  type="System.Diagnostics.TextWriterTraceListener"
                  initializeData="System.Net.trace.log"
                />
            </sharedListeners>
            <switches>
                <add name="System.Net" value="Verbose" />
              <add name="System.Net.Sockets" value="Verbose" />
            </switches>
    </system.diagnostics>
</configuration>

这将启用跟踪,并将在您的应用程序文件夹中启动名为“System.Net.trace.log”的日志文件。您不会获得所需的所有信息,并且在应用程序运行时不易消耗,但至少您不需要运行第三方程序。它的记录不多,但至少有some information

答案 1 :(得分:2)

使用Wireshark,这是了解所有内容的最佳方式。

答案 2 :(得分:1)

如果不是Wireshark,请使用Fiddler