Autor Beitrag
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mo 23.01.12 17:49 
Hallo,

ich wollte mir gerade kurz einen Trafficlogger schreiben. Unter anderem mache ich das so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            label1.Text = Convert.ToString(nics.Length);
            foreach (NetworkInterface netint in nics)
            {
                if (netint.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                {
                    listBox1.Items.Add(netint.Name + netint.Id + netint.Speed);
                    IPv4InterfaceStatistics intstat = netint.GetIPv4Statistics();
                    listBox2.Items.Add(netint.Name + " - " + Convert.ToString(intstat.BytesReceived));
                    long s = intstat.BytesReceived - intstat.NonUnicastPacketsReceived;
                    listBox2.Items.Add(netint.Name + " - " + Convert.ToString(s));
                }
            };

Das ganze habe ich an einen Timer gehangen, der das ganze aktualisiert. Nun gibt es in der Netzwerkübersicht von Windows auch die Möglichkeit, sich die Empfangenen Pakete anzuschauen. Das habe ich getan und musste feststellen, dass die .NET Routine (trotz meiner Subtraktion bei long s) schlappe 10.000.000 Bytes über der von Windows liegt :shock:

Hat da jemand eine Idee, was ich falsch mache? Eigentlich müsste doch der gleiche Traffic herauskommen :nixweiss:

Grüße
Regan
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 23.01.12 18:21 
Hallo Regan,

du substrahierst Pakete von Bytes, das kann doch irgendwie nicht richtig sein...

Ich bin mir aber bei BytesReceived nicht sicher, ob dies alle empfangenen Bytes sind oder nur die Nutzdaten (ich denke laut MSDN eher ersteres).
Regan Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mo 23.01.12 19:10 
Wenn ich die Pakete nicht subtrahieren würde, wären es ja noch mehr. Da wäre der Unterschied zu groß. Wie gesagt: Netzwerkanzeige < Programm. Ich habe das auch nochmal in einem Screenshot dokumentiert. Da habe ich auch die Subtraktion herausgenommen und schreibe nur die gesendeten und empfangenen Bytes nieder.

Edit: Gerade mal testweise IPv6 auf dem LAN-Adapter deaktiviert und neugestartet: gleiches Bild.
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 24.01.12 13:17 
Ich kenne mich nicht im Detail mit dem TCP/IP-Protokoll aus, aber wahrscheinlich wirst du die (konstante) Headergröße (je Paket) subtrahieren müssen, d.h.
ausblenden Quelltext
1:
userBytesReceived = totalBytesReceived - HeaderSize * PacketsReceived;					
Regan Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mi 25.01.12 14:18 
Das funktioniert leider nicht so einfach. Ich habe auch mal probehalber netstat -e ausgeführt. Das führt mich zu noch anderen Ergebnissen. Schade, dann funktioniert das wohl nicht.