Get the network interface with the most traffic within a sample period using Pcap.net










0














I'm trying to use the Pcap.net package to analyze the amount of traffic in bits per second across multiple network interfaces over a small sample period (e.g. 10 seconds). Then I would like to calculate the average of the total bytes per seconds from the results, and then indicate which interface has the most traffic by highighting the associated listBox item.



I'm working with this example from the package github: Statistics Example



I need to do this for each interface simultaneously, so I am launching a method that ultimately calls the PacketSampleStatistics class in a separate thread for each interface.



My problem is that once I'm in the method that uses the PacketSampleStatistics class, I don't know how to identify the interface by its index anymore, and therefore I can't tie it to the listbox item.



I populate the listbox and launch a new thread for each interface like so:



public Form1()

InitializeComponent();
// Retrieve the device list from the local machine

IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;

if (allDevices.Count == 0)

Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
return;


// Print the list
for (int i = 0; i != allDevices.Count; ++i)

LivePacketDevice device = allDevices[i];
Console.Write((i + 1) + ". " + device.Name);
int pcapInt = i + 1;
if (device.Description != null)

Console.WriteLine(" (" + device.Description + ")");
listBox1.Items.Add((pcapInt) + ". " + device.Description);

else
Console.WriteLine(" (No description available)");



foreach (var netInts in listBox1.Items)

int curIndex = 1 + listBox1.Items.IndexOf(netInts);
Console.WriteLine(curIndex);
Thread getStats = new Thread(() => GetNetStatistics(curIndex));
Console.WriteLine("Interface index: " + curIndex);
getStats.Start();




This creates a new thread for each network interface and it writes the bits per second to the console by starting a method called GetNetStatistics. This method then starts the StatisticsHandler which uses the PacketSampleStatistics class to write the bits per second for each interface to the console in its own thread, which is working.



I tried invoking a delegate to update objects on my main form, which works if I'm doing this for only one network interface/one thread at a time. But I need to be able to do this for every network interface at the same time.



My commented out code at the end of the PacketSampleStatistics class shows my attempts to figure this out.



private void StatisticsHandler(PacketSampleStatistics statistics)


// Current sample time
DateTime currentTimestamp = statistics.Timestamp;

// Previous sample time
DateTime previousTimestamp = _lastTimestamp;

// Set _lastTimestamp for the next iteration
_lastTimestamp = currentTimestamp;

// If there wasn't a previous sample than skip this iteration (it's the first iteration)
if (previousTimestamp == DateTime.MinValue)
return;

// Calculate the delay from the last sample
double delayInSeconds = (currentTimestamp - previousTimestamp).TotalSeconds;

// Calculate bits per second
double bitsPerSecond = Math.Truncate(statistics.AcceptedBytes * 8 / delayInSeconds);

// Calculate packets per second
double packetsPerSecond = statistics.AcceptedPackets / delayInSeconds;

// Print timestamp and samples
Console.WriteLine(statistics.Timestamp + " BPS: " + bitsPerSecond + " PPS: " + packetsPerSecond);

//invoke delegate to update main form
//MethodInvoker inv = delegate
//
//bytesSecond.Text = bitsPerSecond.ToString();
//listBox1.Items[0] = listBox1.Items[0] + bitsPerSecond.ToString();
//;
//this.Invoke(inv);











