F5的负载均衡产品Bigip不用我多介绍了,是ADN(应用交付网络)市场里的龙头老大。由于其基于Linux系统,所以同样拥有tcpdump网络抓包工具,是网络排错方面的必备工具。下面简单介绍用法。

 

  • 对特定网络接口做抓包:tcpdump -i

    例如:

    tcpdump -i ext1

 

  • 禁用名称解析

    默认情况下,tcpdump会尝试将IP地址解析为名称。这样会导致抓包过程中很多时间耗费在DNS解析上,其输出结果也会比较繁杂,令人不知所以。

    要禁用名称解析,可以使用-n标志:

    tcpdump -n

 

  • 将tcpdump输出到文件(输出到文件时,不会同时输出到屏幕):

    有两种选择:输出为二进制文件,输出为文本文件。

  1. 二进制文件:tcpdump -w

    例如:tcpdump -w dump1.bin

  1. 文本文件:  tcpdump >

    例如:tcpdump >dump1.txt

 

  • 那么怎么查看tcpdump生成的文件呢?依然使用tcpdump命令,加上-r参数:

    tcpdump -r

    例如:tcpdump -r dump1.bin

 

  • 过滤器

    f5的tcpdump可以在抓包时就进行过滤。

1.  IP地址过滤

1.1  对IP地址过滤(包括了这个IP上流进和流出的包): tcpdump host

例如:tcpdump host 10.10.1.1

 

1.2.  对来自某IP地址的包进行过滤:tcpdump src host

1.3.  对流向某IP地址的包进行过滤:tcpdump dst host

2.  端口过滤

2.1  源端口过滤:tcpdump src port

2.2  目的端口过滤:tcpdump dst port

3.  tcpdump还可以对TCP数据段标志位进行过滤。这个对传输层排错很有用:

3.1  过滤SYN标志: tcpdump 'tcp[tcpflags]&(tcp-syn)!=0'

3.2  过滤RST标志: tcpdump 'tcp[tcpflags]&(tcp-rst)!=0'

 

  • and操作符可以将多个过滤器联合起来工作,产生更符合需求的抓包结果。

    tcpdump src host 172.16.101.20 and dst port 80

 

  • 在直接输出至屏幕,或者从已抓取文件中读出结果时,应该使用-X开关,以便以ASCII码进行输出包头信息。TCP包的主体数据还是以十六进制表示。如果要查看全部信息,推荐用wireshark工具打开dump文件,能看到全部七层信息。
  • 例如:

    tcpdump -X -s200 src host 172.16.100.20 and dst port 80

 

  • 忽略名称解析和端口解析

    前面说过,名称解析会耗费系统资源,建议使用-n开关来关闭名称解析。端口解析虽然不像名称解析那么耗费资源,但也不建议使用。要同时关闭名称和端口解析,使用-nn开关即可。例如:

    tcpdump -nn src host 172.16.101.20 and dst port 80

  • 综合实例

    tcpdump -Xs200 -nni eth0 -w /var/tmp/mgmt.cap dst host 172.16.101.20 and dst port 162