linux网络监控命令iftop、netstat、ss、tcpdump

iftop 命令可以用来监控带宽流量的使用情况。

-h    帮助
-n    不解析域名
-N    数字显示端口
-P    Turn on port display
-B    bytes/sec rather than bits/sec
-p    promiscuous mode 混杂模式,记录所有接口流量
-i    interface
-F    net/mask过滤

-t    用文本接口代替 ncurses 显示
#执行如下命令进入到 ncurses 交互界面
iftop -B
#按下h可以看到帮助菜单
Host display:                          General:
 n - 开关dns解析                 P - 暂停
 s - 开关源host地址              h - 开关帮助菜单
 d - 开关目host标地址            b - 开关上边框
 t - 循环切换显示模式(自己尝试)            B - 循环显示边框2 10 40s平均值
                                        T - 额外显示流量总数
Port display:                           j/k - scroll display
 N - 开关端口名解析          f - edit filter code
 S - 开关源端口             l - 设置屏幕过滤,退格键为(ctrl + ) D - 开关目标端口	           L - lin/log scales
 p - 开关端口显示                ! - shell command
                                        q - 退出
Sorting:
 1/2/3 - sort by 1st/2nd/3rd column
 < - sort by source name
 > - sort by dest name
 o - freeze current order


netstat 命令可以显示网络状态信息。

-a		显示全部
-p		显示程序名
-l		listening
-n		数字显示

-t tcp
-u udp
-x unix domain
netstat -ltn	#tcp监听
netstat -lun	#udp监听
netstat -lxn	#unix监听

netstat -tn	#tcp 连接状态
netstat -xn	#unix连接状态


ss 命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。 

当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。

ss 利用到了TCP协议栈中 tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。

-h:显示帮助信息;
-V:显示指令版本信息;

-n:不解析服务名称,以数字方式显示;
-a:显示所有的套接字;
-l:显示处于监听状态的套接字;
-o:显示计时器信息;
-m:显示套接字的内存使用情况;
-p:显示使用套接字的进程信息;
-i:显示内部的TCP信息;
-4:只显示ipv4的套接字;
-6:只显示ipv6的套接字;
-t:只显示tcp套接字;
-u:只显示udp套接字;
-d:只显示DCCP套接字;
-w:仅显示RAW套接字;
-x:仅显示UNIX域套接字。

#显示所有tcp套接字信息
ss -t -an

#显示所有udp套接字信息
ss -u -a
#显示已连接状态的ssh连接
[root@izj6cfw9yi1iqoik31tqbgz ~]# ss state established '( dport = :ssh or sport = :ssh )'
Netid  Recv-Q Send-Q              Local Address:Port                       Peer Address:Port
tcp    0      0                  172.31.109.183:ssh                        39.181.130.112:16692 
tcp    0      0                  172.31.109.183:ssh                        39.181.130.112:16880  
tcp    0      0                  172.31.109.183:ssh                        39.181.130.112:16851 
...                
tcp    0      52                 172.31.109.183:ssh                        39.181.130.112:16906


tcpdump 命令可以用来抓取网络数据包。

-A    ascii显示
-n    端口host数字显示
-i    指定网卡
-w    写入到文件
包类型 ip tcp udp icmp arp

-x   详细打印,不包括链路层
-xx  详细打印,包括链路层
-X   详细打印(也打印ascii),不包括链路层
-XX  详细打印(也包括ascii),包括链路层


#抓取网卡ens33上从192.168.1.1发来的arp包
[root@192 ~]# tcpdump -i ens33 arp src host 192.168.1.1

20:20:40.137652 ARP, Request who-has 192.168.1.202 tell 192.168.1.1, length 46
#只抓有数据的包
tcpdump  'tcp and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and port 80' -i ens33 -An
#抓取从192.168.1.0/24发来的tcp包,源端口为80
tcpdump  -i ens33 -An dst net 192.168.1.0/24 and src port 80

#抓取端口为80的数据包
tcpdump  -i ens33 port 80 -w tmp.pcap

#抓取从210.27.48.1 发往 210.27.48.2 或 210.27.48.3的包。
tcpdump  -i ens33 src host 210.27.48.1  and dst host  \(210.27.48.2  or  210.27.48.3\)
#抓取icmp包
[root@192 ~]# tcpdump -i ens33 icmp

20:27:17.735688 IP 192.168.1.202 > 192.168.1.10: ICMP echo request, id 20202, seq 1, length 64
20:27:17.735749 IP 192.168.1.10 > 192.168.1.202: ICMP echo reply, id 20202, seq 1, length 64


上一篇: linux命令at、crontab、anacron
下一篇: linux命令logger、dmesg、last(b)、lastlog、who
作者邮箱: 203328517@qq.com