深度分析LINUX TCPDUMP工具使用

在linux环境下进行网络分析时,tcpdump是必须掌握的一个分析工具,他的功能和windows下使用的网络分析工具wireshark功能类似,都是用来分析网络问题。我在自己的数据中心环境中linux服务器上通常都是用这个工具来分析和排查网络问题。现在就介绍一下tcpdump在linux下的用法。
TCPDUMP命令格式:

    1. tcpdump采用命令行方式,它的命令格式为:
    2.   tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
  1.           [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
  2.           [ -T 类型 ] [ -w 文件名 ] [表达式 ]

在TCPDUMP的表达式中一般有以下各种关键字:

(1)第一种是关于类型的关键字,主要包括host,net,port:
例:

  1. tcpdump -i eth1 'host 192.168.193.150 '

-i :指定dump的接口, 这个表达式表示dump eth1 接口下所有主机地址为192.168.193.150的报文。

(2)第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。

例:

  1. tcpdump -i eth1 'src 192.168.193.150 '

这个表达式表示的是dump 接口下源主机地址为192.168.193.150的报文,明确了需要dump哪个方向的报文而不是和前面那个dump所有方向的报文。

(3)第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。

例:

  1. tcpdump -i eth1 'icmp '

这个表达式表示只dump 协议为icmp的报文 。
这里的协议号还可以用具体的协议号来表达如下:

  1. tcpdump -i em1 'ether proto 0x0800'

这个表达式表示dump ether协议号为0800的报文(0800是IP的协议号)

(4)除了以上类型,还有如下类型:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'or' ,'||';

例:

  1. tcpdump -i eth1 'icmp && src 192.168.193.150 '

这个表达式表示结合了上面几种表达式,表示的是dump 接口下源主机地址192.168.193.150同时协议为ICMP的所有报文。通过这个表达式可以过滤出不同字段的报文,使你的需求更明确。

  1. tcpdump tcp port ! 22 and ! ip and ! arp -i eth0

在接口下过滤 tcp端口为22 过滤arp和ip报文。
上面介绍了tcpdump哪种关键字的表达方式,在linux tcpdump功能中还有提供的字符偏移量表达方式:
(1)icmptype:表示icmp报文中类弄字节的偏移量
(2)icmpcode:表示icmp报文中编码字节的偏移量
(3)tcpflags:表示TCP报文中标志位字节的偏移量
此外,还提供了很多值来对应上面的偏移字节:
ICMP中类型字节的值可以是:

  1. icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redi‐rect, icmp-echo, icmp-routeradvert, icmp-routersolicit,icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstam‐preply, icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.

TCP中标志位字节的值可以是:

  1. tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg

结合上面介绍的表达式我们就可以写出不同的逻辑组合:

  1. tcpdump -i eth1 'host 192.168.193.150 && tcp[tcpflags]=tcp-ack'

这个表达表示的是dump接口下主机地址为192.168.193.150,同时tcpflags为tcp-ack标志的所有报文。这个表达示就可以更精确到某个协议的具体字段的报文。
上面介绍了各种表达式,但是这些表达式都只是dump出报文信息,并没有保存文件,如果你想要把这些文件保存下来,在windows下分析,那么你可以在以上表达式下再添加一个参数,如下:

  1. tcpdump -i eth1 'host 192.168.193.150 && tcp[tcpflags]=tcp-ack' -w test.cap

这个表达表示的是dump接口下主机地址为192.168.193.150,同时tcpflags为tcp-ack标志的所有报文,同时把这些信息保存为test.cap文件,这个文件保存在当前目录中。你可以把这个.cap的文件上传到windows下,通过wireshark工具进行分析。

weinxin
DC Farm小程序二维码
扫一扫添加博客小程序
Jim

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  2   博主  0

    • avatar 兆赫 0

      好文章!!!

      www.zhaohe.org

      • avatar may 1

        tcpdump神器啊,之前在学校做一个ids的项目是用到过.