Traffic IN / OUT monitoren

  • C#

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Bluespide.

    Traffic IN / OUT monitoren

    Hallo zusammen,

    ich würde mir gerne ein Script schreiben, welches den eingehenden und ausgehenden Traffic meines Laptops ermittelt und mir ausgibt. Am besten wäre eine grafische Oberfläche.
    Leider bin ich nicht der beste in der C# Programmierung. Nein, ich sage es anders. Ich kann fast nichts...

    Gibt es dahingehend ein wenig Code und ein wenig Lektüre?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hallo Sessa,

    Bitte, BITTE sag mir, dass du Unix verwendest. Weil dann ist es fast schon ein Klacks: Conky hat das bereits implementiert und ist opensource UND in C++ geschrieben.
    Aber ich vermute stark, dass du mir mit einem "Nein, ich benutze Windoof" kommen wirst(Kein Bashing - Mein Home-Computer läuft auf Windoof - mein Laptop auf Arch Linux). Und bei WIndows wirst du wohl googlen müssen, welche nativen Libraries sowas können. Irgendwie funktioniert's auch da. ^^

    Grüsse,

    Higlav

    Higlav schrieb:

    welche nativen Libraries sowas können.
    Auf Windows braucht man keine nativen Libaries (mehr). Dafür gibt es .NET Portierungen von Pcap (SharpPcap) und eine entsprechende Libary zum erstellen von Netzwerkpacketen: PacketDotNet.

    Sessa schrieb:

    C# Programmierung
    Sehr gut ;D Ich hab da mal NightHawk geforkt und das von einem schnöden ARP Spoofer zu einem Wireshark Klon umgebaut. Wenn du willst, kann ich dir Code teile schicken.

    Sessa schrieb:

    Am besten wäre eine grafische Oberfläche.
    Du hast die Qual der Wahl: Windows Forms oder WPF?

    Sessa schrieb:

    Leider bin ich nicht der beste
    Es ist noch kein Meister vom Himmel gefallen ;D

    Sessa schrieb:

    Ich kann fast nichts
    Dann würde ich dir von diesem Projekt aber abraten, denn hier solltest du dich schon ein wenig auskennen. Zumindest ein bisschen Event Based Programming, Threading, Netwerk-Kenntnisse (ISO/OSI Modell)

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Wenn du nix kannst dann such dir andere Sachen zum Programmieren und verwende einfach Wireshark.
    Du schreibst auch C#, das Tag ist C++

    LG

    \\EDIT @Higlav
    Deinen Beitrag verstehe ich gar nicht..
    Das ist meine Signatur und sie wird wunderbar sein!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mono“ ()

    Higlav schrieb:

    Nein, ich benutze Windoof

    :)

    Radinator schrieb:

    Wenn du willst, kann ich dir Code teile schicken.

    Gerne!

    Radinator schrieb:

    Dann würde ich dir von diesem Projekt aber abraten

    Dann schaue ich mir nur mal den Code an. So habe ich aber schon einmal einen Anhaltspunkt, danke.

    Radinator schrieb:

    (ISO/OSI Modell)

    Kenne ich, kann ich aber programmiererseitig nicht anwenden.

    Mono schrieb:

    Du schreibst auch C#, das Tag ist C++

    Weil es keinen C# Tag gibt :)

    Sessa schrieb:

    Weil es keinen C# Tag gibt
    Weil du den Thread in Weitere Sprachen und sprachenübergreifende Themen erstellt hat. Wenn du vorhast das ganze in C# zu machen, dann hättest du das Ganze auch unter Sonstiges unterbringen sollen.

    Edit:

    Sessa schrieb:

    Wenn du willst, kann ich dir Code teile schicken.
    Muss meine Aussage korrigieren. Hab grad mein Wireshark Fork nochmal durchgesehen und bemerkt, dass ich da nicht so einfach Code-Teile rausschneiden und dir schicken kann - zumindest sind die Teile dann nicht so verständlich, wie ich mir das vorgestellt habe. Was ich dir aber bieten kann, ist ein Link: Examples. Das einzige, was du aus den Code Beispielen brauchst, ist
    1.) Ein WinPcapDevice erstellen
    2.) Device auswählen, öffnen + lauschen und das PacketArrival abbonnieren
    3.) Im PacketArrival Event kannst du dann aus e.Packet.Data (musst halt zuerst in ein Packet umwandeln - Packet packet = Packet.ParsePacket(LinkLayers.Ethernet, e.Packet.Data);)
    3.) Packet parsen und im View anzeigen

    Der Rest ist dann halt einmal Technoligiefrage (Anzeige mittels WPFDataBinding oder Windows Forms Binding) und fancy Schnickschnack. Ich würd einfach mal das Ganze in einer Console Applicaition ausprobieren (also einfach im PacketArrival Event auf dem Packet .ToString() aufrufen und in der Konsole ausgeben. Kannst dann auch noch ein bisschen mit der Ausgabe spielen und dir ansehen, ob es (PacketDotNet) das kann, was du brauchst.)

    Sessa schrieb:

    eingehenden und ausgehenden Traffic meines Laptops ermittelt und mir ausgibt
    Was genau meinst du mit "Traffic"? lediglich die Info, dass von IP 8.8.8.8 an 192.168.178.20 ein HTTP Packet gesendet wurde oder den Inhalt des Paketes? Für ersteres reicht eigentlich die reine (formatierte) Ausgabe in der Konsole. Willst du aber wissen, WAS genau da drinnen steht, wirst du wohl oder übel den Inhalt des HTTP Packetes parsen müssen.

    Sessa schrieb:

    Am besten wäre eine grafische Oberfläche.
    Wie gesagt: Windows Forms oder WPF, wenn du auf .NET arbeiten willst, sonst (auch wenn das entgegen der bisherigen Ausagen läuft, weil ander Sprache) kannst du das ganze auch in Java mit Swing und jNetPcap.


    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Radinator“ ()

    Radinator schrieb:

    Weil du den Thread in Weitere Sprachen und sprachenübergreifende Themen erstellt hat. Wenn du vorhast das ganze in C# zu machen, dann hättest du das Ganze auch unter Sonstiges unterbringen sollen.

    Sorry!

    Radinator schrieb:

    Was genau meinst du mit "Traffic"? lediglich die Info, dass von IP 8.8.8.8 an 192.168.178.20 ein HTTP Packet gesendet wurde

    Genau. Ich will im grunde nur Wissen, wieviel Traffic über meine IP Adresse verschickt / empfangen wurde.
    Eigenltich egal, welche Pakete bzw. deren Inhalte.

    Aber ich denke, ich dazu echt noch zu schlecht. Muss ich mich weiter rein fuchsen!

    Mono schrieb:

    Schau mal im System.Net.Network Namespace:


    Habe ich gemacht. Als "using" mit aufgenommen.

    Sieht nun so aus:

    C#-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. using System.Net.NetworkInformation;
    7. namespace Traffic
    8. {
    9. class Program
    10. {
    11. static void Main(string[] args)
    12. {
    13. IPv4InterfaceStatistics();
    14. int BytesEmpfangen = BytesReceived { get; }
    15. Console.WriteLine(BytesEmpfangen);
    16. Console.ReadLine();
    17. }
    18. }
    19. }


    Verstehe nicht ganz, wie die Methoden "IPv4InterfaceStatistics()" und "BytesReceived { get; }" anzuwenden sind.
    Verstehe ich das richtig, dass ich "IPv4InterfaceStatistics()" einer variablen zuordnen muss? Aber soweit ich verstanden habe, öffnet diese Methode doch bloß die Statistiken und "BytesReceived { get; }" holt sich die dann bzw. dort speichere ich dann in eine Variable?

    Danke!
    Hi,

    du brauchst dazu ein NetworkInterface

    C#-Quellcode

    1. NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
    2. foreach (NetworkInterface nic in interfaces)
    3. {
    4. Console.WriteLine(nic.Name + "Bytes Sent: {0}",
    5. nic.GetIPv4Statistics().BytesSent);
    6. Console.WriteLine(nic.Name + " Bytes Received: {0}",
    7. nic.GetIPv4Statistics().BytesReceived);
    8. }
    Das ist meine Signatur und sie wird wunderbar sein!
    Danke dir! Sieht schon besser aus.
    Leider erhalte ich beim Debuggen folgende Fehlermeldung:

    Der Index, basierend auf 0 (null), muss größer als oder gleich Null sein, und kleiner als die Größe der Argumentenliste.


    Die Anwendung startet, schmeißt aber dann die Meldung.
    Und noch eine Frage:
    Die Werte, welche über die Schnittstelle ermittelt werden (Bytes) sind die, welche vom Start des Laptops übermittelt wurden?
    Also, ab wann beginnt die Zählung der Bytes?

    Sessa schrieb:

    Also, ab wann beginnt die Zählung der Bytes?
    In VB geht die Zählung von 0 bis [Größe des Arrays], in C# von 0 bis [Größe des Arrays minus 1]

    VB.NET-Quellcode

    1. Dim vbNumberArray(6) As Integer
    2. ' vbNumberArray(0)
    3. ' vbNumberArray(1)
    4. ' vbNumberArray(2)
    5. ' vbNumberArray(3)
    6. ' vbNumberArray(4)
    7. ' vbNumberArray(5)
    8. ' vbNumberArray(6)

    C#-Quellcode

    1. int[] csNumberArray = new int[6];
    2. // csNumberArray[0]
    3. // csNumberArray[1]
    4. // csNumberArray[2]
    5. // csNumberArray[3]
    6. // csNumberArray[4]
    7. // csNumberArray[5]


    Sessa schrieb:

    Leider erhalte ich beim Debuggen folgende Fehlermeldung:
    In welcher Zeile scheint der Fehler auf?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell