如何使用nethogs监视Linux中的网络流量

时间:2020-03-05 15:28:59  来源:igfitidea点击:

什么是nethogs

nethogs是一个非常有用的工具,它可以找出哪个PID会给网络流量带来麻烦,因为它可以按进程对带宽进行分组,而不是像大多数工具一样按协议或者每个子网划分流量。

它功能丰富,同时支持IPv4和IPv6,在我看来,当我们要确定占用Linux机器上所有带宽的程序时,它是最好的实用程序。

安装nethogs

在使用nethogs之前,我们需要安装libncurses5-dev和libpcap0.8-dev。
以下命令可用于在基于Debian的计算机(例如Ubuntu)上安装libpcap和ncurses。

sudo apt-get install libncurses5-dev libpcap0.8-dev

使用apt软件包管理器下载nethog,如下所示。

sudo apt-get install nethogs

Fedora用户可以在其终端上键入以下命令。

sudo yum install ncurses ncurses-devel
sudo yum install libpcap libcap-devel

然后使用以下命令在RHEL或者CentOS或者Fedora Linux上安装nethog。

yum install nethogs

为什么我们需要在计算机上安装libcap和ncurses模块?
此安装的原因是我们需要用户级网络数据包捕获信息和统计信息。
我们还需要一个像libpcap这样的API编程库来捕获网络流量。

如何使用nethogs

在终端上使用以下命令运行nethogs。

nethogs

你看到了什么?

在我的终端上运行命令nethogs时,我得到以下输出。

You need to be root to run NetHogs!

现在,我们已经完成了在计算机上安装nethogs的时间,现在该是一些实用的命令和不错的提示了。

通过在终端上键入命令nethogs再次运行nethogs。

nethogs

注意:如果在Linux系统上运行nethogs时遇到以下错误,则通常意味着我们正在尝试监视未分配IP地址或者可能未连接的接口。

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

要解决此问题,请在终端上运行命令ip addr来找出具有IP地址的接口。

sudo ip addr

运行以上命令时,我的屏幕上将显示以下输出。

1: lo: mtu 65536 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: mtu 1500 qdisc mq state DOWN qlen 1000
link/ether 50:46:5d:2c:82:bf brd ff:ff:ff:ff:ff:ff
3: wlan0: mtu 1500 qdisc mq state UP qlen 1000
link/ether dc:85:de:42:40:d3 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.10/24 brd 192.168.0.255 scope global wlan0
inet6 fe80::de85:deff:fe42:40d3/64 scope link
valid_lft forever preferred_lft forever
4: vmnet1: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff
inet 172.16.98.1/24 brd 172.16.98.255 scope global vmnet1
inet6 fe80::250:56ff:fec0:1/64 scope link
valid_lft forever preferred_lft forever
5: vmnet8: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff
inet 172.16.183.1/24 brd 172.16.183.255 scope global vmnet8
inet6 fe80::250:56ff:fec0:8/64 scope link
valid_lft forever preferred_lft forever

现在,如果我想监视wla0,我只需在终端上运行命令nethogs wlan0。

nethogs wlan0

以下屏幕截图显示了上述命令的输出。

从上面的屏幕快照中可以看到,nethogs给出了有关消耗我的网络带宽的程序的非常清晰的报告。
目前,我截取了google chrome在youtube上播放歌曲的屏幕截图。

任何有一点技术背景的人都可以从上面的屏幕截图中轻松地了解到,nethogs为我们提供了有关正在使用带宽的程序的进程ID,正在消耗该带宽的程序,正在监视的设备,发送的数据和接收的数据的详细信息。

nethogs可以使用许多有用的选项。
例如,我们可以使用选项-d设置刷新速率的延迟。

例如,如果我们希望将3秒设置为新速率,则在终端上键入以下命令。

nethogs -d 3 wlan0

选项-p有助于在混杂模式下进行嗅探,但是根据nethogs的手册页,不建议这样做。

nethogs -p wlan0

我们是否想知道正在计算机上使用的nethogs工具的版本?
然后使用选项-V。

nethogs -V

尝试获取nethogs的版本时,得到以下输出。

version 0.8.0

如果我们想监视特定的设备,请使用以下命令。

sudo nethogs eth0

我们还可以监视多个网络接口的网络带宽。
例如,尝试在终端上运行以下命令。

sudo nethogs eth0 eth1

我喜欢在跟踪模式下使用nethogs,因为它逐一地突出了连接。

nethogs -t wlan0