Tcpdump的用法介绍和解决问题范例

Tcpdump的用法介绍和解决问题范例

目录

1.      概述.......................................................................................................................... 1

2.      命令格式................................................................................................................... 2

2.1.       常用的选项和对应参数................................................................................... 2

2.2.       表达式............................................................................................................ 3

3.      使用方法执行结果范例.............................................................................................. 4

3.1.       Tcpdump  -D显示对应的系统的网口,用于-i后面指定网络接口用................. 4

3.2.       tcpdump -i eth0  -n -c 8  icmp;指定eth0,关闭反查dns,抓8包.................. 6

3.3.       不使用-n时,会反查源ip和目标ip对应的url地址......................................... 6

3.4.       -nn取消反向dns的过程,并用数字显示ip端口之类....................................... 8

3.5.       -tt;-ttt;-tttt的用法....................................................................................... 9

3.6.       -e 用来显示源,目标ip的mac地址.............................................................. 10

3.7.       -w写文件,参数是路径和文件名,不写路径默认是系统默认路径.................. 11

3.8.       -x,-xx ,-X,-XX的用法........................................................................... 12

3.9.       复杂的过滤条件表达式范例.......................................................................... 13

4.      Tcpdump执行时的常见错误提示.............................................................................. 15

5.      抓取解决问题实例................................................................................................... 17

 

 

Tcpdump是linux环境下抓包工具,可以对对应网络接口流量进行过滤抓取,可以打印输出到屏幕,也可以保存到指定文件。指定的文件可以用wireshark来打开查看。可以快速查看符合网络接口符合某一条件的抓包,方便我们确定网络问题。

可以在linux系统环境下输入man tcpdump回车来查看它的帮助说明。如下图:

Tcpdump的用法介绍和解决问题范例 其命令格式是:tcpdump  选项和对应参数  表达式

用ctrl+c来终止抓取,有的系统用ctrl+z,有的环境中ctrl+z不生成文件,必须用ctrl+c;

-D  是显示所有的接口用的选项和参数;

 -i  端口号  是指定抓取网卡的名称或者数字编号;

-n 来关闭dns反向解析功能,-nn是关闭反向查询功能并以数字格式显示ip地址端口号,和url地址。不带这个选项回显会很慢。

-c 用于指定抓取包的包数;

-C 用于指定抓取保存文件的大小,单位是兆;

-e用于显示对应的源,目的的mac地址

-w 文件路径和文件名  用于指定保存文件的路径和名称,没有指定路径默认在系统默认路径下;

-t是不显示时间戳,-tttt显示时间戳,-ttt显示请求和响应的时间的时间差;

-v是显示一些协议的详细资料,-vv,-vvv来显示更详细的资料;

-X是用16进制和asc码显示ip层以上各协议包头;

-x  小写x是用16进制打印从ip层开始的帧内容

-xx 小写的xx是用16进制打印从数据链路层开始的帧内容

-X  大写的X是用16进制打印从ip层开始的帧内容

-XX 大写的XX是用16进制打印从数据链路层开始的

-G 后面跟秒数,多少秒后重写另一个文件;

-Z 后面跟用户名,表示要用该用户名来执行;

当选项后面没有参数时,可以把几个选项连接起来使用,如-nne,-envv等等。

表达式是指过滤表达式,符合正则表达式的过滤式和wireshark的预过滤描述方法一致。

过滤表达式:协议  方向  关键词  值  可以使用关系符

协议icmp,arp,tcp ,sctp,udp,ether之类;

方向源src,目的dst;

关键词 host主机, port端口, portrange端口范围;

多个条件可以使用and ,or,not ;

如:net  18.250.0.0/24  and   not“sctp[12] = 04 or  sctp[12] = 05”

Tcpdump  -D显示对应的系统的网口,用于-i后面指定网络接口用

Tcpdump的用法介绍和解决问题范例

-i后面可以跟上面显示的数字编号,也可以使用数字编号后后面的名称。但要注意,每个接口都有自己的ip地址,如2,3,4,5,6,7,8,14,若使用-i 1后者Tcpdump的用法介绍和解决问题范例     -i eth0就抓取eth0上所有子接口ip的消息。

