Get the network interface with the most traffic within a sample period using Pcap.net
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
add a comment |
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
add a comment |
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
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
c# pcap.net
asked Sep 14 '18 at 3:00
Dshiz
7061923
7061923
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.
add a comment |
It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.
add a comment |
It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.
It seems like the method that handles PacketSampleStatistics should be a member of a class that is initialized with the interface id.
answered Nov 10 '18 at 7:47
brickner
5,44213049
5,44213049
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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