[.Net] Activer les traces réseaux

dotnet network tracing

Aujourd’hui je vais vous montrer un super fonctionnalité du framework DotNet: comment tracer les connexions réseau d’une application.

Presque tous mes projets utilisent des sockets sous diverses formes: serveur web, connexion TCP ou UDP, …
Pour pour débugguer toute la partie réseau j’utilise principalement WireShark.

Mais en fouillant dans la MSDN j’ai trouvé une astuce simple qui permet de tracer la couche réseau de votre application sans avoir à modifier votre code.

Tout d’abord, il faut activer les traces doit le Menu “My Project -> Compile -> Advanced Compile Options…”.

dotnet network trace

dotnet network trace

Pour activer les traces réseau pour votre projet DotNet, il suffit de créer un fichier qui portera le même nom que votre exécutable suivi de “.config”. Par exemple si votre exécutable s’appelle “MonServerTcp.exe”, alors le fichier à créer devra se nommer “MonServerTcp.exe.config”.

Ce fichier devra contenir un certain nombre de paramètres que j’ai trouvé dans la MSDN (je n’ai fait que copier leur exemple).

Voici le contenu du fichier “.config” permettant d’activer les traces réseaux:

<configuration>
  <system.diagnostics>
    <sources>
      <source name="System.Net" tracemode="includehex" maxdatasize="1024">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
      <source name="System.Net.Sockets">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
      <source name="System.Net.Cache">
        <listeners>
          <add name="System.Net"/>
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="System.Net" value="Verbose"/>
      <add name="System.Net.Sockets" value="Verbose"/>
      <add name="System.Net.Cache" value="Verbose"/>
    </switches>
    <sharedListeners>
      <add name="System.Net"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="network.log"
      />
    </sharedListeners>
    <trace autoflush="true"/>
  </system.diagnostics>
</configuration>

Il ne vous reste plus qu’à exécuter votre application et un fichier “network.log” va apparaitre. Il contiendra les traces réseau de votre application. Voici un exemple de résultat obtenu pour un simple Ping:

System.Net.Sockets Verbose: 0 : [1684] Socket#26753075::SendTo()
System.Net.Sockets Verbose: 0 : [3244] Data from Socket#64686183::ReceiveFrom
System.Net.Sockets Verbose: 0 : [3244] (printing 1024 out of 8197)
System.Net.Sockets Verbose: 0 : [3244] 00000000 : 45 00 00 3C 01 F7 00 00-80 01 00 00 0A 01 01 42 : E..<...........B
System.Net.Sockets Verbose: 0 : [1684] Data from Socket#26753075::SendTo
System.Net.Sockets Verbose: 0 : [1684] 00000000 : 08 00 EA B2 08 37 00 01-41 42 43 44 45 46 47 48 : .....7..ABCDEFGH
System.Net.Sockets Verbose: 0 : [1684] 00000010 : 49 4A 4B 4C 4D 4E 4F 50-51 52 53 54 55 56 57 58 : IJKLMNOPQRSTUVWX
System.Net.Sockets Verbose: 0 : [1684] 00000020 : 59 5A 5B 5C 5D 5E 5F 60-                        : YZ[\]^_`

Leave a Reply

Your email address will not be published. Required fields are marked *