-i  any是抓取所有接口接口的消息。

lo只内部回环ip地址。没有使用-i时,默认抓取最小数字的网络接口。我们下面pc18.250.0.145去ping服务器18.250.0.4为例来显示我们的我们的tcpdump抓包过程。

Tcpdump的用法介绍和解决问题范例

-c用于指定抓包的包数,到达指定包数后自动停止抓包,不用ctrl+c来停止。

Tcpdump的用法介绍和解决问题范例

     tcpdump  -i eth0  -nvv  -c 8 icmp;加一个-vv会显示更详细的解码

 Tcpdump的用法介绍和解决问题范例

 不使用-n时,会反查源ip和目标ip对应的url地址,回显会很慢

-n用于关闭对ip包的dns反向查询功能,不使用-n,收到包后,系统会执行根据ip反向查询url地址的过程。有时执行tcpdump后,等十几秒才会有显示,使用-n后抓包后立即显示。tcpdump  -i 1   -c 15  icmp  or udp port 53,我们使用表达式icmp or udp 53来表示抓符合icmp协议的包和进行dns查询的包,为比较期间,我们用两台服务器相互访问为例,wireshark进行抓包比较;

Tcpdump的用法介绍和解决问题范例Tcpdump的用法介绍和解决问题范例

  •  -nn取消反向dns的过程,并用数字显示ip端口之类

Tcpdump的用法介绍和解决问题范例

Tcpdump的用法介绍和解决问题范例

下面是一个跟踪2121端口的对比图:

Tcpdump的用法介绍和解决问题范例

没有使用-i默认是-i 1或者-i eth0,使用最小网络接口编号的进行。

  •  -tt;-ttt;-tttt的用法

-tt显示时戳,时分秒和秒后6位微秒

-ttt显示每包间的时间差

-tttt显示每包的日期和时间

Tcpdump的用法介绍和解决问题范例

Tcpdump的用法介绍和解决问题范例

Tcpdump的用法介绍和解决问题范例

Tcpdump的用法介绍和解决问题范例

 

  • -e 用来显示源,目标ip的mac地址

Tcpdump的用法介绍和解决问题范例

    -i any监视所有端口的icmp消息,-e用来显示源和目的端口的mac地址。

  • -w写文件,参数是路径和文件名,不写路径默认是系统默认路径

Tcpdump的用法介绍和解决问题范例

注意没有设置抓包大小时,用ctrl+z终止不会生成文件,必须用ctrl+c来终止。下面是生成抓包文件名。

 

 

Tcpdump的用法介绍和解决问题范例

可以用-c来指定抓包个数的大小 Tcpdump的用法介绍和解决问题范例

上面的语句-c 1000是指抓取符合条件的1000包数据后自动停止,条件是arp消息和sctp消息。

查看生成文件的大小

Tcpdump的用法介绍和解决问题范例

拷贝出来文件查看

Tcpdump的用法介绍和解决问题范例

打开查看包数符合1000个。

  •  -x,-xx ,-X,-XX的用法

tcpdump  -nnex   port 5060和tcpdump  -nnexx   port 5060的用法比较

Tcpdump的用法介绍和解决问题范例

tcpdump  -nneX  port 5060和tcpdump  -nneXX port 5060的用法比较Tcpdump的用法介绍和解决问题范例

     可以用or,and,not来组合过滤条件,如icmp and arp,和wireshark的预过滤语句的写法相同。

如我们要过滤arp消息和其成功后的icmp的ping消息,用服务器18.250.0.25去ping服务器18.250.0.4。

proto[位置:个数] = 0x十六进制数,proto指协议,位置是指协议字段开始的偏移量,个数指从偏移位置开始的字节数,[]里都是十进制数字。

