如何使用nethogs监视Linux中的网络流量
什么是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