tcpdump报文截取和分析

  • Post author:
  • Post category:其他




简介


Tcpdump是linux环境下的报文抓包工具。支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

Windows下一般使用wireshark进行报文抓取和报文分析。Linux下一般可以使用tcpdump+(tcptrace或wireshark)。


安装tcpdump


本文以redhat as 5作为基础环境安装说明,内核:

Linux hadoop00 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:21 EST 2007 i686 i686 i386 GNU/Linux

下载对应的RPM版本,下载地址:http://www.tcpdump.org

# wget http://www.tcpdump.org/release/tcpdump-4.0.0.tar.gz

# tar -xzvf tcpdump-4.0.0.tar.gz

# ./configure

# make

# make install

# tcpdump -?

tcpdump version 4.0.0

libpcap version 1.1.1

Usage: tcpdump [-aAdDefIKlLnNOpqRStuUvxX] [ -B size ] [ -c count ]

[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]

[ -i interface ] [ -M secret ] [ -r file ]

[ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ]

[ -y datalinktype ] [ -z command ] [ -Z user ]

[ expression ]


Tcpdump常用命令

打印参数

-A:以ASCⅡ编码打印除了链路层报文头外的报文内容。用于捕捉web请求。

-B:设置抓取报文的缓存大小。

-c:收到多少包后退出程序

-dd:dump报文存储格式为C程序格式。

-e:打印链路层报文头

-X:不包括数据链路层的报文,并且以ASCⅡ的编码方式。

-v:详细的输出,也就比普通的多了个TTL和服务类型

-vv:截取显示详细的报文(注意是两个v)

-n:不进行IP地址到主机名的转换

-nn:不进行端口名称的转换

-N:不打印出默认的域名

-O:不进行匹配代码的优化

-t:不打印UNIX时间戳,也就是不显示时间

-tt:打印原始的、未格式化过的时间

-S:Print absolute, rather than relative, TCP sequence numbers.

-w filename : 保存截取的报文到指定的文件。

tcpdump man 文档: http://www.tcpdump.org/tcpdump_man.html

过滤参数

-b 在数据链路层上选择过滤的协议,包括ip,arp,rarp,ipx等

-i 表示指定过滤的网络设备,如网卡标志(eth0,eth1等)。

src、dst、port、host、net、ether、gateway这几个选项又分别包含src、dst 、port、host、net、ehost等附加选项,用于分辨数据包的来源和去向。可以使用and,or和not等进行逻辑组合。

src:数据源(请求);dst 目标;host 主机名或IP;net只网络平面或段;port表示端口号;ether只的是物理地址,即MAC地址;geteway表示网关。

例子:

# tcpdump src host 192.168.1.100 and dst host 192.168.1.101 and port 8080

表示:源为192.168.1.100,目标为192.168.1.101并且端口号为8080的报文。

# tcpdump dst net 192.168.0.0/24

表示目标的网络地址为192.168.0.0/24的子网


我习惯的报文截取和分析


服务器上tcpdump截取报文,本地wireshark分析报文

1.    使用tcpdump在目标服务器上截取报文并保持到文件中。

# # tcpdump -X –w httpdump ‘tcp port 8080 and (((ip[2:2] – ((ip[0]&0xf)<<2)) – ((tcp[12]&0xf0)>>2)) != 0)’

# sz httpdump

2.    下载截取的报文文件到本地,使用wireshark进行分析。

打开wireshark,点击界面中间的open打开下载的dump文件。

列表和流式浏览报文



HTTP报文截取例子


1.    源,目标及端口号过滤

# tcpdump –X –w filename src 192.168.91.1 and dst 192.168.91.10 and port 8080

2.通过报文中的协议标志过滤

# tcpdump  -XvvennSs 0 -i eth0 –w filename tcp[20:2]=0x4745 or tcp[20:2]=0x4854

0x4745 为”GET”前两个字母”GE”

0x4854 为”HTTP”前两个字母”HT”

3.端口号及报文头标志(官方例子)

# tcpdump -X –w filename ‘tcp port 8080 and (((ip[2:2] – ((ip[0]&0xf)<<2)) – ((tcp[12]&0xf0)>>2)) != 0)’