语句:arp[14:4]=0x12fa0019  or  arp[24:4]=0x12fa0019  or  icmp

  • Arp请求消息中偏移量为14开始的4个字节是源ip,arp应答消息偏移量为24开始的4个字节是向请求的源ip进行回答。Arp从偏移量为8的地方为源mac地址,从18开始为目的mac地址。

    Tcpdump的用法介绍和解决问题范例

     

    过程如下:

    在18.250.0.25侧

    Tcpdump的用法介绍和解决问题范例

    在18.250.0.4侧有这样的显示

    Tcpdump的用法介绍和解决问题范例

  • Tcpdump执行时的常见错误提示
  • 表达式的语法没有错误,但没有交集没有符合条件的包
  • Tcpdump的用法介绍和解决问题范例

  • 根据偏移量和个数过滤出错
  • proto[位置:个数] = 0x十六进制数,个数必须是1,2,4的偶数

    Proto包括:ether,host,arp,sctp,tcp,udp等等

    Tcpdump的用法介绍和解决问题范例

  • Tcpdump的用法介绍和解决问题范例

    tcpdump  -i 1   arp[24:4] = 0x12fa000e  or  icmp 抓目的ip和icmp消息的抓包,注意源ip是arp[14:x]开始的,目的ip是24开始的。

    Tcpdump的用法介绍和解决问题范例

  • syntax error near unexpected token `('
  • linux中不能出现(),把括号去掉就没有问题了(需要使用转义符)

    Tcpdump的用法介绍和解决问题范例

    用“”来转义就没有问题了

    Tcpdump的用法介绍和解决问题范例

  • 语法错误
  • Tcpdump的用法介绍和解决问题范例

  • 抓取解决问题实例

  •      tcpdump抓取流量,输出到屏幕上时,不做过滤,会有大量包弹出,不利于我们判断问题,所以要采用表达式过滤流量,显示特定的包,这样方便我们发现问题。

  • 范例回程路由的问题确定:

       办公环境中的192.168.207.0/24网段pc192.168.207.25要通过路由方式访问服务器18.250.0.25,发现ping不通,      如下图:

    Tcpdump的用法介绍和解决问题范例

    看图中表现,ping包已经发出,没有等到响应包,超时了。

    处理思路:

    在207网段pc侧长ping服务器ip,在服务器侧18.250.0.25侧执行tcpdump看是否收到包,收到了证明前向路由没有问题,没有收到,检查经过节点的路由指向。有回包的话,证明服务器的回程路由没有问题,检查经过节点的回程路由指向,回包在哪一级丢了。没有回包检查服务器本身的回程路由。

    Tcpdump的用法介绍和解决问题范例

    服务器侧执行tcpdump  -nnevv   host  192.168.207.25,看到收到ping的request消息,但没有响应reply消息发出。

    Tcpdump的用法介绍和解决问题范例

    判断服务器侧的回程路由有问题,检查回程路由。

    Tcpdump的用法介绍和解决问题范例

    发现本身只有直连路由18.250.0.0/24的直连路由,没有回程路由。

    确定服务器本身mac地址是d4:ae:52:ce:5c:7b,在上图的tcpdump消息里ping的request消息是由c8:50:e9:67:fa:0c发来的,只要知道这个MAC地址对应的ip,把回程路由指向这个mac地址对应的ip就能实现回程路由。

    确定c8:50:e9:67:fa:0c对应的ip的方法,因为发包前,服务器的上级设备应该和服务器在同一网段,并发arp查询消息过来,得到响应后,转发request消息给服务器。知道这样流程后,重新来过,207侧ping,服务器侧抓tcpdump  -nnevv  arp[14:2]=0x12fa  and arp[24:2]=0x12fa  or  host 192.168.207.25看看?它是从协议的起始开始计算偏移量,等号只有一个。

       Tcpdump的用法介绍和解决问题范例

  • 确定是从18.250.0.100的mac c8:50:e9:67:fa:0c发出的arp请求消息,已知18.250.0.100是三层交换机的一个子接口ip地址,由此确定做一个回程路由指向18.250.0.100,考虑办公网的ip段是192.168.192.0/19,因此做一个这样的回程路由看看,route add -net 192.168.192.0/19 gw 18.250.0.100

    Tcpdump的用法介绍和解决问题范例

    添加成功后,再次ping一下看看?

    Tcpdump的用法介绍和解决问题范例

    Tcpdump的用法介绍和解决问题范例

    问题解决。

  • 过滤rtp流用用udp[8:1]=0x80
  • Tcpdump的用法介绍和解决问题范例