share|improve this question


























    0














    I'm trying to use the Pcap.net package to analyze the amount of traffic in bits per second across multiple network interfaces over a small sample period (e.g. 10 seconds). Then I would like to calculate the average of the total bytes per seconds from the results, and then indicate which interface has the most traffic by highighting the associated listBox item.



    I'm working with this example from the package github: Statistics Example



    I need to do this for each interface simultaneously, so I am launching a method that ultimately calls the PacketSampleStatistics class in a separate thread for each interface.



    My problem is that once I'm in the method that uses the PacketSampleStatistics class, I don't know how to identify the interface by its index anymore, and therefore I can't tie it to the listbox item.



    I populate the listbox and launch a new thread for each interface like so:



    public Form1()

    InitializeComponent();
    // Retrieve the device list from the local machine

    IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;

    if (allDevices.Count == 0)

    Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
    return;


    // Print the list
    for (int i = 0; i != allDevices.Count; ++i)

    LivePacketDevice device = allDevices[i];
    Console.Write((i + 1) + ". " + device.Name);
    int pcapInt = i + 1;
    if (device.Description != null)

    Console.WriteLine(" (" + device.Description + ")");
    listBox1.Items.Add((pcapInt) + ". " + device.Description);

    else
    Console.WriteLine(" (No description available)");



    foreach (var netInts in listBox1.Items)

    int curIndex = 1 + listBox1.Items.IndexOf(netInts);
    Console.WriteLine(curIndex);
    Thread getStats = new Thread(() => GetNetStatistics(curIndex));
    Console.WriteLine("Interface index: " + curIndex);
    getStats.Start();




    This creates a new thread for each network interface and it writes the bits per second to the console by starting a method called GetNetStatistics. This method then starts the StatisticsHandler which uses the PacketSampleStatistics class to write the bits per second for each interface to the console in its own thread, which is working.



    I tried invoking a delegate to update objects on my main form, which works if I'm doing this for only one network interface/one thread at a time. But I need to be able to do this for every network interface at the same time.



    My commented out code at the end of the PacketSampleStatistics class shows my attempts to figure this out.



    private void StatisticsHandler(PacketSampleStatistics statistics)


    // Current sample time
    DateTime currentTimestamp = statistics.Timestamp;

    // Previous sample time
    DateTime previousTimestamp = _lastTimestamp;

    // Set _lastTimestamp for the next iteration
    _lastTimestamp = currentTimestamp;

    // If there wasn't a previous sample than skip this iteration (it's the first iteration)
    if (previousTimestamp == DateTime.MinValue)
    return;

    // Calculate the delay from the last sample
    double delayInSeconds = (currentTimestamp - previousTimestamp).TotalSeconds;

    // Calculate bits per second
    double bitsPerSecond = Math.Truncate(statistics.AcceptedBytes * 8 / delayInSeconds);

    // Calculate packets per second
    double packetsPerSecond = statistics.AcceptedPackets / delayInSeconds;

    // Print timestamp and samples
    Console.WriteLine(statistics.Timestamp + " BPS: " + bitsPerSecond + " PPS: " + packetsPerSecond);

    //invoke delegate to update main form
    //MethodInvoker inv = delegate
    //
    //bytesSecond.Text = bitsPerSecond.ToString();
    //listBox1.Items[0] = listBox1.Items[0] + bitsPerSecond.ToString();
    //;
    //this.Invoke(inv);











    share|improve this question
























      0












      0








      0







      I'm trying to use the Pcap.net package to analyze the amount of traffic in bits per second across multiple network interfaces over a small sample period (e.g. 10 seconds). Then I would like to calculate the average of the total bytes per seconds from the results, and then indicate which interface has the most traffic by highighting the associated listBox item.



      I'm working with this example from the package github: Statistics Example



      I need to do this for each interface simultaneously, so I am launching a method that ultimately calls the PacketSampleStatistics class in a separate thread for each interface.



      My problem is that once I'm in the method that uses the PacketSampleStatistics class, I don't know how to identify the interface by its index anymore, and therefore I can't tie it to the listbox item.



      I populate the listbox and launch a new thread for each interface like so:



      public Form1()

      InitializeComponent();
      // Retrieve the device list from the local machine

      IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;

      if (allDevices.Count == 0)

      Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
      return;


      // Print the list
      for (int i = 0; i != allDevices.Count; ++i)

      LivePacketDevice device = allDevices[i];
      Console.Write((i + 1) + ". " + device.Name);
      int pcapInt = i + 1;
      if (device.Description != null)

      Console.WriteLine(" (" + device.Description + ")");
      listBox1.Items.Add((pcapInt) + ". " + device.Description);

      else
      Console.WriteLine(" (No description available)");



      foreach (var netInts in listBox1.Items)

      int curIndex = 1 + listBox1.Items.IndexOf(netInts);
      Console.WriteLine(curIndex);
      Thread getStats = new Thread(() => GetNetStatistics(curIndex));
      Console.WriteLine("Interface index: " + curIndex);
      getStats.Start();




      This creates a new thread for each network interface and it writes the bits per second to the console by starting a method called GetNetStatistics. This method then starts the StatisticsHandler which uses the PacketSampleStatistics class to write the bits per second for each interface to the console in its own thread, which is working.



      I tried invoking a delegate to update objects on my main form, which works if I'm doing this for only one network interface/one thread at a time. But I need to be able to do this for every network interface at the same time.



      My commented out code at the end of the PacketSampleStatistics class shows my attempts to figure this out.



      private void StatisticsHandler(PacketSampleStatistics statistics)


      // Current sample time
      DateTime currentTimestamp = statistics.Timestamp;

      // Previous sample time
      DateTime previousTimestamp = _lastTimestamp;

      // Set _lastTimestamp for the next iteration
      _lastTimestamp = currentTimestamp;

      // If there wasn't a previous sample than skip this iteration (it's the first iteration)
      if (previousTimestamp == DateTime.MinValue)
      return;

      // Calculate the delay from the last sample
      double delayInSeconds = (currentTimestamp - previousTimestamp).TotalSeconds;

      // Calculate bits per second
      double bitsPerSecond = Math.Truncate(statistics.AcceptedBytes * 8 / delayInSeconds);

      // Calculate packets per second
      double packetsPerSecond = statistics.AcceptedPackets / delayInSeconds;

      // Print timestamp and samples
      Console.WriteLine(statistics.Timestamp + " BPS: " + bitsPerSecond + " PPS: " + packetsPerSecond);

      //invoke delegate to update main form
      //MethodInvoker inv = delegate
      //
      //bytesSecond.Text = bitsPerSecond.ToString();
      //listBox1.Items[0] = listBox1.Items[0] + bitsPerSecond.ToString();
      //;
      //this.Invoke(inv);











      share|improve this question













      I'm trying to use the Pcap.net package to analyze the amount of traffic in bits per second across multiple network interfaces over a small sample period (e.g. 10 seconds). Then I would like to calculate the average of the total bytes per seconds from the results, and then indicate which interface has the most traffic by highighting the associated listBox item.



      I'm working with this example from the package github: Statistics Example



      I need to do this for each interface simultaneously, so I am launching a method that ultimately calls the PacketSampleStatistics class in a separate thread for each interface.



      My problem is that once I'm in the method that uses the PacketSampleStatistics class, I don't know how to identify the interface by its index anymore, and therefore I can't tie it to the listbox item.



      I populate the listbox and launch a new thread for each interface like so:



      public Form1()

      InitializeComponent();
      // Retrieve the device list from the local machine

      IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;

      if (allDevices.Count == 0)

      Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
      return;


      // Print the list
      for (int i = 0; i != allDevices.Count; ++i)

      LivePacketDevice device = allDevices[i];
      Console.Write((i + 1) + ". " + device.Name);
      int pcapInt = i + 1;
      if (device.Description != null)

      Console.WriteLine(" (" + device.Description + ")");
      listBox1.Items.Add((pcapInt) + ". " + device.Description);

      else
      Console.WriteLine(" (No description available)");



      foreach (var netInts in listBox1.Items)

      int curIndex = 1 + listBox1.Items.IndexOf(netInts);
      Console.WriteLine(curIndex);
      Thread getStats = new Thread(() => GetNetStatistics(curIndex));
      Console.WriteLine("Interface index: " + curIndex);
      getStats.Start();




      This creates a new thread for each network interface and it writes the bits per second to the console by starting a method called GetNetStatistics. This method then starts the StatisticsHandler which uses the PacketSampleStatistics class to write the bits per second for each interface to the console in its own thread, which is working.



      I tried invoking a delegate to update objects on my main form, which works if I'm doing this for only one network interface/one thread at a time. But I need to be able to do this for every network interface at the same time.



      My commented out code at the end of the PacketSampleStatistics class shows my attempts to figure this out.



      private void StatisticsHandler(PacketSampleStatistics statistics)


      // Current sample time
      DateTime currentTimestamp = statistics.Timestamp;

      // Previous sample time
      DateTime previousTimestamp = _lastTimestamp;

      // Set _lastTimestamp for the next iteration
      _lastTimestamp = currentTimestamp;

      // If there wasn't a previous sample than skip this iteration (it's the first iteration)
      if (previousTimestamp == DateTime.MinValue)
      return;

      // Calculate the delay from the last sample
      double delayInSeconds = (currentTimestamp - previousTimestamp).TotalSeconds;

      // Calculate bits per second
      double bitsPerSecond = Math.Truncate(statistics.AcceptedBytes * 8 / delayInSeconds);

      // Calculate packets per second
      double packetsPerSecond = statistics.AcceptedPackets / delayInSeconds;

      // Print timestamp and samples
      Console.WriteLine(statistics.Timestamp + " BPS: " + bitsPerSecond + " PPS: " + packetsPerSecond);

      //invoke delegate to update main form
      //MethodInvoker inv = delegate
      //
      //bytesSecond.Text = bitsPerSecond.ToString();
      //listBox1.Items[0] = listBox1.Items[0] + bitsPerSecond.ToString();
      //;
      //this.Invoke(inv);








      c# pcap.net






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Sep 14 '18 at 3:00









      Dshiz

      7061923




      7061923






















          1 Answer
          1






          active

          oldest

          votes


















          0














          It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.






          share|improve this answer




















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52324384%2fget-the-network-interface-with-the-most-traffic-within-a-sample-period-using-pca%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.






            share|improve this answer

























              0














              It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.






              share|improve this answer























                0












                0








                0






                It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.






                share|improve this answer












                It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 10 '18 at 7:47









                brickner

                5,44213049




                5,44213049



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52324384%2fget-the-network-interface-with-the-most-traffic-within-a-sample-period-using-pca%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

                    How do I collapse sections of code in Visual Studio Code for Windows?

                    ャフサォクコ ケウ,コ,ワ メ,ロスョノ゙,クネ,フムカヤヲニ,エコ゚ツ ウイオン゙ケワサネォキモュキォウイノンコチ゚メヌナイゥフュ,カヒウネェ ネ,ホノケ,ムュキ ッボーミュハ,チ ツス ィ メウイマヤ,゙ウチ ヅ ロ,ォジヌェ ャヌット ェ,マャ,チナエヒネソキツテ トホヲヲミーァ