linux命令iftop、netstat、ss、tcpdump

2018-07-05 23:27:47

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



备注:
1.本系列命令都在centos7里测试,其他发行版如ubuntu、debian、fedora、opensuse等可能略微不同
2.本文只讲解常用用法,详细用法请自行利用 man 命令查看
3.原文地址http://www.freecls.com/a/2712/88

 

©著作权归作者所有
收藏
推荐阅读
  • linux命令at、crontab、anacron

    延后执行任务at 命令可以让我们的工作延后在某一特定时刻执行。要支持 at 这个单一工作调度,我么必须要运行 atd 这个服务(一般这个服务都是自动运行了的,如果服务已运行,忽略下面3行)。yum i...

  • linux命令date、time

    date 命令可以显示设置日期和时间。-d 根据指定的字符串来显示时间,必须加上双引号 -s 根据指定的字符串来设置时间 -u 根据utc显示和设置 -R 以 RFC 2822格式输出时间&lt;...

  • linux命令man、locale、selinux

    man 命令可以提供命令或者是c库函数等参考手册,man手册按章节(section)来记录不同类型的页。如果不指定章节,默认按照特定的顺序搜索全部章节,并停留在第一个找到的章节里。下面是对各个章节的解...

  • linux资源限制命令 - ulimit

    ulimit 可以修改当前bash环境的资源限制,这样在当前会话下运行的程序都会继承这些资源限制,默认情况下即设置 软限制,也设置 硬限制,软限制与硬限制的区别读者可以参考linux c进程资源。资源...

  • linux环境变量export、declare、env、readonly、read

    export 可以打印和设置变量。普通变量 只在当前 bash 中有效,新建的子进程都不会继承。环境变量 新创建的子进程会继承。export name #把普通变量name添加到环境变量 export...

  • nginx模块 ngx_http_headers_module

    ngx_http_headers_module 模块是用来增加 Expires 和 Cache-control,或者是任意的响应头。Syntax: add_header name value [alw...

  • nginx模块 ngx_http_gunzip_module、ngx_http_gzip_module、ngx_http_gzip_static_module

    ngx_http_gunzip_module 模块将文件解压缩后并在响应头加上 "Content-Encoding: gzip" 返回给客户端。为了解决客户端不支持gzip压缩。编译的时候带上 --w...

  • nginx模块 ngx_http_flv_module、ngx_http_mp4_module

    ngx_http_flv_module模块提供了对 flv 视频的伪流支持。编译的时候带上 --with-http_flv_module。它会根据指定的 start 参数来指定跳过多少字节,并在返回数...

  • nginx模块 ngx_http_fastcgi_module

    ngx_http_fastcgi_module 模块使得nginx可以与 fastcgi 服务器通信。比如目前要使得 nginx 支持 php 就得使用 fastcgi技术,在服务器上装上 nginx...

  • nginx模块 ngx_http_autoindex_module

    ngx_http_autoindex_module 模块可以将uri以 / 结尾时,列出里面的文件和目录。Syntax: autoindex on | off; Default: autoindex ...

简介
天降大任于斯人也,必先苦其心志。