1 系统监测工具

1 系统监测工具

常用工具

LInux提供了很多方便开发人员调试和测评服务的工具,本节按照使用频率依次介绍这些工具: tcpdumplsofnetstatstracencvmstatifstat

tcpdump

常用的选项

tcpdump是一款网络抓包工具,他给使用者提供了大量的选项,用来过滤数据包。

  1. 参数 -n:使用IP地址表示主机而不是主机名;使用数字表示端口号,而不是服务名;
  2. 参数 -i:指定要抓包的网卡,-i any表示抓取所有网卡的数据包;
  3. 参数 -t:不打印时间戳;
  4. 参数 -s:设置抓包时的抓取长度,默认是65535字节,这个默认值已经够大了。如果写-s0,表示抓一个完整的包而不要截断;
  5. 参数 -w:将抓包内容输出到文件中;
  6. 参数 -v:当分析和打印的时候, 产生详细的输出. 比如, 包的生存时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性检测, 比如对IP或ICMP包头部的校验和.;
  7. 参数 -vv:产生比-v更详细的输出. 比如, NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码;
  8. 参数 -vvv:产生比-vv更详细的输出. 比如, telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面;
  9. 参数 -c:仅抓取指定数量的数据包;
  10. 参数 -C:该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576);
  11. 参数 -W:此选项与-C 选项配合使用, 这将限制可打开的文件数目, 并且当文件数据超过这里设置的限制时, 依次循环替代之前的文件;
  12. 参数-r:从文件读取数据包信息并显示;
  13. 参数-S:打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.

笔者经常抓包使用的命令是:
tcpdunp -vv -i ethxxx host xxx -s100 -W100 -C100 -w a.pcap

常用的表达式

tcpdump除了提供选项外,还支持使用表达式过滤数据包,表达式有3种:类型方向协议

  1. 类型:解释后面紧跟着的参数含义,当前支持的类型有:主机名或IP地址host、用CIDR方法表示的网络地址net、端口port、端口范围portrange
    比如抓取所有进入或离开sundown的数据包。
    tcpdump host sundown

    比如抓取所有210.27.48.1 主机收到的和发出的数据包
    tcpdump host 210.27.48.1

    比如抓取整个1.2.3.0/255.255.255.0网络上的数据包
    tcpdump net 1.2.3.0/255.255.255.0

  2. 方向src指定数据包的发送端,dst指定数据包的目的端,比如抓取进入端口31000的数据包;
    tcpdump dst port 31000

    比如抓取主机hostname发送的所有数据
    tcpdump -i eth0 src host hostname

    比如抓取所有送到主机192.168.1.100的数据包
    tcpdump -i eth0 dst host 192.168.1.100

  3. 协议:指定目标协议,比如抓取所有的ICMP数据包,
    tcpdump icmp

逻辑操作符

tcpdump的逻辑操作符与 编程语言操作符完全相同,包括and(或者&&),or(或者||),not(或者!),如果表达式比较复杂,可以用括号将它们分组,不过使用括号时,要么用反斜杠\进行转义,要么用单引号'括住

比如抓取helios 与 hot 或者与 ace 之间通信的包
tcpdump host helios and \( hot or ace \)

比如抓取主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的包
tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \)

比如抓取主ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump ip host ace and not helios

比如抓取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2

比如抓取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump tcp port 23 and host 210.27.48.1

比如抓取udp 123 端口进行监视 123 为ntp的服务端口
tcpdump udp port 123

比如抓取来自主机1.2.3.4,目标端口为31000或者32000的数据
tcpdump 'src host 1.2.3.4 and (dst port 31000 or 32000)'

lsof

lsof(list open file)是一个列出系统打开了哪些文件描述符的工具,通过这个命令,我们可以查看一个进程打开了哪些文件描述符,也可以查看某个文件描述符被哪些进程打开了。

上一篇:tcpdump


下一篇:linux – tcpdump:匹配确切的数据包长度