从HttpWebRequest / Response获取基础的TCP连接

Zan*_*ane 5 .net c# httpwebrequest tcpclient

我试图获得有关以比HttpWebRequest和HttpWebResponse更低的权限连接到更低级别网站的信息。我正在使用C#。

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

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

我不能更改正在使用TcpClient的应用程序,因为要可靠地实现所有http东西会很费时间。

Chr*_*aas 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>
Run Code Online (Sandbox Code Playgroud)

这将启用跟踪并在应用程序文件夹中删除名为“System.Net.trace.log”的日志文件。您不会获得您正在寻找的所有信息,并且在应用程序运行时不容易使用这些信息,但至少您不需要运行第三方程序。它没有太多记录,但至少有一些信息。

  • 基于这个想法,您可以编写自己的“TraceListener”,这将使您能够在运行时跟踪同一进程中的所有日志。 (2认同)