目前很多Linux在使用之前的arp、ifconfig和route命令。虽然这些工具能够工作,但它们在Linux 2.2和更高版本的内核上显得有一些落伍。无论对于Linux开发者还是Linux系统管理员,网络程序调试时数据包的采集和分析是不可少的。tcpdump是Linux中强大的数据包采集分析工具之一。本节主要介绍iproute2和tcpdump的相关知识。
相对于系统提供的arp、ifconfig和route等旧版本的命令,iproute2工具包提供了更丰富的功能,除了提供网络参数设置、路由设置、带宽控制等功能,最新的GRE隧道也可以通过此工具进行配置。
现在大多数Linux发行版本都安装了iproute2软件包,如没有安装可以使用yum工具进行安装。应该注意的是,yum工具需要联网才能使用。iproute2工具包中的主要管理工具为ip命令。下面将介绍iproute2工具包的安装与使用。安装过程如【示例3-21】所示。
【示例3-21】
[root@CentOS Packages]# yum install -y iproute #安装过程省略 [root@CentOS Packages]# rpm -qa|grep iproute iproute-3.10.0-13.el7.x86_64 #检查安装情况 [root@CentOS Packages]# ip -V ip utility, iproute2-ss130716
ip命令的语法如【示例3-22】所示。
【示例3-22】
ip命令是iproute2软件的命令工具,可以替代ifconfig、route等命令,查看网络配置的用法如【示例3-23】所示。
【示例3-23】
上面的命令显示了机器上所有的地址,以及这些地址属于哪些网络接口。“inet”表示Internet (IPv4)。eth0的IP地址与192.168.3.88/24相关联,“/24”指IP地址表示网络地址的位数,“lo”则为本地回路信息。
如需查看路由信息,可以使用“ip route list”命令,如【示例3-24】所示。
【示例3-24】
上述示例首先查看系统中当前的路由情况,其功能和route命令类似。
以上只是初步介绍了iproute2的用法,更多信息请查看系统帮助。
tcpdump即dump traffic on a network,是根据使用者的定义对网络上的数据包进行截获的包分析工具。无论对于网络开发者还是系统管理员,数据包的获取与分析都是最重要的技术之一。对于系统管理员来说,在网络性能急剧下降的时候,可以通过tcpdump工具分析原因,找出造成网络阻塞的来源。对于程序开发者来说,可以通过tcpdump工具来调试程序。tcpdump支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句过滤不必要的信息。
提示
Linux系统下tcpdump普通用户是不能正常执行的,一般通过root用户执行。
tcpdump采用命令行方式,命令格式如下,参数说明如表3.12所示。
表3.12 tcpdump命令参数含义说明
首先确认本机tcpdump是否安装,如果没有安装,可以使用【示例3-25】中的方法安装。
【示例3-25】
#安装tcpdump [root@CentOS Packages]# yum install -y tcpdump #安装过程省略
tcpdump最简单的使用方法如【示例3-26】所示。
【示例3-26】
以上示例演示了tcpdump最简单的使用方式,如不跟任何参数,tcpdump会从系统接口列表中搜寻编号最小的已配置好的接口,不包括loopback接口,一旦找到第1个符合条件的接口,搜寻马上结束,并将获取的数据包打印出来。
tcpdump利用表达式作为过滤数据包的条件,表达式可以是正则表达式。如果数据包符合表达式,则数据包被截获;如果没有给出任何条件,则接口上所有的信息包将会被截获。
表达式中一般有如下几种关键字:
(1)第1种是关于类型的关键字,如host、net和port。例如host 192.168.16.150指明192.168.16.150为一台主机,而net 192.168.16.150则表示192.168.16.150为一个网络地址。如果没有指定类型,默认的类型是host。
(2)第2种是确定数据包传输方向的关键字,包含src、dst、dst or src和dst and src,这些关键字指明了数据包的传输方向。例如src 192.168.16.150指明数据包中的源地址是192.168.16.150,而dst 192.168.16.150则指明数据包中的目的地址是192.168.16.150。如果没有指明方向关键字,则默认是src or dst关键字。
(3)第3种是协议的关键字,如指明是TCP还是UDP协议。
除了这3种类型的关键字之外,还有3种逻辑运算,非运算是“not”或“!”,与运算是“and”或“&&”,或运算是“or”或“||”。通过这些关键字的组合可以实现复杂强大的条件。接下来看一个组合,如【示例3-27】所示。
【示例3-27】
以上tcpdump表示抓取发往本机3306端口的请求。“-i any”表示截获本机所有网络接口的数据报,“tcp”表示TCP协议,“dst host”表示数据包地址为192.168.19.101,“dst port”表示目的地址为3306,“-XX”表示同时会以十六进制和ASCII码形式打印出每个包的数据,“-s100”表示设置tcpdump的数据包抓取长度为100个字节,如果不设置默认为68字节,“-n”表示不对地址(如主机地址或端口号)进行数字表示到名字表示的转换。输出部分“16:08:05”表示时间,然后是发起请求的源IP端口、目的IP和端口,“Flags[P.]”是TCP包中的标志信息(S是SYN标志,F表示FIN,P表示PUSH,R表示RST,“.”表示没有标记,详细说明可进一步参考TCP各种状态之间的转换规则)。