一、iftop
1、简介
Linux 中查看网卡流量工具有 iptraf
、iftop
以及 nethogs
等,iftop 可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等。
2、安装
CentOS yum 方式
# 安装依赖
yum install iftop -y
3、语法
iftop -h | [-npblNBP] [-i interface] [-f filter code] [-F net/mask] [-G net6/mask6]
参数
-i 设定监测的网卡,如:iftop -i eth1,其中eth1是服务器的公网网卡,(网卡名称可以通过ifconfig查看)
-F 显示特定网段的进出流量,如 `iftop -F 10.10.1.0/24` 或 `iftop -F 10.10.1.0/255.255.255.0`
-B 以Byte为单位显示流量(默认是bits), 如:`iftop -i eth1 -B -F 182.92.*.20` 显示 182.92.*.20这个IP与服务器的网卡eth1交互的数据量,单位是Byte。
-n 使host信息默认直接都显示IP,如:iftop -n
-N 使端口信息默认直接都显示端口号,如: iftop -N
-h(display this message),帮助,显示参数信息
-p 使用这个参数后,中间的列表显示的本地主机信息,出现了本机以外的IP信息;
-b 使流量图形条默认就显示;
-f 这个暂时还不太会用,过滤计算包用的;
-P 使host信息及端口信息默认就都显示;
-m 设置界面最上边的刻度的最大值,刻度分五个大段显示,例:iftop -m 100M
- 不使用ncurses 界面
-t
不使用 ncurses 界面-s num
数秒后打印结果,和-t连用-L num
打印数据行数,和-t连用
4、示例
# iftop
1.91Mb 3.81Mb 5.72Mb 7.63Mb 9.54Mb
mqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqq
bogon => 10.117.49.124 103Kb 43.1Kb 43.5Kb
<= 331Kb 150Kb 180Kb
bogon => bogon 42.9Kb 8.58Kb 2.18Kb
<= 1.84Kb 376b 131b
bogon => localhost 42.7Kb 8.55Kb 2.17Kb
<= 1.66Kb 339b 122b
bogon => BJ-DZ0101360.baidu.com 1.86Kb 2.88Kb 3.47Kb
<= 184b 394b 599b
bogon => 10.117.49.125 2.68Kb 1.15Kb 1.20Kb
<= 1.01Kb 1.99Kb 2.54Kb
bogon => 10.117.49.123 2.68Kb 1.15Kb 1.20Kb
<= 1.01Kb 1.99Kb 2.54Kb
bogon => 10.117.49.128 2.68Kb 1.15Kb 1.20Kb
<= 1.01Kb 1.99Kb 2.54Kb
bogon => 10.117.49.126 2.68Kb 1.15Kb 1.20Kb
<= 1.01Kb 1.99Kb 2.54Kb
bogon => 10.117.49.127 2.68Kb 1.15Kb 1.20Kb
<= 1.01Kb 1.99Kb 2.54Kb
bogon => bogon 0b 0b 0b
<= 908b 1.13Kb 970b
bogon => 10.117.49.12 0b 0b 0b
<= 972b 972b 930b
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
TX: cum: 771KB peak: 204Kb rates: 204Kb 69.3Kb 57.7Kb
RX: 2.63MB 1.01Mb 350Kb 172Kb 205Kb
TOTAL: 3.39MB 1.18Mb 554Kb 241Kb 263Kb
界面说明
- <=与=>,表示的是流量的方向。
- TX:从网卡发出的流量 。
- RX:网卡接收流量。
- TOTAL:网卡发送接收总流量。
- cum:iftop开始运行到当前时间点的总流量。
- peak:网卡流量峰值。
- rates:分别表示最近2s、10s、40s 的平均流量。
5、ncurses界面按钮
进入ncurses界面后,按键盘对应按键,产生如下效果:
- 按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退出监控。
6、-t(不使用ncurses 界面)
说明:-t 不使用ncurses界面,-L 显示x条数据,-s x秒后显示x秒内统计结果
# iftop -t -L 10 -s 5
interface: eth0
IP address is: 10.10.239.101
MAC address is: 52:54:00:77:17:a2
Listening on eth0
# Host name (port/service if enabled) last 2s last 10s last 40s cumulative
--------------------------------------------------------------------------------------------
1 DoM01 => 943Kb 899Kb 899Kb 674KB
DoN04 <= 9.53Mb 3.82Mb 3.82Mb 2.87MB
2 10.10.239.100 => 9.10Mb 3.46Mb 3.46Mb 2.60MB
10.10.239.64 <= 88.3Kb 35.0Kb 35.0Kb 26.3KB
3 10.10.239.100 => 431Kb 502Kb 502Kb 376KB
DoN03 <= 853Kb 899Kb 899Kb 674KB
4 DoM01 => 600Kb 616Kb 616Kb 462KB
DoN06 <= 296Kb 325Kb 325Kb 244KB
5 DoM01 => 604Kb 617Kb 617Kb 462KB
DoN01 <= 300Kb 308Kb 308Kb 231KB
6 DoM01 => 115Kb 116Kb 116Kb 86.8KB
DoM02 <= 719Kb 807Kb 807Kb 605KB
7 DoM01 => 36.7Kb 34.4Kb 34.4Kb 25.8KB
DoM03 <= 672Kb 555Kb 555Kb 416KB
8 10.10.239.100 => 577Kb 555Kb 555Kb 416KB
DoM02 <= 14.2Kb 25.3Kb 25.3Kb 18.9KB
9 DoM01 => 35.8Kb 74.8Kb 74.8Kb 56.1KB
DoN07 <= 69.0Kb 79.1Kb 79.1Kb 59.4KB
10 10.10.239.100 => 38.5Kb 68.9Kb 68.9Kb 51.6KB
DoN06 <= 61.3Kb 53.7Kb 53.7Kb 40.3KB
--------------------------------------------------------------------------------------------
Total send rate: 12.9Mb 7.22Mb 7.22Mb
Total receive rate: 12.9Mb 7.11Mb 7.11Mb
Total send and receive rate: 25.8Mb 14.3Mb 14.3Mb
--------------------------------------------------------------------------------------------
Peak rate (sent/received/total): 12.9Mb 12.9Mb 25.8Mb
Cumulative (sent/received/total): 5.41MB 5.33MB 10.7MB
============================================================================================
二、tcpdump
Linux tcpdump命令用于抓包网络传输数据。
执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员。
1、语法
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
参数说明:
- -a 尝试将网络和广播地址转换成名称。
- -c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
- -d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
- -dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
- -ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
- -e 在每列倾倒资料上显示连接层级的文件头。
- -f 用数字显示网际网络地址。
- -F<表达文件> 指定内含表达方式的文件。
- -i<网络界面> 使用指定的网络截面送出数据包。
- -l 使用标准输出列的缓冲区。
- -n 不把主机的网络地址转换成名字。
- -N 不列出域名。
- -O 不将数据包编码最佳化。
- -p 不让网络界面进入混杂模式。
- -q 快速输出,仅列出少数的传输协议信息。
- -r<数据包文件> 从指定的文件读取数据包数据。
- -s<数据包大小> 设置每个数据包的大小。
- -S 用绝对而非相对数值列出TCP关联数。
- -t 在每列倾倒资料上不显示时间戳记。
- -tt 在每列倾倒资料上显示未经格式化的时间戳记。
- -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
- -v 详细显示指令执行过程。
- -vv 更详细显示指令执行过程。
- -x 用十六进制字码列出数据包资料。
- -w<数据包文件> 把数据包数据写入指定的文件。
2、基本语法
1、过滤主机
- 抓取所有经过 eth1,目的或源地址是 192.168.1.1 的网络数据
# tcpdump -i eth1 host 192.168.1.1
- 源地址
# tcpdump -i eth1 src host 192.168.1.1
- 目的地址
# tcpdump -i eth1 dst host 192.168.1.1
2、过滤端口
- 抓取所有经过 eth1,目的或源端口是 25 的网络数据
# tcpdump -i eth1 port 25
- 源端口
# tcpdump -i eth1 src port 25
- 目的端口
# tcpdump -i eth1 dst port 25
3、网络过滤
# tcpdump -i eth1 net 192.168
# tcpdump -i eth1 src net 192.168
# tcpdump -i eth1 dst net 192.168
可以加入-X参数,查看包内容
4、协议过滤
# tcpdump -i eth1 arp
# tcpdump -i eth1 ip
# tcpdump -i eth1 tcp
# tcpdump -i eth1 udp
# tcpdump -i eth1 icmp
5、常用表达式
非 : ! or "not" (去掉双引号)
且 : && or "and"
或 : || or "or"
- 抓取所有经过 eth1,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 数据
# tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
- 抓取所有经过 eth1,目标 MAC 地址是 00:01:02:03:04:05 的 ICMP 数据
# tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
- 抓取所有经过 eth1,目的网络是 192.168,但目的主机不是 192.168.1.200 的 TCP 数据
# tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
- 只抓 SYN 包
# tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'
- 抓 SYN, ACK
# tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0'
抓 SMTP 数据
# tcpdump -i eth1 '((port 25) and (tcp[(tcp[12]>>2):4] = 0x4d41494c))'
- 抓 DNS 请求数据
# tcpdump -i eth1 udp dst port 53
-c 参数对于运维人员来说也比较常用,因为流量比较大的服务器,靠人工 CTRL+C 还是抓的太多,于是可以用-c 参数指定抓多少个包。
# time tcpdump -nn -i eth0 'tcp[tcpflags] = tcp-syn' -c 10000 > /dev/null
上面的命令计算抓 10000 个 SYN 包花费多少时间,可以判断访问量大概是多少。
# 实时抓取端口号8000的GET包,然后写入GET.log
tcpdump -i eth0 '((port 8000) and (tcp[(tcp[12]>>2):4]=0x47455420))' -nnAl -w /tmp/GET.log
3、实用tcpdump命令
查看本机与mysql的操作命令 注意 -i any表示监听所有网络接口,我们也根据自身情况选择网络接口
# tcpdump -i any -w - dst port 3306 |strings
查看本机58895上与mysql的命令 注意 -i any 表示监听所有网络接口,我们需要根据自身情况选择网络接口
# tcpdump -i any -w - dst port 3306 and src port 58895 |strings
同理,也可以使用上面的命令,查看kafka,etcd,redis,mc等的命令情况,只要是明文协议都可以
看目前机器上有哪些网络接口
# tcpdump -D
评论区