Linux – Per user network traffic accounting under Linux

accountinglinuxnetworkingtraffic

I have several users on a computer running Linux (Ubuntu Lucid to be more specific).

I need to see how much network traffic they generate on a specific interface.

Iptables can match outgoing packages, so I could create chains for every user to be able to count outgoing network traffic. However, incoming traffic is significant too.

I have several options:
-Writing a new iptables match for incoming packets
-Writing a new iptables module that combines outgoing packet user match and connection tracking
-Writing a TUN/TAP driver that somehow able to identify the sender / receiver process and user, and write a log
-…

What is the best way to do this? Are there any existing solutions for this?

Thank you in advance.

Best Answer

I managed to figure this out.

I wrote an LD_PRELOAD library that overrides send, recv, read, write family of functions and logs these operations on sockets.

The source code is very experimental and not secure, but anyway, I put it on SourceForge:

https://sourceforge.net/projects/netacct/