Q: How do I get the interface speed?
A: On Linux:
$ ethtool eth0 Speed: 1000Mb/s
Not what I want at all,
Q How do I get interface throughput
iftop does what top does for network interfaces:
$ iftop interface: em0 IP address is: 192.168.204.4 MAC address is: ffffffec:ffffffb1:ffffffd7:34:ffffffa3:ffffffa1 pcap_open_live(em0): em0: You don't have permission to capture on that device ((cannot open device) /dev/bpf: Permission denied)
$ sudo iftop ...cool ncurses display...
A Besides iftop and iptraf, also check:
$ bwm-ng ...cool ncurses display...
$ bwm-ng --output csv 1479982871;em0;0.00;0.00;0.00;0;0;0.00;0.00;0.00;0;0;0.00;0.00;0;0 1479982871;lo0;0.00;0.00;0.00;0;0;0.00;0.00;0.00;0;0;0.00;0.00;0;0 1479982871;total;0.00;0.00;0.00;0;0;0.00;0.00;0.00;0;0;0.00;0.00;0;0
Q How do those commands gather their data?
A It is different everywhere
Getting a look a network rates is really easy on FreeBSD, the systat tool in ifstat ships with the base system. But if you want to do this programmatically there isn't a lot of information out there, I had to read source code to figure out how to do it.
iftop error message indicates they are doing a capture of all the
traffic on all interfaces and working this stuff out on their own. That
requires root and I really don't want the hassle of doing it, surely the OS is
capturing these stats from the network stack?
On Linux, these stats are exposed via
There may actually be other interfaces for Linux, but I don't think it is worth digging any further.
On FreeBSD you can do what systat does and use a sysctl call to populate a struct. The bwm-ng man page has a heap of methods for finding these numbers on different platforms, for the BSD's and MacOS it suggests the getifaddrs interface.
For portable code not written in C I will probably set up a thread running
bwm-ng outputting csv data.
Reading: Cibola Burn, Excession