I decided to write an answer because the comments are too small.
Well, while reading other Q&A on stackoverflow and browsing the web, I have not found a simple solution to your problem.
Actually, for .NET processes it is very simple, you just need to get information from the .NET CLR Networking performance counters - Bytes Received / Bytes Sent, as shown in this Q & amp, A
But in general, getting the bandwidth used for each process is not easy.
For example, the Microsoft Network Monitor sniffer can track a process that only generates Internet packets for TCP traffic, because it probably matches the pairs of IP ports to the processes they use (or something like that, TCP is a connected protocol , so it is easier).
Anyway, if you want to try, you can use the open API (see this blog post for some hint).
However, as suggested in these Q&A ( LINK 1 , LINK 2 ), the right, and probably the only way, is to write an NDIS / TDI driver that can intercept network traffic and expose the .NET API to it.
The problem is that such drivers cannot be written in managed code, so you need to implement it in C / C ++.
Obviously, if you can find a driver / sniffer already written that exposes the called API, you can use it.
For example, WinPCap has one (and some .NET wrappers, such as SharpPCap or PCap.Net ), but I do not think (not sure) that it can get the source codes of the packages, the process information.