Nethogs ioctl failed while establishing local IP

When I tried to monitor my internet bandwidth with nethogs

$ sudo nethogs eth0

I got the following error:

ioctl failed while establishing local IP for selected device eth0. 
You may specify the device on the command line.

This is the output of sudo ip addr:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen1000 link/ether 20:6a:8a:5d:5d:1c brd ff:ff:ff:ff:ff:ff

3: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UNKNOWNqlen 1000
    link/ether 56:10:e4:e0:61:f1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global usb0
    inet6 fe80::5410:e4ff:fee0:61f1/64 scope link 
       valid_lft forever preferred_lft forever

4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 20:7c:8f:79:88:ab brd ff:ff:ff:ff:ff:ff

Usually you get that answer when you try to monitor an interface which has no IP address assigned (probably not connected).

The output from ip addr shows that only one of your interfaces has an IP address, namely usb0.

So sudo nethogs usb0 should finally give the desired result.

As there are comments mentioning different interfaces: if ip addr shows several interfaces with IP-addresses assigned there are two options for you:

  • ip route show | grep default will show you the one device that is used to access "everything outside". e.g.
    default via 192.168.0.253 dev eth1 proto static metric 100 tells me I have to use sudo nethogs eth1
  • If your goal is to look at internal traffic (within a local network or even between virtual machines on the same host) you can try with all devices found by ip addr or ip link.