一、iftop命令html
iftop能夠用來監控網卡的實時流量(能夠指定網段)、反向解析IP、顯示端口信息、TCP/IP鏈接等
官網:http://www.ex-parrot.com/~pdw/iftop/node
[root@Super ~]# yum install flex byacc libpcap ncurses ncurses-devel libpcap-devel -y [root@Super ~]# wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz [root@Super ~]# tar -zxvf iftop-0.17.tar.gz [root@Super ~]# cd iftop-0.17 [root@Super iftop-0.17]# ./configure [root@Super iftop-0.17]# make [root@Super iftop-0.17]# make install [root@Super iftop-0.17]# iftop --help iftop: unknown option -- iftop: display bandwidth usage on an interface by host Synopsis: iftop -h | [-npbBP] [-i interface] [-f filter code] [-N net/mask] -h display this message -n don't do hostname lookups -N don't convert port numbers to services -p run in promiscuous mode (show traffic between other hosts on the same network segment) -b don't display a bar graph of traffic -B Display bandwidth in bytes -i interface listen on named interface -f filter code use filter code to select packets to count (default: none, but only IP packets are counted) -F net/mask show traffic flows in/out of network -P show ports as well as hosts -m limit sets the upper limit for the bandwidth scale -c config file specifies an alternative configuration file iftop, version 0.17 copyright (c) 2002 Paul Warren <pdw@ex-parrot.com> and contributors [root@Super iftop-0.17]#
或者安裝好epel源後直接yum install iftop -y安裝linux
直接運行後效果圖以下c++
[root@Super soft]# iftop interface: ens32 IP address is: 192.168.100.127 MAC address is: 00:50:56:a9:1c:49 [root@Super soft]#
<= 、=> 左右箭頭,表示流量的方向;
右邊3列,表示的是該訪問ip鏈接到本機2秒,10秒和40秒的平均流量
TX:發送流量
RX:接收流量
TOTAL:總流量
Cumm:運行iftop到目前時間的總流量
peak:流量峯值
rates:分別表示過去 2s 10s 40s 的平均流量git
-i:設定監測的網卡,如:# iftop -i eth1
-B:以bytes爲單位顯示流量(默認是bits),如:# iftop -B
-n:使host信息默認直接都顯示IP,如:# iftop -n
-N:使端口信息默認直接都顯示端口號,如: # iftop -N
-F:顯示特定網段的進出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h:(display this message),幫助,顯示參數信息
-p:使用這個參數後,中間的列表顯示的本地主機信息,出現了本機之外的IP信息;
-b:使流量圖形條默認就顯示;
-f:過濾計算包;
-P:使host信息及端口信息默認就都顯示;
-m:設置界面最上邊的刻度的最大值,刻度分五個大段顯示,例:# iftop -m 100Mgithub
h:切換是否顯示幫助;
n:切換顯示本機的IP或主機名;
s:切換是否顯示本機的host信息;
d:切換是否顯示遠端目標主機的host信息;
t:來往的數據合併成一行,切換顯示格式爲2行/1行/只顯示發送流量/只顯示接收流量;
N:切換顯示端口號或端口服務名稱;
S:切換是否顯示本機的端口信息;
D:切換是否顯示遠端目標主機的端口信息;
p:切換是否顯示端口信息;
P:切換暫停/繼續顯示;
b:切換是否顯示平均流量圖形條;
B:切換計算2秒或10秒或40秒內的平均流量;
T:切換是否顯示每一個鏈接的總流量;
l:打開屏幕過濾功能,輸入要過濾的字符,好比ip,按回車後,屏幕就只顯示這個IP相關的流量信息;
L:切換顯示畫面上邊的刻度;刻度不一樣,流量圖形條會有變化;
j或k:能夠向上或向下滾動屏幕顯示的鏈接記錄;
1或2或3:能夠根據右側顯示的三列流量數據進行排序;
<:根據左邊的本機名或IP排序;
「>:」根據遠端目標主機的主機名或IP排序
o:切換是否固定只顯示當前的鏈接;
f:能夠編輯過濾代碼,這是翻譯過來的說法,我還沒用過這個!
!:可使用shell命令,這個沒用過!沒搞明白啥命令在這好用呢!
q:退出監控。redis
二、iptraf命令docker
iptraf是一款交互式、色彩鮮豔的IP局域網監控工具。它能夠顯示每一個鏈接以及主機之間傳輸的數據量。以生成各類網絡統計數據,包括TCP信息、UDP統計、ICMP和OSPF信息、以太網負載信息、節點統計、IP校驗和錯誤和其它一些信息。shell
[root@localhost ~]# yum install -y epel-release [root@localhost ~]# yum install iptraf-ng -y
-i iface 網絡接口:當即在指定網絡接口上開啓IP流量監視,iface爲all指監視全部的網絡接口,iface指相應的interface
-g 當即開始生成網絡接口的概要狀態信息
-d iface 網絡接口:在指定網絡接口上當即開始監視明細的網絡流量信息,iface指相應的interface
-s iface 網絡接口:在指定網絡接口上當即開始監視TCP和UDP網絡流量信息,iface指相應的interface
-z iface 網絡接口:在指定網絡接口上顯示包計數,iface指相應的interface
-l iface 網絡接口:在指定網絡接口上當即開始監視局域網工做站信息,iface指相應的interface
-t timeout 時間:指定iptraf指令監視的時間,timeout指監視時間的minute數
-B 將標註輸出從新定向到「/dev/null」,關閉標註輸入,將程序做爲後臺進程運行
-L logfile 指定一個文件用於記錄全部命令行的log,默認文件是地址:/var/log/iptraf
-I interval 指定記錄log的時間間隔(單位是minute),不包括IP traffic monitor
-u 容許使用不支持的接口做爲以太網設備
-f 清空全部計數器
-h 顯示幫助信息bash
1)Reverse DNS lookups:查看鏈接的ip所對應的域名,在IP traffic monitor的pkt captured對話框中就能夠看到域名結果,這個不是很直觀,開啓後會有點點影響抓包性能。
2)TCP/UDP service names:在有端口的地方都會把端口號換成相應的服務名,很是有用,很直觀。
3)Activity mode:顯示流量是按Kbits/s仍是Kbytes/s,建議改爲後面的更符合習慣。
4)Additional ports:按端口號監控所額外須要監控的端口,默認只監控小於1024的。
這個默認就好了,除非有特殊須要。
根據鏈接查看網絡流量,這個最好讓他跑一段時間看統計總量的結構,若是單個鏈接佔用大量帶寬,就很容易看出來。同時根據IP還能夠很容易分辨是和內網仍是外網服務器進行交互。pkt captured能夠看到mac地址。
三、sar命令
sar(System Activity Reporter系統活動狀況報告)是目前 Linux 上最爲全面的系統性能分析工具之一,能夠從多方面對系統的活動進行報告,包括:文件的讀寫狀況、系統調用的使用狀況、磁盤I/O、CPU效率、內存使用情況、進程活動及IPC有關的活動等。
[root@Super soft]# which sar /usr/bin/which: no sar in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/soft/node-v6.10.2-linux-x64/bin/node:/root/bin) [root@Super soft]# yum -y install sysstat [root@Super soft]# which sar /bin/sar [root@Super soft]# sar -n DEV 1 2 Linux 3.10.0-693.21.1.el7.x86_64 (Super.Admin) 08/11/2018 _x86_64_ (16 CPU) 04:54:14 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 04:54:15 PM ens32 18.00 2.00 1.45 0.12 0.00 0.00 0.00 04:54:15 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:54:15 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:54:15 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 04:54:16 PM ens32 15.00 3.00 1.44 0.60 0.00 0.00 0.00 04:54:16 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:54:16 PM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: ens32 16.50 2.50 1.45 0.36 0.00 0.00 0.00 Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 [root@Super soft]#
1 2 表示:間隔時間(秒)、次數,即每一秒鐘取1次值,取2次。
-n參數有6個開關:
DEV:顯示網絡接口信息。
EDEV:顯示關於網絡錯誤的統計數據。
NFS:統計活動的NFS客戶端的信息。
NFSD:統計NFS服務器的信息
SOCK:顯示套接字信息
ALL:顯示全部5個開關
IFACE:LAN接口
rxpck/s:每秒鐘接收的數據包
txpck/s:每秒鐘發送的數據包
rxbyt/s:每秒鐘接收的字節數
txbyt/s:每秒鐘發送的字節數
rxcmp/s:每秒鐘接收的壓縮數據包
txcmp/s:每秒鐘發送的壓縮數據包
rxmcst/s:每秒鐘接收的多播數據包
rxerr/s:每秒鐘接收的壞數據包
txerr/s:每秒鐘發送的壞數據包
coll/s:每秒衝突數
rxdrop/s:由於緩衝充滿,每秒鐘丟棄的已接收數據包數
txdrop/s:由於緩衝充滿,每秒鐘丟棄的已發送數據包數
txcarr/s:發送數據包時,每秒載波錯誤數
rxfram/s:每秒接收數據包的幀對齊錯誤數
rxfifo/s:接收的數據包每秒FIFO過速的錯誤數
txfifo/s:發送的數據包每秒FIFO過速的錯誤數
[root@Super soft]# cat net.sh #!/bin/bash export LANG="en_US.UTF-8" #export LANG="zh_CN.UTF8" source /etc/rc.d/init.d/functions [ -f /etc/profile ] && . /etc/profile [ -f ~/.bash_profile ] && . ~/.bash_profile ethn=$1 while true do RX_pre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}') TX_pre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}') sleep 1 RX_next=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}') TX_next=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}') clear echo -e "time \tInterface\t RX \t TX" RX=$((${RX_next}-${RX_pre})) TX=$((${TX_next}-${TX_pre})) if [[ $RX -lt 1024 ]];then RX="${RX}B/s" elif [[ $RX -gt 1048576 ]];then RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}') else RX=$(echo $RX | awk '{print $1/1024 "KB/s"}') fi if [[ $TX -lt 1024 ]];then TX="${TX}B/s" elif [[ $TX -gt 1048576 ]];then TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}') else TX=$(echo $TX | awk '{print $1/1024 "KB/s"}') fi echo -e "`date +%k:%M:%S` $ethn\t\t$RX $TX" done [root@Super soft]# ./net.sh ens32 time Interface RX TX 17:16:29 ens32 1.1543KB/s 254B/s time Interface RX TX 17:16:30 ens32 1.03711KB/s 0B/s
腳本是經過讀取運行時文件系統/proc/net/dev中的網絡實時數據,並經過簡單計算獲得的。
Linux 內核提供了一種經過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。proc文件系統是一個僞文件系統,它只存在內存當中,而不佔用外存空間。它以文件系統的方式爲訪問系統內核數據的操做提供接口。用戶和應用程序能夠經過proc獲得系統的信息,並能夠改變內核的某些參數。因爲系統的信息,如進程,是動態改變的,因此用戶或應用程序讀取proc文件時,proc文件系統是動態從系統內核讀出所需信息並提交的。/proc文件系統中包含了不少目錄,其中/proc/net/dev 保存了網絡適配器及統計信息。
Receive表示收包,
Transmit表示發送包
bytes表示收發的字節數;
packets表示收發正確的包量;
errs表示收發錯誤的包量;
drop表示收發丟棄的包量;
四、nload命令
查看總帶寬使用狀況,能夠分開來監控入站流量和出站流量。它還能夠繪製圖表以顯示入站流量和出站流量,視圖比例能夠調整。用起來很簡單,不支持許多選項。
CentOS須要從Epel軟件庫得到nload。
[root@localhost ~]# yum install -y epel-release [root@localhost ~]# yum install nload -y [root@localhost ~]# nload -h nload version 0.7.4 Copyright (C) 2001 - 2012 by Roland Riegel <feedback@roland-riegel.de> nload comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. For more details see the GNU General Public License Version 2 (http://www.gnu.org/copyleft/gpl.html). Command line syntax: nload [options] [devices] nload --help|-h Options: -a period Sets the length in seconds of the time window for average calculation. Default is 300. #平均計算時間長度 -i max_scaling Specifies the 100% mark in kBit/s of the graph indicating the incoming bandwidth usage. Ignored if max_scaling is 0 or the switch -m is given. Default is 10240. #指定入口流量最大值 單位是kBit/s -m Show multiple devices at a time; no traffic graphs. #同時顯示多個設備統計信息 -o max_scaling Same as -i but for the graph indicating the outgoing bandwidth usage. Default is 10240. #和-i相同,可是是出口流量 -t interval Determines the refresh interval of the display in milliseconds. Default is 500. #刷新間隔,單位是毫秒, -u h|b|k|m|g Sets the type of unit used for the display of traffic numbers. H|B|K|M|G h: auto, b: Bit/s, k: kBit/s, m: MBit/s etc. H: auto, B: Byte/s, K: kByte/s, M: MByte/s etc. Default is h. #設置右邊Curr、Avg、Min、Max的數據單位,默認是自動變的.注意大小寫單位不一樣! -U h|b|k|m|g Same as -u, but for a total amount of data (without "/s"). H|B|K|M|G Default is H. #和-u相同,可是爲總流量 devices Network devices to use. Default is to use all auto-detected devices. # 指定網卡,默認是所有監控的,使用左右鍵切換。 --help -h Print this help. example: nload -t 200 -i 1024 -o 128 -U M The options above can also be changed at run time by pressing the 'F2' key. #運行時使用F2能夠查看此頁 [root@localhost ~]#
當前流量(Curr),平均流量(Avg),最小流量(Min),最大流量(Max),總和流量(Ttl)
進程的流量
一、nethogs命令
nethogs用來按進程或程序實時統計網絡帶寬使用率,不依賴內核中的模塊。能夠顯示每一個進程所使用的帶寬,並對列表排序,將耗用帶寬最多的進程排在最上面。yum安裝NetHogs須要配置EPEL源,或者https://sourceforge.net/projects/nethogs/ 下載
[root@Super ~]# yum install -y epel-release [root@Super ~]# yum install libpcap nethogs -y [root@Super ~]# nethogs --help nethogs: invalid option -- '-' usage: nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]] -V : prints version. -h : prints this help. -b : bughunt mode - implies tracemode. -d : delay for update refresh rate in seconds. default is 1. #刷新時間,單位秒,默認1秒 -v : view mode (0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB). default is 0. -c : number of updates. default is 0 (unlimited). -t : tracemode. #跟蹤模式 -p : sniff in promiscious mode (not recommended). -s : sort output by sent column. -a : monitor all devices, even loopback/stopped ones. device : device(s) to monitor. default is all interfaces up and running excluding loopback #監聽的設備,默認是eth0,也就是網卡設備名稱 When nethogs is running, press: q: quit s: sort by SENT traffic #按send進行排序 r: sort by RECEIVE traffic #按received進行排序 m: switch between total (KB, B, MB) and KB/s mode #按 m 鍵,切換單位或顯示進程佔用速度或已統計使用的流量。切換順序是KB/sec->KB->B->MB [root@Super ~]#
源碼方式安裝:
yum install gcc-c++ libpcap-devel.x86_64 libpcap.x86_64 ncurses*
git clone https://github.com/raboof/nethogs
cd nethogs/
make
make install
PID(進程ID),運行該進程的用戶,命令行或程序,流量將要去往網絡接口,發送的字節數,接收的字節數
知道PID和端口後,經過 lsof -i:port 或 ps aux|grep PID就能夠知道是哪一個進程。
[root@Super ~]# nethogs eth0
[root@Super ~]# nethogs eth0 eth1